"找不到匹配的Route53Zone":Terraform的Route53数据源无法识别托管区域名称

时间:2017-01-13 10:06:26

标签: amazon-route53 terraform

我们说我有一个公共托管区域名称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

是否有我应该报告的错误或者我错过了什么?

3 个答案:

答案 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)

当将其放置在模块内部时,这似乎不起作用。只需将其移动到清单中在根级别调用模块的清单中即可。