[英]Use indexing in for_each and for in terraform
我正在尝试使用 for_each 和 for 创建多个 VPC 和子网。 下面是代码和错误。 我在使用 for_each 时无法确定索引。 使用计数更容易,但要求是使用 for_each。
main.tf
resource "aws_vpc" "VPC" {
for_each = { for vpc in var.vpc : vpc.name => vpc}
cidr_block = each.value.cidr
enable_dns_hostnames = true
enable_dns_support = true
}
####### Additional CIDR for VPC ########
resource "aws_vpc_ipv4_cidr_block_association" "VPCExtraCidrBlock" {
for_each = local.extra_cidr_list
vpc_id = aws_vpc.VPC[each.value.vpc].id
cidr_block = each.value.extra_cidr
}
resource "aws_internet_gateway" "igw" {
for_each = { for vpc in var.vpc : vpc.name => vpc if vpc.igw == true}
vpc_id = aws_vpc.VPC[each.value.name].id
}
########### Private subnets #############
resource "aws_subnet" "VPCPrivateSubnetA" {
for_each = local.privateA_cidr_list
vpc_id = aws_vpc.VPC[each.value.vpc].id
cidr_block = each.value.privateA
availability_zone = element(var.AvailabilityZonesForVPC,0)
}
resource "aws_subnet" "VPCPublicSubnetA" {
for_each = local.publicA_cidr_list
vpc_id = aws_vpc.VPC[each.value.vpc].id
cidr_block = each.value.publicA
availability_zone = element(var.AvailabilityZonesForVPC,0)
}
本地文件
我正在尝试格式化 local.tf 中的变量并对其使用 for_each 。
locals {
extra_cidr_list = flatten([
for idx_vpc, vpc in var.vpc:
[ for idx, cidr in vpc.extra_cidr :
{ vpc = vpc.name,
extra_cidr = cidr[idx]
} if length(vpc.extra_cidr) > 0 ] ])
publicA_cidr_list = flatten([ for idx_vpc, vpc in var.vpc : [ for idx, cidr in vpc[idx_vpc].publicA : { vpc = vpc.name, publicA = cidr[idx] } if length(vpc[idx_vpc].publicA) > 0 ] ])
privateA_cidr_list = flatten([ for idx_vpc, vpc in var.vpc : [ for idx, cidr in vpc[idx_vpc].privateA : { vpc = vpc.name, privateA = cidr[idx] } if length(vpc[idx_vpc].privateA) > 0 ] ])
}
模块.tf
module "VPC" {
source = "./modules/VPC"
vpc = var.vpc
}
tfvars 文件
vpc = [
{
name = "VPC1"
cidr = "10.150.0.0/20"
publicA = ["10.150.0.0/23"]
privateA = ["10.150.9.0/26","10.150.7.0/24"]
igw = true
extra_cidr = ["10.151.0.0/20"]
},
{
name = "VPC2"
cidr = "192.168.0.0/22"
publicA = ["192.168.0.0/25","192.168.0.128/25","192.168.3.0/25"] #list of IPs
privateA = []
igw = false
extra_cidr = []
}
]
请帮忙。
你的当地人不正确。 他们应该是:
locals {
extra_cidr_list = flatten([
for idx_vpc, vpc in var.vpc:
[
for idx, cidr in vpc.extra_cidr :
{
vpc = vpc.name,
extra_cidr = cidr
} if length(vpc.extra_cidr) > 0 ] ])
publicA_cidr_list = flatten(
[ for idx_vpc, vpc in var.vpc :
[ for idx, cidr in vpc.publicA :
{
vpc = vpc.name,
publicA = cidr
} if length(vpc.publicA) > 0 ] ])
privateA_cidr_list = flatten([
for idx_vpc, vpc in var.vpc :
[
for idx, cidr in vpc.privateA :
{
vpc = vpc.name,
privateA = cidr
} if length(vpc.privateA) > 0 ] ])
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.