こんにちは、cloudpack今岡 です。

AWS のほとんどのサービスの冗長化はほとんどDNSに依存しています。それ故に、かなり早い段階から Amazon Route53 というDNSサービスをリリースしています。その中でも特に積極的にRoute53を使う理由は、このAlias機能にあります。

Aliasとは

ほとんどの人にとっては、

apex Zone = トップレベルドメイン = 俗称 www 無しのドメイン

を使うための機能でしょう。地味にこの機能を有している他のクラウドは存在しません、今のところは。。。

やりたいことは、AWSコマンドで設定する

aws cli でRoute53 Hosted-zoneに、AレコードのAliasを変更してみます。ただのAレコード追加変更は誰かがすでに書いてくれてますが、Aliasの場合は誰も書いてないので書きます。

設定ファイルの準備

{
    "Changes": [
        {
            "Action": "UPSERT",
            "ResourceRecordSet": {
                "Name": "",
                "AliasTarget": {
                  "DNSName": "",
                  "HostedZoneId": "<はて?なんの事>",
                  "EvaluateTargetHealth": false
                },
                "Type": "A"
            }
        }
    ]
}

気になるのは HostedZoneId です。この設定を投げるのに、HostedZoneはすでに指定してるじゃないか?と思いますが、ここでのHostedZoneは、AliasTargetで指定しているDNSNameが存在するHostedZoneという意味です。つまり、CloudFrontやELB,S3の場合はAWS自身が管理しているHostedZoneということになります。

コマンド

aws route53 change-resource-record-sets --hosted-zone-id  
--change-batch file://<上記で作ったファイル>

コマンド側は特に気にすること無しです。

Alias先のHostedZoneIdの調べ方

一覧表がどっかにあるはず。だけど見当たらず。とりあえずマネジメントコンソールから設定したら下記に出てくるので、これを使うしかない?ELB とかの場合、リージョンごとに違うと思うので、その点は注意、下記はオレゴンのELBです。
Route53のAliasレコードを正しく理解する: Alias先のHostedZoneIdの調べ方

まとめ

Aliasレコードを設定するときに、そのAliasレコードが属するHostedZoneを指定する必要があります。マネジメントコンソールはそこら辺の設定をユーザーがいちいち指定しなくていいいようにスポイルしているので、aws cliとかで自動化するときハマる。AWSの仕組みを正確に的確に理解する上では、aws cli や AWS CloudFormation に日頃から触れておくことが極めて重要であると思った。

ちなみに私の好きなAWSサービス第2位はRoute53です。ちなみに1位はS3ですが、私の好きなものの傾向としては「シンプルな方法で確実にできる」です。

元記事はこちらです。
Route53のAliasレコードを正しく理解する