首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Terraform:在创建另一个资源之前删除资源

Terraform:在创建另一个资源之前删除资源
EN

Stack Overflow用户
提问于 2022-07-28 09:09:01
回答 2查看 224关注 0票数 0

概述

我想要创建一个Route53 DNS记录。取决于变量,它要么是CNAME记录,要么是别名记录。

在第一次运行时,这是可行的,因为这两个记录都不存在。

但是,当更新变量var.route_53_redirection_type以更改记录类型时,terraform apply失败,因为它试图在删除旧记录之前创建新记录。

代码语言:javascript
运行
复制
Error: [ERR]: Error building changeset: InvalidChangeBatch: [RRSet of type A with DNS name redirect is not permitted because a conflicting RRSet of type CNAME with the same DNS name already exists in zone.]

terraform apply再次运行时,它会工作,因为该记录在上一次运行时已被删除。

以下是代码:

代码语言:javascript
运行
复制
resource "aws_route53_record" "alias" {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
  count = var.route_53_redirection_type == "ALIAS" ? 1 : 0
  zone_id = data.aws_route53_zone.public.zone_id
  name    = "redirect"
  type    = "A"
  alias {
    name                   = module.alb.alb_dns_name
    zone_id                = module.alb.alb_zone_id
    evaluate_target_health = true
  }
  
}

resource "aws_route53_record" "cname" {
  count = var.route_53_redirection_type == "CNAME" ? 1 : 0
  zone_id = data.aws_route53_zone.public.zone_id
  name    = "redirect"
  type    = "CNAME"
  ttl     = "5"
  records        = ["www.google.com"]
}

问题

  • 是否有可能确保删除发生在创建之前?
  • 是否有更好的方法完全消除依赖?

注意到,我看过生命周期在……上面,但这两种方法似乎都不适用于这种情况。

提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2022-07-28 10:21:21

更新记录类型的具体原因是什么?

但是,如果这是删除任何特定资源的要求,我们总是可以使用破坏命令来销毁一套完整的云基础设施或目标资源。

代码语言:javascript
运行
复制
 terraform destroy --target aws_route53_record.cname
票数 0
EN

Stack Overflow用户

发布于 2022-07-28 12:48:59

我认为很难根据需求实现你想要的东西。我认为更好的方法是使用dynamic块1和for_each 2。这样,代码就会看起来像:

代码语言:javascript
运行
复制
resource "aws_route53_record" "record" {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
  zone_id = data.aws_route53_zone.public.zone_id
  name    = "redirect"
  type    = var.route_53_redirection_type == "ALIAS" ? "A" : "CNAME"
  ttl     = var.route_53_redirection_type == "ALIAS" ? null : 5

  dynamic "alias" {
    for_each = var.route_53_redirection_type == "ALIAS" ? [1] : []
    content {
      name                   = module.alb.alb_dns_name
      zone_id                = module.alb.alb_zone_id
      evaluate_target_health = true
    }
  }

}

1

2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73150142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档