Terraform 说我必须创建 NS 记录,但它们似乎是默认创建的?
Terraform says I have to create NS records but they appear to be created by default?
aws_route53_zone
资源状态的 docs:
Public Subdomain Zone
For use in subdomains, note that you need to create a
aws_route53_record of type NS as well as the subdomain zone.
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
}
然而,当我创建一个 public 子域时,它已经包含一个 ns 记录 - 文档是否已过时或是否需要执行其他步骤,例如删除 ns 记录?
您在此处探索的情况更像是一般的 DNS 怪癖,而不是特定于 Route53 或特定于 Terraform 的问题。
解析域名时,DNS 客户端会依次递归解析部分名称,从根域名服务器开始,了解哪些 DNS 服务器负责 com
,然后从那里到哪些服务器是负责 example.com
,然后最终从那里到 dev.example.com
。
为了回答这个问题,parent 域必须包含 NS
记录,告诉客户端要向哪些域名服务器重新提问。
Route53 默认创建 NS
记录,区域通过这些记录描述 它自己的 权威名称服务器。但是,DNS 客户端无法找到这些记录,除非 parent 区域也包含相同的记录。
综上所述,您的示例 Terraform 配置在这里所做的是声明我们需要将 NS
记录值从 aws_route53_zone.dev
复制到父区域 aws_route53_zone.main
,在两个地方使用相同的主机名。
当客户端查找此主机名时,它将首先询问aws_route53_zone.main.name_servers
中给出的其中一个名称服务器(假设您已在您的域中正确注册它们注册商的设置),这些服务器将使用 aws_route53_record.dev-ns
声明的这些记录进行响应,因此客户端将能够向权威名称服务器重新提出问题并获得最终答案。
为了使其有用,您还需要在 dev.example.com
区域中包含至少一个非 NS
记录,以便将最后一个问题发送到 aws_route53_zone.dev.name_servers
将 return A
、AAAA
、MX
、CNAME
等
aws_route53_zone
资源状态的 docs:
Public Subdomain Zone
For use in subdomains, note that you need to create a aws_route53_record of type NS as well as the subdomain zone.
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
}
然而,当我创建一个 public 子域时,它已经包含一个 ns 记录 - 文档是否已过时或是否需要执行其他步骤,例如删除 ns 记录?
您在此处探索的情况更像是一般的 DNS 怪癖,而不是特定于 Route53 或特定于 Terraform 的问题。
解析域名时,DNS 客户端会依次递归解析部分名称,从根域名服务器开始,了解哪些 DNS 服务器负责 com
,然后从那里到哪些服务器是负责 example.com
,然后最终从那里到 dev.example.com
。
为了回答这个问题,parent 域必须包含 NS
记录,告诉客户端要向哪些域名服务器重新提问。
Route53 默认创建 NS
记录,区域通过这些记录描述 它自己的 权威名称服务器。但是,DNS 客户端无法找到这些记录,除非 parent 区域也包含相同的记录。
综上所述,您的示例 Terraform 配置在这里所做的是声明我们需要将 NS
记录值从 aws_route53_zone.dev
复制到父区域 aws_route53_zone.main
,在两个地方使用相同的主机名。
当客户端查找此主机名时,它将首先询问aws_route53_zone.main.name_servers
中给出的其中一个名称服务器(假设您已在您的域中正确注册它们注册商的设置),这些服务器将使用 aws_route53_record.dev-ns
声明的这些记录进行响应,因此客户端将能够向权威名称服务器重新提出问题并获得最终答案。
为了使其有用,您还需要在 dev.example.com
区域中包含至少一个非 NS
记录,以便将最后一个问题发送到 aws_route53_zone.dev.name_servers
将 return A
、AAAA
、MX
、CNAME
等