我试图在多个A记录资源的基础上创建多个CNAME资源,并且正在努力寻找实现这一目标的方法。
目前,我的variable.tfvars文件中有以下内容:
hostnames = [
"webserver1",
"webserver2"
]
domain = domain.com
subdomain_addresses = [
"www-1",
"www-2",
"www-3"
]我有来自我的ec2实例模块的以下输出,它基于var.hostnames的长度:(在这个实例中将有2个私有IP)
output "server_ip_addresses" {
value = aws_instance.this.*.private_ip
}目前,我的resource.tf文件中有以下内容:
resource "aws_route53_record" "instance_record" {
for_each = toset(var.hostnames)
zone_id = data.aws_route53_zone.route53_zone.zone_id
name = "${each.value}.${var.domain}"
type = "A"
ttl = "300"
records = module.ec2_instance.server_ip_addresses
}
resource "aws_route53_record" "webservice_records" {
for_each = toset(var.subdomain_addresses)
zone_id = data.aws_route53_zone.route53_zone.zone_id
name = "${each.value}.${var.domain}"
type = "CNAME"
ttl = "300"
records = [values(aws_route53_record.instance_record)[*].name]
}我需要的是让webservice_records资源为var.subdomain_addresses中的每个条目创建一个子域,但将每个子域与每个aws_route53_record.instance_record.name输出关联起来。
例如,instance_record创建了以下A条记录:
webservice_records创建了以下CNAME:
我目前正在收到以下错误:
╷
│ Error: Incorrect attribute value type
│
│ on resource.tf line 62, in resource "aws_route53_record" "webservice_records":
│ 62: records = [values(aws_route53_record.instance_record)[*].name]
│ ├────────────────
│ │ aws_route53_record.instance_record is object with 2 attributes
│
│ Inappropriate value for attribute "records": element 0: string required.
╵是否有人对如何实现这一目标有更好的了解?
发布于 2022-06-23 10:45:06
您可以使用setproduct函数来实现以下输出:
所以创建一个地图就像这样:
locals {
hostnames = [
"webserver1",
"webserver2"
]
domain = "domain.com"
subdomain_addresses = [
"www-1",
"www-2",
"www-3"
]
webserver_list = [ for web_list in setproduct(local.hostnames, [local.domain]) : join(".",web_list) ]
cname_map = {for sub_domain in local.subdomain_addresses: sub_domain => local.webserver_list}
}
resource "aws_route53_record" "cnames" {
for_each = local.cname_map
zone_id = data.aws_route53_zone.route53_zone.zone_id
name = each.key
type = "CNAME"
ttl = "300"
records = each.value
}cname_map看起来是这样的:
cname_map= {
www-1 = [
"webserver1.domain.com",
"webserver2.domain.com",
]
www-2 = [
"webserver1.domain.com",
"webserver2.domain.com",
]
www-3 = [
"webserver1.domain.com",
"webserver2.domain.com",
]
}https://stackoverflow.com/questions/72725165
复制相似问题