やりたい事
AWS(Amazon Web Service)のRoute53で管理しているドメイン(example.com)について、Zone Apex(example.com)へのHTTP/HTTPSアクセスをサブドメイン(www.example.com)にリダイレクトする。
Route 53ではZone Apexに対して通常のCNAMEやAレコードを設定することはできない。その代わりにS3やCloud Frontへのエイリアスと呼ばれるレコードを作成することができるので、それを利用する。
HTTPアクセスのリダイレクト
S3を使用してZone ApexのURLのアクセスをホスティングするWebサイトをセットアップする。以下の記事が参考になる。
docs.aws.amazon.com
*S3でホスティングするWebサイトではHTTPSでのアクセスをリダイレクトすることはできない。HTTPSでのアクセスについてはCloud Frontを使用する。
手順
- S3に独自ドメイン名(example.com)でバケットを作成する
- プロパティは特に変更する必要はない。
パブリックアクセスをすべてブロック
のチェックを外す。
- 作成したバケットの
アクセス権限
からバケットポリシー
を選択し、パブリックアクセスを許可する以下のポリシーをコピー&ペーストする。
{ "Version":"2012-10-17", "Statement":[ { "Sid":"PublicReadGetObject", "Effect":"Allow", "Principal":"*", "Action":[ "s3:GetObject" ], "Resource":[ "arn:aws:s3:::example.com/*" ] } ] }
*別のドメインで設定する場合は独自ドメイン部分(example.com)は変更すること。 - 'プロパティ'から
Static website hosting
を有効にするリクエストをリダイレクトする
にチェックを入れ、リダイレクト先のサブドメイン(www.example.com)と転送先のプロトコルを入力する。
*この段階でStatic website hosting
のダイアログ内に表示されているエンドポイント
にアクセスすると、入力したプロトコルとドメインのURLにリダイレクトされる。 そのため、Route53にZone ApexのレコードとしてこのS3へのAレコードエイリアスを作成すると、HTTPでのアクセスについては指定したURLにリダイレクトすることができるようになる。
HTTPSアクセスのリダイレクト
基本的に以下の手順に従う。異なるのはOrigin Domain Name
にS3のStatic website hosting
で作成したエンドポイント
のドメインを指定することのみ。
aws.amazon.com
手順
- Certificate Managerを開き、"証明書のリクエスト"を行う。
- Cloud Frontを開き、"Create Distribution"を選択する。
- "Web"の項目の"Get Started"を選択する。
Origin Domain Name
に上記の手順で生成したS3のエンドポイントのドメインを入力する。
*入力欄をクリックすると候補一覧が表示されるが、このURLとは異なるので使用しないこと。Alternate Domain Names(CNAMEs)
に独自ドメイン名(example.com)を入力する。SSL Certificate
でCustom SSL Certificate
を選択する。入力欄をクリックすると最初の手順で作成した証明書が表示されるので、それを選択する。- "Create Distribution"ボタンでCloud Frontディストリビューション生成する。
*結構時間がかかるので、完了するまで待つ。
- Route53を開き、"Record Setの作成"を行う。
- "名前"は空欄
- "タイプ"はA
- "エイリアス"で"はい"を選択し、作成したCloud Frontディストリビューションを一覧から選択する
*一覧に表示されない場合はブラウザをリロードする。
以上で完了。
確認
ブラウザで http://example.com, https://example.comにアクセスし、S3のStatic website hosting
で指定したリダイレクト先のURLにリダイレクトされることを確認する。
また、curl
を使用して以下のようにリダイレクトが行われていることを確認できる。
$ curl -I http://example.com HTTP/1.1 301 Moved Permanently Content-Length: 0 Connection: keep-alive Date: Thu, 21 Nov 2019 11:32:08 GMT Location: https://www.example.com/ Server: AmazonS3 X-Cache: Miss from cloudfront Via: 1.1 b86f96ad1cdd596db48371f729df3b5c.cloudfront.net (CloudFront) X-Amz-Cf-Pop: NRT12-C2 X-Amz-Cf-Id: kfKRt3fPcv7QGqEi0b9GLiGl9TwxEs4X6hxhMYCH82rV9jmOi32ljQ==
$ curl -I https://example.com HTTP/2 301 content-length: 0 location: https://www.example.com/ date: Thu, 21 Nov 2019 11:32:08 GMT server: AmazonS3 x-cache: Hit from cloudfront via: 1.1 06f6824c0d57ccd48408cb017c7bce76.cloudfront.net (CloudFront) x-amz-cf-pop: NRT12-C2 x-amz-cf-id: kNgNZfUqz_wiNPnpQjrkvUQfrkYw3_zuPh8fvR1BvcULVKMQ5LsICw== age: 12