如何使用 Terraform 将现有的“aws_route53_record”CNAME 更新/修改为 ALIAS

Posted

技术标签:

【中文标题】如何使用 Terraform 将现有的“aws_route53_record”CNAME 更新/修改为 ALIAS【英文标题】:How to update/modify existing 'aws_route53_record' CNAME to ALIAS with Terraform 【发布时间】:2022-01-19 22:53:54 【问题描述】:

我想将现有的“aws_route53_record”从 CNAME 更新为 Alias。什么是正确的过程?甚至可以一次更新,或者需要分两步完成,比如创建一个新的 ALIAS 记录,然后删除 CNAME 记录? 例如,假设这是现有的资源代码。

resource "aws_route53_record" "record" 
  count.  = var.rds_enabled
  zone_id = data.aws_route53_zone.zone.zone_id
  name    = var.record_name.data.aws_route53_zone.zone.name
  type    = "CNAME"
  ttl     = "300"
  records = module.rds_aurora_postgress.rdscluster_endpoint
  provider = "aws.dns"

【问题讨论】:

【参考方案1】:

您不必创建新的别名记录。您想要做的是将现有的aws_route53_record 资源更改为别名,所以:

resource "aws_route53_record" "record" 
  count  = var.rds_enabled
  zone_id = data.aws_route53_zone.zone.zone_id
  name    = var.record_name.data.aws_route53_zone.zone.name
  type    = "A"

  alias 
    name      = module.rds_aurora_postgress.endpoint
    zone_id   = module.rds_aurora_postgress.hosted_zone_id
    evaluate_target_health = true
  

注意:对于 endpointhosted_zone_id,请参阅 aws_db_instance` 资源文档。

如果您对资源进行更改,Terraform 会将其检测为tainted。这意味着它会自动销毁它并通过一次应用重新创建它。

【讨论】:

嗨@Ervin Szilagyi,您缺少OP 配置中所需的参数evaluate_target_healthprovider = "aws.dns" @JuanFontes 你是对的,更新了答案。我的印象是它是可选的,但事实并非如此。 没问题,@Ervin Szilagyi。很好的解释! 这是我所拥有的,但它不起作用,我收到此错误:错误:[ERR]:错误构建更改集:InvalidChangeBatch:[A 类型的 RRset,DNS 名称为 bla.bla。 bla.net 它不是许可者,因为区域中已经存在具有相同 DNS 名称的 CNAME 类型的冲突 RRSet ] @Ervin Szilagyi,所以我的问题与这个相同,但 CNAME 为 A :github.com/hashicorp/terraform/issues/9732

以上是关于如何使用 Terraform 将现有的“aws_route53_record”CNAME 更新/修改为 ALIAS的主要内容,如果未能解决你的问题,请参考以下文章

将 Terraform 模板转换为 Cloudformation 模板

如何将现有的 dynamo db 与 AWS Amplify 和 graphql 一起使用

如何手动将现有的配置文件和证书添加到 fastlane 匹配?

如何将现有的回调 API 转换为 Promise?

如何将现有的回调 API 转换为 Promise?

如何将现有的回调 API 转换为 Promise?