ksaitoの日記

日々試したことの覚え書き

移転しました。

自動的にリダイレクトします。

既存のVPCをterraformで扱う方法について考えました。

既存のVPCの情報をインポートしてterraform管理下に置く方法は、たくさん見つかりましたがVPCを扱う権限がなかったり、管理されたVPCを使うだけというケースでは、dataを使うのが良さそうです。

使い方

variable.tfdata.tfoutput.tfというファイルを使います。

data.tfに次のように定義します。

locals {
  vpc_id = var.vpc_id
}

data "aws_vpc" "target_vpc" {
  id = local.vpc_id
}

data "aws_subnet_ids" "subnet_ids" {
  vpc_id = local.vpc_id
}

data "aws_subnet" "target_subnet" {
  for_each = data.aws_subnet_ids.subnet_ids.ids
  id       = each.value
}

入力となるvariable.tfは、次のように定義します。 vpc-*****には、リソースを作成するVPC IDをハードコードするか、オプションやファイルから渡します。

variable "vpc_id" {
  default = "vpc-*****"
}
variable "region" {
  default = "ap-northeast-1"
}

output.tfで下記のように定義します。

output "vpc" {
  value = data.aws_vpc.target_vpc.id
}

output "subnets" {
  value = [for s in data.aws_subnet.target_subnet : s.id]
}

provider.tfは、下記のように定義して、接続情報を適宜設定します。

provider "aws" {
  region = var.region
  version = "= 2.58.0"
}

あとは、下記のコマンドで、情報を収集して表示します。

terraform init
terraform apply
terraform output

以上