我们说我有一个公共托管区域名称example.com.
。我使用以下Terraform代码根据the docs的名称动态获取托管区域ID。
data "aws_route53_zone" "main" {
name = "example.com." # Notice the dot!!!
private_zone = false
}
在terraform plan
期间出现此错误:
Error refreshing state: 1 error(s) occurred:
* data.aws_route53_zone.main: no matching Route53Zone found
是否有我应该报告的错误或者我错过了什么?
答案 0 :(得分:3)
aws_route53_zone
data source将列出Terraform有权查看的帐户中的所有托管区域。
如果您尝试引用其他帐户中的区域,则可以通过在帐户中创建角色/用户来执行此操作,该区域有权列出所有区域(route53:ListHostedZones*,route53:GetHostedZone*
)然后拥有第二个“提供者”用于此数据源。
所以你可能会有这样的事情:
provider "aws" {
# ... access keys etc/assume role block
}
# DNS account
provider "aws" {
alias = "dns_zones"
# ... access keys etc/assume role block
}
data "aws_route53_zone" "main" {
provider = "aws.dns_zones"
name = "example.com." # Notice the dot!!!
private_zone = false
}
resource "aws_route53_record" "www" {
zone_id = "${data.aws_route53_zone.main.zone_id}"
name = "www.${data.aws_route53_zone.main.name}"
...
}
答案 1 :(得分:1)
使用zone_id
代替name
为我做了。
data "aws_route53_zone" "api2" {
# name = "example.com."
zone_id = "REPLACEWITHYOURID"
vpc_id = "${var.vpc_id}"
}
答案 2 :(得分:0)
当将其放置在模块内部时,这似乎不起作用。只需将其移动到清单中在根级别调用模块的清单中即可。