🙌

Route53 + CloudFront Functionsで301リダイレクトする

に公開

前置き

ドメインの引越しなどで発生するリダイレクト作業です。

前提

  • Route53に古い方のドメインがすでに登録されている

本題

S3を作成

あとで、CloudFrontのオリジンに設定するS3を作成します。
CloudFront Functionsで特に、S3は経由せずにリダイレクトしてしまうので、
S3の中身自体は空で大丈夫です。

CloudFrontのオリジンに何かしら設定しないと次に進めないのでそのために用意します。

CloudFrontを準備する

代替ドメイン名に関しては、ワイルドカードあり・なしの2つを設定します。
※ www.から始まるサブドメインなどもリダイレクトしたい場合。

例: *.example.com, example.com

CloudFront Functionsを作成

関数の中身は
https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/functions-tutorial.html
に載ってる例を301用に変更するだけで大丈夫です。

function handler(event) {
    // NOTE: This example function is for a viewer request event trigger. 
    // Choose viewer request for event trigger when you associate this function with a distribution. 
    var response = {
        statusCode: 301,
        statusDescription: 'Moved Permanently',
        headers: {
            'cloudfront-functions': { value: 'generated-by-CloudFront-Functions' },
            'location': { value: 'https://example.com/' }
        }
    };
    return response;
}

関数の発行とディストリビューションの関連付け

作成した関数の「発行」タブで行います。
CloudFrontのディストリビューションとの関連付けは忘れやすいので、注意が必要です。

ssl証明書発行

ドメインの向き先がawsになったタイミングでssl証明書もCertificate Managerに移行したほうが便利です。

注意点としては、ワイルドカード(*)付きと、そうでないのを両方リクエストすることです
例

もう一つの注意点はRoute53にレコードが必要ということです。
リクエスト中の証明書のIDをクリックして「ドメイン」の部分にある「Route53でレコードを作成」をクリックすると作成できます。
これは、「CNAMEを設定できるのは、正規の管理者であること」を利用した認証の方法ですが、同じAWS内の出来事なので、一瞬不要かもと思ってしまいます。

Route53のレコードを編集

Route53にすでにレコードが登録されている前提なので、ここは編集になります。

  • エイリアスをON
  • トラフィックのルーティング先を上記で作成した、CloudFrontに向ける

大まかな流れはこれで以上です。

しくみのテックブログ

Discussion