S3+CloudFrontでS3のURLにリダイレクトされてしまう場合の対処法
大阪オフィスのYui(@MayForBlue)です。
S3+CloudFrontの構成で静的サイトを構築していてハマったところがあったので書き留めておきたいと思います。
CloudFrontのURLにアクセスしてもS3のURLにリダイレクトされる
S3+CloudFrontの構成で静的サイトをホスティングしたのですが、CloudFrontで指定したドメインにアクセスしてもS3のオブジェクト自体のURLにリダイレクトされてしまう現象になりました。(今回はS3をオリジンサーバに設定して構築しました。)
例えば
https://example.com/sample.html (CloudFrontで指定したドメイン)
にアクセスしても
https://example.s3.amazonaws.com/sample.html (S3のオブジェクトURL)
にリダイレクトされてしまう状態です。
色々調べていると公式に情報があったので紹介されている方法をやってみました。
Amazon S3 から HTTP 307 Temporary Redirect レスポンスが返るのはなぜですか?
Request Redirection and the REST API - Temporary Request Redirection
原因
- S3バケットを作成後、バケット名がすべてのAWSリージョンに伝達されるまで最大24時間かかる
- その間に同じリージョンにないリージョンのエンドポイントにリクエストすると「307 Temporary Redirect」レスポンスが返り、S3の場合はS3のデフォルトエンドポイント (s3.amazonaws.com) に転送され、そこから正しいオブジェクトURLに転送される
今回の場合
- CloudFrontでオリジンドメイン名にS3を指定する場合、デフォルトの設定ではS3デフォルトエンドポイント (s3.amazonaws.com) になる
- このエンドポイントはバージニア北部(us-east-1)リージョンにあるため、CloudFrontディストリビューションで指定したS3バケットのエンドポイントが東京リージョン(ap-northeast-1)の場合、24時間以内にアクセスするとリダイレクトが発生してS3のオブジェクトURLに転送される可能性がある
つまり以下の条件が重なるとこの現象になる可能性があるようです。
- S3のバケットをバージニア北部(us-east-1)リージョン以外で作成
- CloudFront経由でS3のバケット作成から24時間以内にアクセス
解決法
CloudFrontのオリジンドメイン名にリージョン名を追加する
CloudFrontディストリビューション作成時、デフォルトの選択肢ではs3.amazonaws.comになるのですが、リージョン名を指定して書き換えることで解決できました。 (例:s3-ap-northeast-1.amazonaws.com)
デフォルト
今回の方法を使う
最後に
急ぎでない場合はデフォルトの状態で待って対応すればOKですが急ぎの場合はこういう方法もありますというご紹介でした。 この記事がどなたかのお役に立てば幸いです。
大阪オフィスのYui(@MayForBlue)でしたっ(`・ω・´)