告诉Terraform忽略不同工作区中的Route53资源

问题描述 投票:0回答:1

我目前在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的东西,这显然不是理想的解决方案。

amazon-web-services terraform
1个回答
1
投票

下面未经测试,但我认为您可以使用条件(基于工作空间名称)并使用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,
  ]
}
© www.soinside.com 2019 - 2024. All rights reserved.