长时间潜伏者第一次发帖。
我是使用terraform的新手,并尝试浏览文档,但它的文档记录不够清晰,无法解决我的问题。
场景
我正在尝试模拟最终用户意外从 route53 中删除公共托管区域,然后使用 terraform 恢复公共区域及其记录集的事件。
问题
我遇到的问题是,当公共托管区域被删除时,运行地形计划会吓坏并说 route53 记录/区域不存在,但实际上并没有提示我创建该新区域,即使它目前正在管理地形。
我的解决方法是在导入的对象上运行 terraform 状态 rm,编辑我的 example.tf 文件以删除任何 route53 资源记录集,仅保留aws_route53_zone记录不变并重新运行 terraform 计划,这样做 terraform 会识别这是一个新的公共托管区域,并将创建新的公共区域。问题是,它是分两步完成的,我想一步实现这一切,理想情况下运行一次地形计划来创建托管区域,然后在新区域中创建记录集。
当前工作解决方案 - 用于 example.tf
此方法要求管理员运行两次地形规划,并涉及编辑 example.tf 文件。首先删除 terraform 管理的现有记录集,以便运行 terraform 计划以创建意外删除的公有托管区域。
resource "aws_route53_zone" "example" {
name = "terraform-test.example.com"
}
理想的解决方案 - example.tf
这是我想到的解决方案,但是当我运行地形计划时,它会抱怨找不到或未声明的资源。
# This should create the public hosted zone if it's not existing.
resource "aws_route53_zone" "example" {
name = "terraform-test.example.com"
private_zone = false
}
# Then it should create the following records under the hosted zone.
resource "aws_route53_record" "www-terraform-A" {
name = "${data.aws_route53_zone.example.name}"
zone_id = "${data.aws_route53_zone.example.zone_id}"
type = "A"
ttl = "300"
records = ["X.X.X.X"]
}
我希望在运行地形计划后,terraform 会识别出该区域不存在,它应该提示我创建它然后记录记录集,但事实并非如此,这是我收到的错误消息
Error: Reference to undeclared resource
on terraform-test.servallapps.com.tf line 6, in resource "aws_route53_record" "www-terraform-A":
6: name = "${data.aws_route53_zone.example.name}"
A data resource "aws_route53_zone" "example" has not been declared in the
root module.
此错误是因为它不是数据源,而是资源,因此不需要data
前缀。
将data.aws_route53_zone.example.name
更改为aws_route53_zone.example.name
应该有效