繁体   English   中英

使用 Terraform 创建多个 DNS Route53 A 记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM