AWSをマルチアカウント構成で運用している場合、別アカウントのRoute53にサブドメイン管理を委任することがあります。 そのやり方について、Terraformを用いておこなう手順を整理しました。

サブドメインの委任

まず最初に「サブドメインの委任とはなにか?」という点について少し整理してみます。

委任(delegation)とは?

  • ドメイン名管理の階層化を実現する
  • 以下の2ステップを指す
    • 自分か管理するドメインにサブドメインを作成する
      • hoge.comsub.hoge.comを追加
    • そのサブドメインの管理権限を他者に委任
      • sub.hoge.comの管理を他者に委任
  • それぞれの管理範囲をゾーン(zone)と呼ぶ
    • hoge.comゾーン
    • sub.hoge.comゾーン

Tips

サブドメインが存在しても、必ずしも委任されているわけではない! co.jpjpのサブドメインだが、委任されておらずjpゾーンに属している example.co.jpjpゾーンから委任される

やること

委任元と委任先の間でネームサーバに関する設定を行う必要がある。具体的には?

上位のドメインを管理するゾーンに、委任するゾーンを管理するネームサーバを記述する

別アカウントのRoute53にサブドメイン管理を委任する

AWSのRoute53間でサブドメインの委任をおこなうためには、大きく分けて以下の2つの対応が必要になります。

  • 委任先のアカウントに委任したいサブドメインのHosted Zoneを作成する
  • 委任元のアカウントに「委任したいサブドメインのHosted Zone」のNSレコードの値を登録する

Aアカウントで管理するexample.comのサブドメインであるsub.example.comをBアカウントで管理したい場合について考えてみます。

委任先のアカウントに委任したいサブドメインのHosted Zoneを作成する

今回はsub.example.comというサブドメインをBアカウントで管理するようにしたい(=BアカウントのRoute53に委任したい)ので、Bアカウントにsub.example.comのHosted Zoneを作成します。

# Bアカウントで作成
resource "aws_route53_zone" "sub_example_zone" {
  name    = "sub.example.com"
  comment = "sub.example.com"
}

委任元のアカウントに「委任したいサブドメインのHosted Zone」のNSレコードの値を登録する

次に、委任元のアカウント(Aアカウント)に委任したいサブドメインのNSレコードを登録します。 先程作成したHosted Zoneに自動的にNSレコードが登録されているので、コンソールから値を確認し、委任元アカウント(Aアカウント)のexample.comのHosted ZoneにNSレコードを追加します。

# Aアカウントで作成
resource "aws_route53_record" "sub_example_ns" {
  zone_id = aws_route53_zone.example_zone.zone_id
  name    = "sub"
  type    = "NS"
  ttl     = 300

  # Bアカウントのsub.example.comのHosted Zoneに登録されているNSレコードの値
  records = [
         "ns-XXX.awsdns-XX.net.",
         "ns-XXX.awsdns-XX.com.",
         "ns-XXX.awsdns-XX.co.uk.",
         "ns-XXX.awsdns-XX.org.",
  ]
}

必要な作業は以上です。意外と簡単ですよね。基本的な流れはRoute53でなくても一緒なので、お名前.comからサブドメインを委任する際にも似たような手順でサブドメインの委任ができるかと思います。