首页 > 解决方案 > Terraform 说我必须创建 NS 记录,但它们似乎是默认创建的?

问题描述

资源状态的文档aws_route53_zone

公共子域区域

要在子域中使用,请注意您需要创建 NS 类型的 aws_route53_record 以及子域区域。

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

resource "aws_route53_zone" "dev" {
  name = "dev.example.com"

  tags = {
    Environment = "dev"
  }
}

resource "aws_route53_record" "dev-ns" {
  zone_id = aws_route53_zone.main.zone_id
  name    = "dev.example.com"
  type    = "NS"
  ttl     = "30"
  records = aws_route53_zone.dev.name_servers
}

但是,当我创建一个公共子域时,它已经包含一个 ns 记录 - 文档是否已过时或者我需要遵循其他步骤,例如删除 ns 记录?

标签: terraformamazon-route53

解决方案


您在这里探索的情况更像是一般的 DNS 怪癖,而不是特定于 Route53 或特定于 Terraform 的问题。

在解析域名时,DNS 客户端将依次递归解析部分名称,从根名称服务器开始知道哪些 DNS 服务器负责com,然后从那里到哪些服务器负责example.com,最后从那里到dev.example.com

为了回答这个问题,域必须包含NS记录,告诉客户端哪些名称服务器重新提出问题。

默认情况下,Route53 创建NS区域描述其自己的权威名称服务器的记录。但是,除非父区域也包含相同的记录,否则 DNS 客户端无法找到这些记录。

综上所述,您的示例 Terraform 配置在这里所做的是声明我们需要将NS记录值从parent zone 复制aws_route53_zone.dev到 parent zone aws_route53_zone.main,并且在两个地方使用相同的主机名。

当客户端查找此主机名时,它将首先询问其中一个给定的名称服务器aws_route53_zone.main.name_servers(假设您已在域注册商的设置中正确注册它们),这些服务器将使用声明的这些记录进行响应,aws_route53_record.dev-ns因此客户端将能够向权威名称服务器重新提出问题并获得最终答案。

为了使其有用,您还需要在区域中包含至少一个非NS记录dev.example.com,以便发送给aws_route53_zone.dev.name_servers将返回的最终问题返回A, AAAA, MX,CNAME等。


推荐阅读