前提・実現したいこと
TerraformにてAWS環境上でVPCとSubnetの簡単な構成を作成したく思っております。
VPCで作成したvpc_idをSubnetに上手く渡せていないように見受けられるので
解決方法についてアドバイスなど提示いただけますと幸いです。
構成については、複数リソースを作成することを想定して
for_eachとlookupを利用して呼び出しを行っております。
発生している問題・エラーメッセージ
$ terraform plan -var-file=prd/resource-prd-vars.tfvars module.create_vpc_module.aws_vpc.vpc["vpc01"]: Refreshing state... [id=vpc-0419f19a0980c568f] Error: Invalid index on ..\modules\vpc\vpc-main.tf line 15, in resource "aws_subnet" "subnet": 15: vpc_id = aws_vpc.vpc[each.key].id |---------------- | aws_vpc.vpc is object with 1 attribute "vpc01" | each.key is "subnet01" The given key does not identify an element in this collection value.
Terraform
1■ディレクトリ構成 2 3└─VPC 4 ├─modules 5 │ └─vpc 6 │ output.tf 7 │ vpc-main.tf 8 │ vpc-variavles.tf 9 │ 10 └─resource 11 │ backend.tf 12 │ provider.tf 13 │ resource-main.tf 14 │ resource-variables.tf 15 │ terraform.tfstate 16 │ terraform.tfstate.backup 17 └─prd 18 resource-prd-vars.tfvars
■modules/vpc/vpc-main.tf
Terraform
1# --------------------------------------------- 2# VPC 3# --------------------------------------------- 4resource "aws_vpc" "vpc" { 5 for_each = var.vpc 6 cidr_block = lookup(each.value, "cidr_block", null) 7 tags = lookup(each.value, "tags", null) 8} 9 10# --------------------------------------------- 11# Subnet 12# --------------------------------------------- 13resource "aws_subnet" "subnet" { 14 for_each = var.subnet 15 vpc_id = aws_vpc.vpc[each.key].id 16 availability_zone = lookup(each.value, "availability_zone", null) 17 cidr_block = lookup(each.value, "cidr_block", null) 18 map_public_ip_on_launch = lookup(each.value, "map_public_ip_on_launch", null) 19 tags = lookup(each.value, "tags", null) 20}
■modules/vpc/vpc-variables.tf
Terraform
1# --------------------------------------------- 2# VPC作成時に利用する変数 3# --------------------------------------------- 4 5variable "vpc" { 6 default = {} 7} 8 9# --------------------------------------------- 10# subnet作成時に利用する変数 11# --------------------------------------------- 12 13variable "subnet" { 14 default = {} 15}
■resource/resource-main.tf
Terraform
1# --------------------------------------------- 2# 各種モジュールの呼び出し 3# --------------------------------------------- 4module "create_vpc_module" { 5 source = "../modules/vpc" 6 vpc = var.vpc 7 subnet = var.subnet 8}
■resource/resource-variables.tf
Terraform
1# --------------------------------------------- 2# 変数の呼び出し 3# --------------------------------------------- 4variable "vpc" {} 5 6variable "subnet" {}
■resource/prd/resource-prd-vars.tfvars
Terraform
1# vpc tfvars 2# 実際の変数値を宣言する内容 3 4# --------------------------------------------- 5# VPC 6# --------------------------------------------- 7 8vpc = { 9 vpc01 = { 10 description = "テスト用vpc" 11 cidr_block = "10.0.0.0/16" 12 tags = { 13 "Name" : "prd-vpc", 14 "Env" : "prd" 15 } 16 } 17} 18 19subnet = { 20 subnet01 = { 21 availability_zone = "ap-northeast-1a" 22 cidr_block = "10.0.0.0/20" 23 map_public_ip_on_launch = "true" 24 tags = { 25 "Name" : "subnet", 26 "Env" : "prd" 27 } 28 } 29}
試したこと
outputを利用しmoduleに値を渡す、data形式で値を渡す、など
やってみましたが、正常に受け取れていないように見受けられます。
補足情報(FW/ツールのバージョンなど)
terraform_version": "0.14.6"
回答1件
あなたの回答
tips
プレビュー