LoginSignup
11
5

More than 5 years have passed since last update.

ELBをRoute53でAliasする時に出るAlias Hosted Zone IDとELBの関連性

Posted at

これはなに?

Route53とELBを紐付ける際にRoute53のAlias機能を使うがZone IDが違いました。
ELBのHosted zone idとRoute53のAlias Hosted Zone IDは関連性がない(特定条件において)ということをまとめておきます。

混乱のきっかけ

TerraformでRoute53の設定をしようとしていました。
以下のコードがサンプルでよくある設定かと思います。
ELBの情報を元にRoute53を設定しております。

resource "aws_route53_record" "elb" {
  zone_id = "domain zone id"
  name    = "hoge"
  type    = "A"

  alias {
    name                   = "${aws_elb.hoge.dns_name}"
    zone_id                = "${aws_elb.hoge.zone_id}"
    evaluate_target_health = "true"
  }
}

問題発生

aws_elb.hoge.zone_id の値と Route53の Alias Hosted Zone ID が違う値が設定されていました。
そのためTerraform planを実行すると毎回変更が検知されてしまいました。

AWS Supportに連絡

ELBのHosted zone idとRoute53のAlias Hosted Zone IDは関連性がないと返答をいただきました。

勘違いした際のポイント

同じケースもある

ELBのHosted zone idとRoute53のAlias Hosted Zone IDが同じのケースがあります。
詳細は後で説明します。

Terraformの仕様

zone_id - (Required) Hosted zone ID for a CloudFront distribution, S3 bucket, ELB, or Route 53 hosted zone. See resource_elb.zone_id for example.

こちらに書いてあるがAliasTargetのHostedZoneIdは作成時は必須ではない、削除する時だけ指定する必要がある
http://docs.aws.amazon.com/cli/latest/reference/route53/change-resource-record-sets.html

しかしTerraformでは作成時にも alias.zone_id の指定が必要である

何故違うのか

Alias Hosted Zone IDで表示されているIDはdualstackのIDです。
dualstackはIPv4とIPv6両方対応したDNS名です。
つまりELBの画面で表示されているHosted zoneとは別物です。
IPv4だけの時も発生する可能性はあるそうです。

まとめ

AWSのマネジメントコンソールからRoute53を変更するとdualstackが自動的に付与されます。
そのため後からTerraformで実装すると今回のようなケースになるかと思います。
仕様を把握するまでかなり混乱しました。

レコードを削除する時に、ELBの値を元に削除しようとするとトラブルが発生する可能性があるので注意が必要です。

11
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5