Я относительно новичок в Terraform, и я хочу упростить некоторые частные зоны r53, которые мне нужно создать, используя for_each.
У меня есть следующий локальный объект, который я хочу использовать для создания частных зон и связанных записей A в этих зонах:
locals {
private_zones = [
{
name = "foo.com"
txt = [
"This is the txt record for foo.com"]
ttl = 300
records = {
"host1" = "192.168.0.1",
"host2" = "192.168.0.2"
}
},
{
name = "bar.com"
txt = [
"This is the txt record for bar.com"]
ttl = 300
records = {
"host1" = "192.168.0.3",
"host2" = "192.168.0.4"
}
}
]
}
Я нашел некоторый код, который позволит мне перебирать локальный код для создания зон.
resource "aws_route53_zone" "zone" {
for_each = { for name in local.private_zones : name.name => name }
name = each.value.name
vpc {
vpc_id = <vpc_id>
}
}
но я понятия не имею, как я могу повторять и создавать записи A в соответствующей зоне, используя список записей в каждом локальном.
Вы бы использовали aws_route53_record и сплющенныйprivate_zones
:
locals {
private_zones_flat = merge([
for zone in local.private_zones: {
for host, ip in zone.records:
"${zone.name}-${host}" => {
zone_name = zone.name
host = host
ip = ip
}
}
]...)
}
resource "aws_route53_record" "host" {
for_each = local.private_zones_flat
zone_id = aws_route53_zone.zone[each.value.zone_name].zone_id
name = each.value.host
type = "A"
ttl = "300"
records = [each.value.ip]
}
Очень признателен, как только я понял, что ]...) на самом деле было частью слияния;)