Terraformのimport機能を使って既存のVPCとサブネットをTerraformで管理できるようにする
Terraformのimport機能を使って既存のVPCとサブネットをTerraformで管理できるようにする:
本記事では、Terraformのimport機能を使って、手動で構築された既存のVPCとサブネットをTerraformで管理できるようにする手順を記載しています。
Terraformはインストールされていることとする。
下記の構成図のVPCとサブネットをサンプルとする。
作業ディレクトリに、各設定ファイルを準備する。
( variables.tf 内の各変数の値とNameTagの有無は、適宜、既存の環境に合わせて下さい。)
下記コマンドで、Terraformの作業ディレクトリを初期化します。
下記コマンドで、既存のVPCをimportします。
下記コマンドで、既存のサブネットをimportします。
terraform.tfstateファイルが作成されます。
下記コマンドで、差分がないか確認し、下記メッセージが表示されれば、完了です。
はじめに
本記事では、Terraformのimport機能を使って、手動で構築された既存のVPCとサブネットをTerraformで管理できるようにする手順を記載しています。
前提条件
Terraformはインストールされていることとする。$ terraform --version Terraform v0.11.8
手順
作業ディレクトリに、各設定ファイルを準備する。( variables.tf 内の各変数の値とNameTagの有無は、適宜、既存の環境に合わせて下さい。)
$ tree terraform/ terraform/ ├── aws.tf ├── terraform.tfvars ├── variables.tf └── vpc.tf
terraform.tfvars
aws_access_key = "アクセスキー" aws_secret_key = "シークレットキー" aws_region = "ap-northeast-1"
aws.tf
provider "aws" { access_key = "${var.aws_access_key}" secret_key = "${var.aws_secret_key}" region = "${var.aws_region}" version = "~> 1.0" }
variables.tf
## AWS variable "aws_access_key" {} variable "aws_secret_key" {} variable "aws_region" { default = "ap-northeast-1" } data "aws_caller_identity" "self" {} ## VPC CIDR variable "vpc_cidr" { default = "10.1.0.0/16" } ## VPC Name Tag variable "vpc_name_tag" { default = "terraform-import-vpc" } ## Subnet variable "subnet_cidr" { type = "map" default = { public-a = "10.1.10.0/24" public-c = "10.1.20.0/24" private-a = "10.1.100.0/24" private-c = "10.1.200.0/24" } } ## Subnet Name Tag variable "subnet_name_tag" { type = "map" default = { public-a = "terraform-import-public-subnet-a" public-c = "terraform-import-public-subnet-c" private-a = "terraform-import-private-subnet-a" private-c = "terraform-import-private-subnet-c" } }
vpc.tf
# VPC resource "aws_vpc" "vpc" { cidr_block = "${var.vpc_cidr}" tags { Name = "${var.vpc_name_tag}" } } # Subnet resource "aws_subnet" "public-a" { vpc_id = "${aws_vpc.vpc.id}" cidr_block = "${var.subnet_cidr["public-a"]}" availability_zone = "ap-northeast-1a" tags { Name = "${var.subnet_name_tag["public-a"]}" } } resource "aws_subnet" "public-c" { vpc_id = "${aws_vpc.vpc.id}" cidr_block = "${var.subnet_cidr["public-c"]}" availability_zone = "ap-northeast-1c" tags { Name = "${var.subnet_name_tag["public-c"]}" } } resource "aws_subnet" "private-a" { vpc_id = "${aws_vpc.vpc.id}" cidr_block = "${var.subnet_cidr["private-a"]}" availability_zone = "ap-northeast-1a" tags { Name = "${var.subnet_name_tag["private-a"]}" } } resource "aws_subnet" "private-c" { vpc_id = "${aws_vpc.vpc.id}" cidr_block = "${var.subnet_cidr["private-c"]}" availability_zone = "ap-northeast-1c" tags { Name = "${var.subnet_name_tag["private-c"]}" } }
$ terraform init Initializing provider plugins... - Checking for available provider plugins on https://releases.hashicorp.com... - Downloading plugin for provider "aws" (1.58.0)... Terraform has been successfully initialized!
terraform import aws_vpc.vpc [VPCのID]
terraform import aws_subnet.public-a [Public Subnet A の ID] terraform import aws_subnet.public-c [Public Subnet C の ID] terraform import aws_subnet.private-a [Private Subnet A の ID] terraform import aws_subnet.private-c [Private Subnet C の ID]
$ tree terraform/ terraform/ ├── aws.tf ├── terraform.tfstate ├── terraform.tfstate.backup ├── terraform.tfvars ├── variables.tf └── vpc.tf
$ terraform plan No changes. Infrastructure is up-to-date.
コメント
コメントを投稿