amazon-web-services - 告诉 Terraform 忽略不同工作区中的 Route53 资源
问题描述
我目前在 Terraform 中有 2 个工作区,一个用于 Prod,一个用于 Dev。
在 prod 中,我的 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:type = aws_acm_certificate.default.domain_validation_options[0].resource_record_type因为 aws_acm_certificate.default 设置了“计数”,所以必须在特定实例上访问其属性。
例如,要与引用资源的索引相关联,请使用: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 设置了“计数”,所以必须在特定实例上访问其属性。
例如,要与引用资源的索引相关联,请使用: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,
]
}
推荐阅读
- javascript - 从 Chrome 书签更改文本输入
- ms-access - 将受密码保护的 excel 文件导入 MS Access
- reactjs - 如何在 React 中更新地理位置状态?
- mongodb - 引用另一个集合可能会导致大量查询
- apache-spark - 如何将所有行作为 JSON 数组的流式 DataFrame 写入 Kafka?
- jenkins - 当作业推送到 github 并触发 webhook 时,防止无限循环构建
- reactjs - 在 Fetch 中反应重定向
- deep-learning - 如何使用动态输入创建用于图像分类的 CNN
- python - 对象之间的加减值
- c++ - 如何使用boost计算文件的md5?