🔥

【Terraform】Route53を使用してALBにアクセスする

2025/01/12に公開

Terraformを使ってRoute53 にホストゾーンとレコードを作成してみます。
今回はALB をレコードに設定してアクセスできるようにします。

前提

  • ドメインを取得済み
    • お名前.com で取得しました
  • ALB + EC2 を Terraform で構築済み(=本記事では Route53 とお名前.com が対象
    • ALB + EC2 の構築も知りたい方は下記の記事をご参考ください

https://zenn.dev/kuuki/articles/terraform-aws-alb-ec2-nginx/

ゴール

  • dig コマンドで
    1. NS レコードを引くと、AWS の NS が返ってくる
    2. A レコードを引くと、ALB の IP アドレスが返ってくる
  • ドメインにブラウザからアクセスするとALB のターゲットグループに設定された EC2 にインストールされた Nginx の画面が表示される

Terraform

ホストゾーンの作成

aws_route53_zoneを使用してホストゾーンを作成します。

設定するのはホストゾーン名のみです

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

Alias レコードを作成

aws_route53_recordAlias レコードを作成し、ALB にアクセスできるようにします

各パラメータについて表にまとめました

プロパティ 説明
zone_id レコードを作成するホストゾーンのID
name レコード名。今回は"example.com"を指定。 サブドメインなどでもいい。
type レコードタイプ。Aliasレコードを使用したいので"A"を指定。
alias Aliasレコードを使用したいときにこのブロックが必要
name レコードに設定したいリソースのDNS名。
今回はaws_lb.alb.dns_nameを参照している
zone_id レコードに設定したいリソースのホストゾーンID。
今回はaws_lb.alb.zone_idを参照している
evaluate_target_health 指定したリソースが応答できるかどうかをRoute53に判断させるかどうか。
ALBの場合はターゲットグループに1つ以上の正常なターゲットが含まれていればDNSクエリに応答できると判断される。
参考はこちら
resource "aws_route53_record" "alb_alias" {
  zone_id = aws_route53_zone.hostzone.zone_id
  name    = "example.com"
  type    = "A"

  alias {
    name                   = aws_lb.alb.dns_name
    zone_id                = aws_lb.alb.zone_id
    evaluate_target_health = true
  }
}

resource "aws_lb" "alb" {
  name               = "alb"

  ...

}

完成したコード

コード
resource "aws_route53_zone" "hostzone" {
  name = "example.com"
}

resource "aws_route53_record" "alb_alias" {
  zone_id = aws_route53_zone.hostzone.zone_id
  name    = "example.com"
  type    = "A"

  alias {
    name                   = aws_lb.alb.dns_name
    zone_id                = aws_lb.alb.zone_id
    evaluate_target_health = true
  }
}

resource "aws_lb" "alb" {
  name               = "alb"

  ...

}

terraform plan & apply

$ terraform init
$ terraform validate
$ terraform plan
$ terraform apply -auto-approve

5 分ほど時間かかりました

NS レコードの変更(お名前ドットコム版)

ホストゾーンを作成しただけではネームサーバーが AWS に向いていません

ドメインを取得したレジストラにて NS レコードを変更して AWS に向くようにします

私はお名前.comを使用しているので、それを例にして設定していきます

(AWS)ホストゾーンに作成された NS レコードを確認する

Route53 で作成したホストゾーンを見てみましょう!

ホストゾーンと同じ名前のNS レコードと SOA レコードが1つずつ作成されます。

このうち、NS レコードに設定されている4つの値が必要なので、メモしておきます。

(お名前.com)NS レコードを変更する

お名前.com の管理画面にログインして、設定したいドメインをクリックします

ネームサーバーの変更」をクリック

ほかのネームサーバーを利用」を選択し

対象のドメイン名横のチェックボックスにチェックを入れて、

Route53 に表示されていたNS レコードの4つの値を入力します

末尾の . (ドット) を含めると変更できないので、それを削除した値を入力します

入力した情報を確認し、あっていれば変更します

これで変更できました!

設定が反映されるまでに最大 72 時間かかるようなので、ご注意ください

動作確認

dig

dig で NS レコードをひいて AWS のネームサーバが表示されれば OK!

$ dig NS example.com +short
ns-×××.awsdns-×××.co.uk.
ns-×××.awsdns-×××.net.
ns-×××.awsdns-×××.com.
ns-×××.awsdns-×××.org.
↑のような形式で表示される

また、A レコードを引くと Alias レコードとして登録した ALB の IP が返ってきます

// 下記2つのコマンドの実行結果が同じになる
$ dig A example.com +short
$ dig A ××××××××××××××××××.ap-northeast-1.elb.amazonaws.com +short

ブラウザ

WEB ブラウザで example.com へアクセスし、EC2 の Nginx の画面が表示されれば OK!

※ALB にアクセスしたときと同じ画面が表示されれば OK です。

参考

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/route53_zone

https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-values-geo-alias.html

Discussion