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记录?

你在这里探索的情况更像是一个一般的DNS怪现象,而不是route53特定或terrform特定的问题。

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

为了回答这个问题,父域必须包含NS记录,告诉客户端应该向哪个名称服务器重新询问这个问题。

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

说了这么多,您的示例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的最终问题将返回A,AAAA,MX,CNAME等。

相关内容