"no matching Route53Zone found":Terraform 的 Route53 数据源无法识别托管区域名称
"no matching Route53Zone found": Terraform's Route53 data source is not recognizing the hosted zone name
假设我有一个 public 托管区域名称 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
是否有我应该报告的错误,或者我是否遗漏了什么?
aws_route53_zone
data source 将列出帐户中 Terraform 有权查看的所有托管区域。
如果您尝试引用另一个帐户中的区域,那么您可以通过在帐户中创建一个 role/user 来执行此操作,该区域有权列出所有区域 (route53:ListHostedZones*,route53:GetHostedZone*
)然后将第二个 "provider" 用于此数据源。
所以你可能有这样的东西:
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}"
...
}
使用 zone_id
而不是 name
为我做到了。
data "aws_route53_zone" "api2" {
# name = "example.com."
zone_id = "REPLACEWITHYOURID"
vpc_id = "${var.vpc_id}"
}
当它被放置在模块中时,这似乎不起作用。只需将其移动到在根级别调用模块的清单。
假设我有一个 public 托管区域名称 example.com.
。我使用以下一段 Terraform 代码根据 the docs.
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
是否有我应该报告的错误,或者我是否遗漏了什么?
aws_route53_zone
data source 将列出帐户中 Terraform 有权查看的所有托管区域。
如果您尝试引用另一个帐户中的区域,那么您可以通过在帐户中创建一个 role/user 来执行此操作,该区域有权列出所有区域 (route53:ListHostedZones*,route53:GetHostedZone*
)然后将第二个 "provider" 用于此数据源。
所以你可能有这样的东西:
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}"
...
}
使用 zone_id
而不是 name
为我做到了。
data "aws_route53_zone" "api2" {
# name = "example.com."
zone_id = "REPLACEWITHYOURID"
vpc_id = "${var.vpc_id}"
}
当它被放置在模块中时,这似乎不起作用。只需将其移动到在根级别调用模块的清单。