【AWS】Route53+CloudFront+S3でhttpsのurlをリダイレクト

こんな要件がありました。

  1. AというドメインにアクセスしたユーザーをBというドメインにリダイレクトしたい。
  2. どちらのドメインAWSのRoute53で管理している。

S3の静的ウェブサイトホスティングを使う方法

そこで「Route53 リダイレクト」でググると最初に公式ページが出てきます。

https://aws.amazon.com/jp/premiumsupport/knowledge-center/redirect-domain-route-53/

そこにはこんな風にすればリダイレクトできますよ、と書いています。 実際に以下の方法を試してみました。

  1. S3バケット作成
  2. S3 コンソールで、example.comの正確な名前を使用してS3バケットを作成します。 リダイレクト元と同じ名前のバケットを作成する必要があるようです。
  3. S3のリダイレクト設定
  4. 作成したバケットを選択し、[プロパティ] を選択し、[Static website hosting]からリクエストをリダイレクトするを選択します。 ターゲットバケットまたはドメインにリダイレクト元となるドメインを入力します。リダイレクト先がhttpsなので、プロトコルhttpsを設定し、保存します。
  5. Route53でAレコードのエイリアス設定
  6. リダイレクト元のドメインのAレコードでエイリアスとして上記で設定したS3のドメインを選択します。注意点としては、S3を作成したばかりだとしばらく、エイリアスのS3の選択肢にURLが出てきません。だいたい数十分待つと表示されるので選択するか、S3のStatic website hostingのとこに表示されているドメイン({バケット名}.s3-website-{リージョン名}.amazonaws.com)を入力してもOKです。

ただ、この方法には1つ欠点があります。 よくよく上記ページを読んでみると、こんなことが書いています。

注意: リダイレクトでは HTTPS 経由で Amazon S3 に接続できないため、サイトは HTTP を使用する必要があります。

この方法ではhttp://転送元ドメイン できたアクセスはリダイレクトされますが、https://転送元ドメイン できたアクセスはリダイレクトされないようです。どちらのプロトコルもカバーした場合は、下記のようなCloudFrontをかませる方法ではないといけないようです。

S3の静的ウェブサイトホスティング+CloudFrontでリダイレクトさせる

前半は一緒で、S3のバケット作成はやはり必要です。

次に必要なのが

  1. ACMで証明書を発行する
  2. AWSACMは本当に便利であっという間に証明書を発行できます。 ただ、ハマりやすい点として注意なのがCloudFrontでACMの証明書を使いたい場合はバージニアリージョンで作成する必要があります。
  3. CloudFrontを作成する
  4. CloudFrontのディストリビューションを新規作成します。 ここではオリジンとしてS3バケットを選択したくなるわけですが、注意点として、S3のバケットを選択してはいけません。ここではS3のStatic website hostingのとこに表示されているドメイン({バケット名}.s3-website-{リージョン名}.amazonaws.com)を入力する必要があります。証明書は先程ACMで作成したものを使用し、CNAMEにリダイレクト元のドメインを入力します。
  5. Route53でAレコードのエイリアス設定
  6. ここはS3のときと一緒ですが、今度はS3じゃなくてCloudFrontをエイリアスとして選択します。ここも、選択肢に出てくるまで数十分かかるので、CloudFrontのページで確認できるドメインを入力してもOKです。

以上

設定としてはこれくらいで終了で10分くらいでできるような内容なんですが、DNSが反映されるまでまた30分から1時間くらいかかったので、これは何か間違ってるんじゃないか、うまくいっていないんじゃないかと不安になりました。落ち着いてしばらく待つことが重要ですね。