确定性名称服务器地址



使用AWS,如何在terraform应用/销毁执行之间获得确定性名称服务器地址?

目前,我的名字服务器是这样的:

ns-XXX.awsdns-YY.com. 
ns-XXX.awsdns-YY.org. 
ns-XXX.awsdns-YY.net. 
ns-XXX.awsdns-YY.co.uk.

每次运行apply/dedestroy时,XXXYY的值都会发生变化。

因此,如果我有一个在godaddy/namechead/other注册的域名,那么这些域名也需要更新,这需要时间来传播。

所以我想知道有没有一种方法可以影响XXX/YY的值,这样它们就可以在会话之间持续存在?

例如,我尝试了这个,尽管它按照我的意愿设置了名称服务器,但不幸的是,它无法解决。

resource "aws_route53_record" "ns" {
allow_overwrite = true
name            = "my_fixed_ns"
ttl             = 30
type            = "NS"
zone_id         = aws_route53_zone.zone.zone_id
records         = [
"ns1.amazon.com",
"ns2.amazon.org",
"ns3.amazon.net",
"ns4.amazon.co.uk"
]
}

您可以使用可重复使用的委派集,使Route53区域对每个区域使用相同的名称服务器,无论是多个并发区域还是反复重建区域:

一组四个权威名称服务器,可以与多个托管区域一起使用。默认情况下,路由53将随机选择的名称服务器分配给每个新托管区域。为了更容易地将大量域的DNS服务迁移到路由53,您可以创建一个可重用的委派集,然后将可重用的委托集与新的托管区域相关联。(您不能更改与现有托管区域关联的名称服务器。(

在Terraform中,这些是用aws_route53_delegation_set资源创建的,文档中给出的示例如下:

resource "aws_route53_delegation_set" "main" {
reference_name = "DynDNS"
}
resource "aws_route53_zone" "primary" {
name              = "hashicorp.com"
delegation_set_id = aws_route53_delegation_set.main.id
}
resource "aws_route53_zone" "secondary" {
name              = "terraform.io"
delegation_set_id = aws_route53_delegation_set.main.id
}

如果您正在销毁区域并重建它们,并且想要相同的名称服务器,那么您需要确保不要同时销毁委派集。

如果只想选择区域,可以通过运行terraform destroy -target aws_route53_zone.example来完成此操作。

或者,您可以在一个目录中创建委派集,然后在一个单独的目录中创建Route53区域(以及其他任何区域(,而不破坏委派集资源目录。所以你会有这样的东西:

.
├── delegation-set
│   └── delegation-set.tf
└── route53-zone
└── route53-zone.tf

### delegation-set.tf
resource "aws_route53_delegation_set" "example" {
reference_name = "Example"
}
output "delegation_set_id" {
value = aws_route53_delegation_set.example.id
}
### route53-zone.tf
data "aws_route53_delegation_set" "example" {
id = "INSERT_DELEGATION_SET_ID_HERE"
}
resource "aws_route53_zone" "example" {
name              = "example.com"
delegation_set_id = data.aws_route53_delegation_set.example.id
}

不幸的是,正如您在上面的示例中看到的那样,aws_route53_delegation_set数据源只接受委托集的ID,而不能为其提供调用方引用,因此您需要对通过运行terraform apply delegation-set生成和输出的引用ID进行硬编码。

或者,您可以使用terraform_remote_state数据源而不是aws_route53_delegation_set数据源:

### route53-zone.tf
data "terraform_remote_state" "delegation_set" {
backend = "remote"
config = {
organization = "example"
workspaces = {
name = "delegation-set"
}
}
}
resource "aws_route53_zone" "example" {
name              = "example.com"
delegation_set_id = data.terraform_remote_state.delegation_set.id
}

上述配置需要根据您存储状态的方式进行调整。

相关内容

  • 没有找到相关文章

最新更新