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

Fetch zone_id of hosted domain on route53 using terraform

您好,我正在使用 terraform 创建 route53 记录,我已经有一个托管域 (public) 让我们说 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
  }
}

在 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
  }
}

你也需要添加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
  }
}

重新要求:

  • 我已经拥有托管区(区域:AWS 全球)
  • 我想要 $(teraform output) 托管区域 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