TerraformでRoute 53のゾーンに付属するNS/SOAレコードをインポートする

TerraformでRoute 53の設定をインポートするときに、aws_route53_recordのドキュメントを読んでいた。このドキュメントにはRoute 53のゾーンを作るときに自動で作られるNSレコードとSOAレコードの管理方法について記述がある。しかし、コード例にはNSレコードについての記載しかない。

https://registry.terraform.io/providers/hashicorp/aws/4.53.0/docs/resources/route53_record#ns-and-soa-record-management

また、

Enabling the allow_overwrite argument will allow managing these records in a single Terraform run without the requirement for terraform import

とあるが、ゾーン作成時に一緒に作成されたNS/SOAレコードをインポートしたいだけのときは合わないユースケースに見えた(自分が把握できていないユースケースがあるのかもしれない)。

これらのNS/SOAレコードをTerraformで管理するには、あらかじめaws_route53_record.example_nsaws_route53_record.example_soa(名前は例)をインポートする。

$ terraform import aws_route53_record.example_ns XXXXXXXXXXXXX_example.com_NS
$ terraform import aws_route53_record.example_soa XXXXXXXXXXXXX_example.com_SOA

そのうえで、リソースを次のように定義して、terraform planで差分が出ないようにする。

resource "aws_route53_zone" "example" {
  name = "example.com"
}

resource "aws_route53_record" "example_ns" {
  zone_id = aws_route53_zone.example.id
  name    = "example.com"
  records = [
    "${aws_route53_zone.example.name_servers[0]}.",
    "${aws_route53_zone.example.name_servers[1]}.",
    "${aws_route53_zone.example.name_servers[2]}.",
    "${aws_route53_zone.example.name_servers[3]}.",
  ]
  ttl  = 86400
  type = "NS"
}

resource "aws_route53_record" "example_soa" {
  zone_id = aws_route53_zone.example.id
  name    = "example.com"
  records = [
    "${aws_route53_zone.example.primary_name_server}. awsdns-hostmaster.amazom.com 1 7200 900 1209600 86400"
  ]
  ttl  = 900
  type = "SOA"
}