S3+CloudFrontだけでリダイレクト設定を作る

サービスをリニューアルするときに、ドメインも新しく作りなおしていて、どうしてもリダイレクトしておきたい場合があります。でも、そのリダイレクトってサービスの仕様ではないし、それなりに時間経ったら不要になるだろうから消したい。

そんなことのために、本体サービスのnginxにリダイレクト設定を書いたり、リダイレクトのためだけにEC2を立てるのは非常にだるい。

というわけで手抜きをして、S3でリダイレクト設定を書いてみる。

StaticWebHostでリダイレクト

例:old.hoge.comをnew.fuga.comにリダイレクトする場合

  1. old.hoge.comというバケットをS3で作る
  2. バケットの設定からStaticWebHostで、new.fuga.comへのリダイレクトを設定する f:id:h3poteto:20200326144948p:plain

  3. Endpointをメモっておく

この段階でEndpointにアクセスするとリダイレクトされるのが確認できると思う。

httpsを含まないような場合には、このままこのEndpointをRoute53に登録してやれば良い。 ただ、httpsを含む場合は、このままではhttps経由のアクセスがリダイレクトされないので、以下の作業が必要になる。

httpsを含む場合にはCloudFrontを経由する

httpsを含む場合には、CloudFront経由でS3のEndpointにアクセスさせて、そのCloudFrontに適切な証明書を設定してやれば、httpsのままリダイレクトされる。

  1. CloudFrontを新規作成する
  2. Originにはバケット名ではなくS3のEndpointを入れる f:id:h3poteto:20200326145005p:plain

  3. 証明書を設定する(CloudFront用の証明書しかリストアップされないので、ない場合は必要な証明書をCloudFront用に登録し直す)

  4. S3のold.hoge.comのPermissionに、Everyone: Listを追加する f:id:h3poteto:20200326145019p:plain

Route53に登録する

前述のhttpsを使わないパターンの場合は、S3のEndpointを直接、httpsを使う場合はCloudFrontのEndpointをCNAMEに登録してやる。 f:id:h3poteto:20200326145030p:plain

というところまでやると、無事リダイレクトされた。