如何使用 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
注意:对于 endpoint
和 hosted_zone_id
,请参阅 aws_db_instance
` 资源文档。
如果您对资源进行更改,Terraform 会将其检测为tainted。这意味着它会自动销毁它并通过一次应用重新创建它。
【讨论】:
嗨@Ervin Szilagyi,您缺少OP 配置中所需的参数evaluate_target_health
和provider = "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 一起使用