Terraform + Route53-管理现有记录

时间:2019-06-10 15:52:16

标签: amazon-web-services terraform amazon-route53

我的生产环境配置为具有指向负载均衡器的域名。这已经可以使用Route53进行配置了。

我正在使用Terraform部署基础结构,包括Route53记录。

Route53记录是手动设置的。

我希望Terraform在后续部署中管理Route53记录。但是,当我运行更新以更新基础结构并包括Route53记录时,出现此错误:

Error: Error applying plan:

1 error(s) occurred:

 * module.asg.aws_route53_record.www: 1 error(s) occurred:

 * aws_route53_record.www: [ERR]: Error building changeset: 
    InvalidChangeBatch: [Tried to create a resource record set
    [name='foo.com.', type='A'] but it already exists]

首先,此错误是有道理的,因为该资源已存在。但是,鉴于此,如何在不造成停机的情况下解决此问题?

我尝试手动编辑状态文件以包括route53记录,但是失败并出现相同的错误...

如有必要,我很乐意提供更多信息。欢迎您提出任何建议。谢谢。

3 个答案:

答案 0 :(得分:1)

您必须使用terraform import命令将记录导入到Terraform状态。 您不应该手动编辑状态!

有关如何导入记录的更多信息,请参见资源Docs

答案 1 :(得分:1)

您可以使用terraform导入将现有Route53资源导入到您当前的terraform基础结构中。步骤如下:

  1. 通过Terraform初始化使用所需的工作空间来初始化terraform。

  2. 定义aws_route53_record与您现有的资源完全相同

    资源“ aws_route53_record”“ www” { //您的代码在这里 }

  3. 导入所需资源

地形导入aws_route53_record。wwwZONEID_RECORDNAME_TYPE_SET-IDENTIFIER

例如:

terrain import aws_route53_record.www Z4KAPRWWNC7JR_dev.example.com_CNAME

成功导入后,这将保存现有资源的状态。

  1. 执行Terraform计划以检查资源
  2. 您现在可以更新到现有资源

答案 2 :(得分:0)

将其保留在此处以吸引新访客。

在更高版本的aws provider(〜3.10)中,它们提供了一个参数allow_overwrite,默认为false。 无需编辑状态文件(不建议)或进行Terraform导入。

allow_overwrite-(可选)允许在Terraform中创建此记录以覆盖现有记录(如果有)。这不会影响在Terraform中更新记录的能力,也不会阻止Terraform中的其他资源或Terraform之外的手动Route 53更改覆盖该记录。默认为false。不建议在大多数环境中使用此配置。

来自:https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/route53_record#allow_overwrite