Вы можете использовать повторно используемые наборы делегирования , чтобы зоны Route53 использовали одни и те же серверы имен для каждой зоны, будь то несколько одновременных зон или перестройка зоны снова и снова:
A набор из четырех авторитетных серверов имен, которые вы можете использовать с несколькими размещенными зонами. По умолчанию маршрут 53 назначает случайный выбор серверов имен для каждой новой размещенной зоны. Чтобы упростить миграцию службы DNS на Route 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
принимает только идентификатор набора делегирования, а не чем дать ему ссылку на вызывающего абонента, поэтому вам нужно жестко закодировать идентификатор ссылки, сгенерированный и выведенный с помощью команды terraform apply delegation-set
.
В качестве альтернативы вы можете использовать источник данных 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
}
Приведенную выше конфигурацию необходимо адаптировать, как бы вы ни были сохраняя ваше состояние.