はじめに
http / https のサイト転送が必要になったので、試してみました。
URL 転送といえば最近では短縮 URL の活用がメジャーで、日本でも一般的に利用されていると思います。でも欲しいのはサイト転送です。
日本にも短縮しない URL 転送やサイト転送のサービスはありますし、海外では無料プランのあるサービスも見かけますが、せっかくなので AWS でやることにしました。
AWS で実現する方法の説明書は日本語情報も見かけるので、後発の本書としては劣化コピー感もありますが、それらの情報と少し違う操作をしたので、メモを残す次第です。
大まかな仕組み
- S3 の静的ウェブサイトホスティングの HTTP 転送機能で転送する
- CloudFront の Alternate Domain Names 機能で名前付け、および、暗号化する
- DNS の CNAME or ANAME で(間接的に) IP Address 付けする
手順概略
- ACM 証明書作成
- S3 バケット作成
- S3 バケット設定
- CloudFront ディストリビューション作成
- DNS 設定
手順詳細
ACM 証明書作成
us-east-1 にて、転送元ドメインの証明書を作成。
S3 バケット作成
デフォルトからの変更点は下記。
- 「ブロックパブリックアクセスのバケット設定」は「ブロックしない」! 笊!
S3 バケット設定
「プロパティ」の「静的ウェブサイトホスティング」で、選択肢は上から「有効にする」「オブジェクトのリクエストをリダイレクトする」「なし」を。
「ホスト名」には転送先ドメインの FQDN を記入。URL じゃないよ。
↓こんな感じ。
CloudFront ディストリビューション作成
delivery method は Web で。
Origin Domain Name は S3 バケットの静的ウェブサイトホスティングのバケットウェブサイトエンドポイントの FQDN を記入。プルダウンから選べるものはエンドポイントの FQDN じゃないよ!
Alternate Domain Names に転送元ドメインの FQDN を記入。
SSL Certificate は Custom SSL Certificate を選択し、ACM で作っておいた証明書を選択。
DNS 設定
Route53 だったら CNAME じゃなくて A の Alias を使うのが正解でしょう。Zone Apex に対しても使えます。
トラブルシュート
CloudFront の Origin Domain Name にエンドポイントではなくて S3 バケットの FQDN が入っていると S3 が 403 を XML で返しますよ。
↓こんなやつ。
CloudFront に Alternate Domain Names が設定されていないまま DNS 的に到達可能になると CloudFront が 403 を返しますよ。
↓こんなやつ。
おわりに
最近は ANAME が使える DNS も増えてきたっぽいですね。IIJ とか。
みんな Zone Apex 好きだなぁ。