[英]Create multiple DNS Route53 A record using Terraform
我使用 terraform 创建了一些 AWS EC2 实例,如下所示:
resource "aws_instance" "deploya"{
....
}
resource "aws_instance" "deployb"{
....
}
resource "aws_instance" "deployc"{
....
}
对于上面的aws_instances,我想创建route_53 A记录。
我在当地人中有 A 记录的名称,如下所示。 它们也在脚本中的许多其他地方使用
locals {
namea = "namea.aws.ra.com"
nameb = "nameb.aws.ra.com"
namec = "namec.aws.ra.com"
}
我知道我可以为每个 aws_instance 创建 Route53 A 记录,如下所示:
resource "aws_route53_record" "www" {
allow_overwrite = true
zone_id = data.aws_route53_zone.selected.zone_id
name = local.namea
type = "A"
ttl = "300"
records = [aws_instance.deploya.private_ip]
}
我在上面的手动方法中面临的问题是代码长度、重复和可维护性我想在这里使用一些迭代来保持代码紧凑,我无法弄清楚它是 Terraform 的新手。此外,可能还有更多aws_instances。
这里的代码如何保持紧凑?
您可以在创建资源时使用for_each :
locals {
instances = {
namea = "namea.aws.ra.com"
nameb = "nameb.aws.ra.com"
namec = "namec.aws.ra.com"
}
}
resource "aws_route53_record" "www" {
for_each = local.instances
allow_overwrite = true
zone_id = data.aws_route53_zone.selected.zone_id
name = each.value
type = "A"
ttl = "300"
records = [aws_instance.deploya.private_ip]
}
回答我自己的问题。 如果有人想为 N 个 ec2 实例创建 N 个 A 记录,请使用 map 来迭代键和值。
locals {
host_names = {
namea = "namea.aws.ra.com"
nameb = "nameb.aws.ra.com"
namec = "namec.aws.ra.com"
}
deploy_names = {
deploya = aws_instance.deploya
deployb = aws_instance.deployb
deployc = aws_instance.deployc
}
host_deploy_names = zipmap(values(local.host_names),values(local.deploy_names))
}
resource "aws_route53_record" "www" {
for_each = local.host_deploy_names
allow_overwrite = true
zone_id = data.aws_route53_zone.selected.zone_id
name = each.key
type = "A"
ttl = "300"
records = [each.value.private_ip]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.