【问题标题】:Fetch zone_id of hosted domain on route53 using terraform使用 terraform 在 route53 上获取托管域的 zone_id
【发布时间】: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
  }
}

【问题讨论】:

    标签: amazon-web-services terraform amazon-route53 amazon-elb terraform-provider-aws


    【解决方案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 以便在配置中进一步使用

    解决方案:

    1. 创建一个空资源:
    resource "aws_route53_zone" "non-prod-zone" {}
    
    1. 进口追索
    terraform import aws_route53_zone.non-prod-zone YOUR_HOSTED_ZONE_ID
    
    1. 用名称来论证你的资源
    resource "aws_route53_zone" "non-prod-zone" {
      name = var.non_prod_hosted_zone
    }
    
    1. $(terraform refresh) 将输出你的变量??
    Outputs:
    
    hosted_zone_test_envs_id = YOUR_HOSTED_ZONE_ID
    

    【讨论】:

      猜你喜欢
      • 2016-05-13
      • 2020-08-07
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 2015-12-06
      • 2018-07-09
      • 1970-01-01
      • 2020-04-29
      相关资源
      最近更新 更多