Terraformで複数の項目をfor文で渡す方法について記載します。
今回は下記の構成で、networkディレクトリからterraform apply
を実行する想定です。
├module
| ├── vpc.tf
| ├── version.tf
| └── variables.tf
└network
├── network.tf
├── locals.tf
└── config.tf
networkディレクトリ
network.tf
からresourceの aws_vpc
を読み込んで複数のVPCを作成します。
network.tfでは、
locals.tfで定義した設定を
for_eachで受け取り、
lookup(each.value,"
network/network.tf
module "aws_vpc_module" {
# 共通設定
instance_tenancy = "default"
enable_dns_support = true
# 各VPCごとに異なる部分をループで設定
for_each = local.vpc_setting
cidr_block = lookup(each.value,"cidr")
enable_dns_hostnames = lookup(each.value,"dns")
assign_generated_ipv6_cidr_block = lookup(each.value,"ipv6")
name = lookup(each.value,"name")
date = lookup(each.value,"date"
}
}
network/locals.tf
locals {
vpc_setting = {
vpc1 = {
"cidr" = "192.168.0.0/16"
"dns" = true
"ipv6" = false
"name" = "vpc_no_1'"
"date" = "20220501"
},
vpc2 = {
cidr" = "10.0.0.0/16"
"dns" = false
"ipv6" = true
"name" = "vpc_no_2'"
"date" = "20220502"
},
vpc3 = {
"cidr" = "192.168.0.0/16"
"dns" = true
"ipv6" = false
"name" = "vpc_no_3'"
"date" = "20220503"
},
}
}
moduleディレクトリ
network.tf
経由で渡されたlocals.tf
の設定を元にVPCを作成する処理です。
network.tf
で設定された変数はvariables.tf
経由でvpc.tf
に渡されるので、variables.tf
の設定も必要です。
module/vpc.tf
resource "aws_vpc" "vpc" {
cidr_block = var.cidr_block
instance_tenancy = var.instance_tenancy
enable_dns_support = var.enable_dns_support
enable_dns_hostnames = var.enable_dns_hostnames
assign_generated_ipv6_cidr_block = var.assign_generated_ipv6_cidr_block
tags = {
name = var.name
date = var.date
}
}
module/variables.tf
variable "cidr_block" {
type = string
}
variable "instance_tenancy" {
type = string
}
variable "enable_dns_support" {
type = bool
}
variable "enable_dns_hostnames" {
type = bool
}
variable "assign_generated_ipv6_cidr_block" {
type = bool
}
variable "name" {
type = string
}
variable "date" {
type = string
}