はじめに
本記事では、CloudFormationでS3 + CloudFront + Route53を組み合わせて構成する際に、CloudFrontのHostedZoneIdに関する設定ミスによって発生したエラーとその解決方法について解説します。
個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。
書こうと思ったきっかけ
CloudFrontをAlias設定付きでRoute53に紐付ける際、誤ってRoute53のホストゾーンIDを指定してしまい、CloudFormationのスタック作成に失敗するエラーに遭遇しました。同じミスを防ぐためにも、原因と正しい設定方法をまとめておこうと思い、この記事を書くことにしました。
問題の原因まとめ
CloudFormationでCloudFront + Route53を組み合わせる際に、AliasTarget.HostedZoneId
に 誤ってRoute53のホストゾーンID を指定していたことが原因で、エラーが発生していました。
# 誤りの例
AliasTarget:
HostedZoneId: xxx # ← Route53のHostedZoneIdを指定してしまっている
DNSName: !GetAtt CloudFrontDistribution.DomainName
発生するエラー例
Resource handler returned message: "Invalid request provided: Cannot use Route53 HostedZoneId as AliasTarget for CloudFront distribution. Use CloudFront HostedZoneId instead." (RequestToken: ...)
正しくは、CloudFront固有のHostedZoneIdを指定する必要があります。
正しい設定(CloudFront用のHostedZoneId)
CloudFrontでは、全リージョン共通で次の固定値を使用すると思っています
AliasTarget:
HostedZoneId: Z2FDTNDATAQYW2 # CloudFront用の固定値
DNSName: !GetAtt CloudFrontDistribution.DomainName
-
Z2FDTNDATAQYW2
は CloudFront 全体に共通の HostedZoneId です。 - この値は固定されており、AWSドキュメントにも明記されています。
CloudFrontのHostedZoneIdはどこで確認する?
CloudFront の HostedZoneId は、
- すべてのディストリビューションで共通の固定値であり、
- 自分で調べたり変更したりする必要はありません。
CloudFrontの固定 HostedZoneId
リソースタイプ | HostedZoneId | 備考 |
---|---|---|
CloudFront | Z2FDTNDATAQYW2 |
全リージョン共通、固定値 |
まとめ
CloudFrontのAlias設定時には、Route53のホストゾーンIDではなく、CloudFront用の固定HostedZoneId(Z2FDTNDATAQYW2
)を使用する必要があります。
この設定ミスは初心者が陥りやすいポイントのひとつですが、あらかじめ理解しておくことでスムーズに構築作業を進めることができるかと思います...!