我目前在Terraform中有2个工作区,一个用于Prod,一个用于Dev。
在产品中,我的Terraform代码创建一个Route53条目,然后将一个证书作为CNAME添加到Route53托管区域,然后将该证书附加到我的负载均衡器。
resource "aws_acm_certificate" "default" {
domain_name = "www.test.uk"
validation_method = "DNS"
}
resource "aws_route53_record" "validation" {
name = aws_acm_certificate.default.domain_validation_options[0].resource_record_name
type = aws_acm_certificate.default.domain_validation_options[0].resource_record_type
zone_id = "Z0725470IF9R8J77LPTU"
records = [
aws_acm_certificate.default.domain_validation_options[0].resource_record_value]
ttl = "60"
}
resource "aws_acm_certificate_validation" "default" {
certificate_arn = aws_acm_certificate.default.arn
validation_record_fqdns = [
aws_route53_record.validation.fqdn,
]
}
当我将工作区切换为dev并运行terraform apply时,它将尝试再次创建此Route53条目并出错。有没有办法告诉Terraform忽略这一点?
我尝试添加0计数但它给了我这个错误
错误:缺少资源实例密钥
在alb.tf第12行中,在资源“ aws_route53_record”“验证”中: 12:类型= aws_acm_certificate.default.domain_validation_options [0] .resource_record_type
因为aws_acm_certificate.default设置了“ count”,其属性 必须在特定实例上访问。
例如,要与推介资源的索引相关联,请使用: aws_acm_certificate.default [count.index]
错误:缺少资源实例密钥
在alb.tf第15行中,在资源“ aws_route53_record”“验证”中: 15: aws_acm_certificate.default.domain_validation_options [0] .resource_record_value]
因为aws_acm_certificate.default设置了“ count”,其属性 必须在特定实例上访问。
例如,要与推介资源的索引相关联,请使用: aws_acm_certificate.default [count.index]
我想出的最好的解决方案是,当我在登台工作区中运行terraform apply时,注释掉Route53的东西,这显然不是理想的解决方案。
下面未经测试,但我认为您可以使用条件(基于工作空间名称)并使用count来创建(或不创建)资源。
locals {
create_me = terraform.workspace == "dev" ? 0 : 1
}
resource "aws_acm_certificate" "default" {
count = local.create_me
domain_name = "www.test.uk"
validation_method = "DNS"
}
resource "aws_route53_record" "validation" {
count = local.create_me
name = aws_acm_certificate.default.domain_validation_options[count.index].resource_record_name
type = aws_acm_certificate.default.domain_validation_options[count.index].resource_record_type
zone_id = "Z0725470IF9R8J77LPTU"
records = [
aws_acm_certificate.default.domain_validation_options[count.index].resource_record_value]
ttl = "60"
}
resource "aws_acm_certificate_validation" "default" {
count = local.create_me
certificate_arn = aws_acm_certificate.default[count.index].arn
validation_record_fqdns = [
aws_route53_record.validation[count.index].fqdn,
]
}