terraform - 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 或特定于 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
等。
推荐阅读
- pytorch - 将pytprch转换为onnx时如何为Aten操作员torch.mv做些什么
- azure - 推荐的 Azure 服务来替换 Azure 功能
- javascript - 提交搜索键输入迭代
- python - 如何从搜索栏中获取用户输入以显示在页面中?姜戈
- ios - Firebase Cloud Messaging (FCM) 如何切换 Apple Push Notification service (APNs) 的环境?
- javascript - 如何解构或优化打字稿代码?
- database - 这个 ER 模型有什么问题?
- r - 需要将图例更改为十进制值
- ssh - 比较两种 ssh 转发的安全性
- string - 各种 Go 字符串连接方法在时间和空间复杂度方面有何比较?