I have created some AWS EC2 instances using terraform as below:
resource "aws_instance" "deploya"{
....
}
resource "aws_instance" "deployb"{
....
}
resource "aws_instance" "deployc"{
....
}
For the above aws_instances, I want to create route_53 A record.
I have the names for the A record in locals as below. They are also used at many other places in the script
locals {
namea = "namea.aws.ra.com"
nameb = "nameb.aws.ra.com"
namec = "namec.aws.ra.com"
}
I know I can create Route53 A record for each aws_instance as below:
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]
}
The issue I am facing in the manual approach above is code length, repetition and maintainability I want to use some iteration here to keep the code compact, which I am not able to figure out being new to Terraform. Also, there could be many more aws_instances.
How can the code be kept compact here?
You can use for_each when creating resources:
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]
}
Answering my own question. If someone wants to achieve creating N num of A records for N num of ec2 instances please you can use map to iterate key and value.
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]
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.