使用 terraform 在 route53 上获取托管域的 zone_id

Posted

技术标签:

【中文标题】使用 terraform 在 route53 上获取托管域的 zone_id【英文标题】:Fetch zone_id of hosted domain on route53 using terraform 【发布时间】:2020-12-03 18:15:30 【问题描述】:

您好,我正在使用 terraform 创建 route53 记录,我已经有一个托管域(公共)让我们说 example.com 如何获取其 zone_id 并附加到记录。如何获取现有 route53 托管区域的 zone_id。我已经编写了一个文件,但它的作用是创建另一个托管区域example.com,而不是获取现有的example.com

resource "aws_route53_zone" "main" 
  name = "example.com"


resource "aws_route53_record" "www" 
  zone_id = data.aws_route53_zone.selected.zone_id 
  name    = "dev.$data.aws_route53_zone.selected.name"
  type    = "A"
  alias 
    name                   = var.alb_dns
    zone_id                = var.zone_id
    evaluate_target_health = false
  

【问题讨论】:

【参考方案1】:

你也需要加private_zone = false

data "aws_route53_zone" "selected" 
  name         = "test.com."
private_zone = false


resource "aws_route53_record" "www" 
  zone_id = data.aws_route53_zone.selected.zone_id 
  name    = "dev.$data.aws_route53_zone.selected.name"
  type    = "A"
  alias 
    name                   = var.alb_dns
    zone_id                = var.zone_id
    evaluate_target_health = false
  

【讨论】:

``` data.aws_route53_zone.non-prod-zone: 刷新状态... ------------------------ ------------------------------------------------ 执行计划已生成,如下所示。资源操作用以下符号表示: Terraform 将执行以下操作: 计划:0 表示添加,0 表示更改,0 表示销毁。 ``` 表示它无法获取现有的托管区域 我在文档中不再看到 private_zone false 属性。这是没有记录的吗? registry.terraform.io/providers/hashicorp/aws/latest/docs/…我正在使用cdktf生成tf代码,所以我不能使用未指定的vars。【参考方案2】:

在 terraform 中,数据源可用于在运行时检索信息。 AWS 提供商包括 route53 区域的数据源。以下是它的用法示例:

data "aws_route53_zone" "selected" 
  name         = "test.com."


resource "aws_route53_record" "www" 
  zone_id = data.aws_route53_zone.selected.zone_id 
  name    = "dev.$data.aws_route53_zone.selected.name"
  type    = "A"
  alias 
    name                   = var.alb_dns
    zone_id                = var.zone_id
    evaluate_target_health = false
  

【讨论】:

它给出了一个错误Error: multiple Route53Zone found please use vpc_id option to filter @aws-noob 如果您有多个名为“test.com”的域,那么您将需要提供额外的过滤器以便只返回一个域。有关数据源接受的所有参数,请参阅文档:registry.terraform.io/providers/hashicorp/aws/latest/docs/…【参考方案3】:

重新要求:

我已经有托管区域(区域:AWS 全球) 我想 $(teraform output) Hosted Zone Id 以便在配置中进一步使用

解决方案:

    创建一个空资源:
resource "aws_route53_zone" "non-prod-zone" 
    进口追索
terraform import aws_route53_zone.non-prod-zone YOUR_HOSTED_ZONE_ID
    用名称来论证你的资源
resource "aws_route53_zone" "non-prod-zone" 
  name = var.non_prod_hosted_zone

    $(terraform refresh) 将输出你的变量??
Outputs:

hosted_zone_test_envs_id = YOUR_HOSTED_ZONE_ID

【讨论】:

以上是关于使用 terraform 在 route53 上获取托管域的 zone_id的主要内容,如果未能解决你的问题,请参考以下文章

为啥我使用 terraform 资源 aws_route53_record 创建的 Route53 记录无法公开解析?

Terraform - 找不到匹配的 Route53Zone

在 aws_route53_record terraform 资源中使用“计数”

terraform - 如何为 DNS 创建 Route53?

使用 Terraform 创建多个 DNS Route53 A 记录

Terraform 与 A​​PI-Gateway、Route53 和 SSL 认证相互依赖问题