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