ayumu_aoの日記

SIerから事業会社に転職したエンジニアが技術についてや組織論、本の話、今までの体験談などなどを個人的に垂れ流しています。

cloud frontとLambda@Edgeを使ってリダイレクト設定入れるやりかた

配下のWebサーバーではなくcloud frontとLambda@Edgeでリダイレクトしたい

意図としては配下のEC2なりにアクセスを通してWebサーバー(nginx、Apacheなど)でリダイレクトするのではなく 上位層でリダイレクトすることでWebサーバーへ不要なアクセスをさせない良いにしておきたい。

やりかた

①リダイレクトさせたい(アクセスさせたくない)URLをcloud frontのビヘイビアに設定する

[Behaviors]タブにてCreate Behaviorを押下
[Path Pattern]に"/hoge/*"みたいな感じでドメイン以下のURLを記載する
※ほか項目はよしなに入力して保存

②Lambda関数を作る

リージョンは バージニア北部 を選択(@Edgeとして利用するため) IAMロールはアクセス権限はよしなに設定し信頼関係は下記で作成

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "edgelambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

コードの内容は下記を入力し保存する

'use strict';
 
exports.handler = (event, context, callback) => {
    const response = {
        // 用途に応じたhttpステータスを記載する
        status: '308',
        statusDescription: 'Permanent Redirect',
        headers: {
            location: [{
                key: 'Location',
                value: '飛ばしたい先のURLを記載',
            }],
        },
    };
    // リダイレクト用レスポンスを返す
    callback(null, response);
};

新規バージョンを作成し先程設定したcloud frontに紐づけし
イベントタイプは origin-request
パスパターンに先程作成したビヘイビアの[Path Pattern]に設定したものを選択
ボディを含めるはいいえで保存します。

基本これでリダイレクト設定完了です。

ひさびさにサーバーレス関連の記事を書いてみましたw
最近コード書いてなかったですがコード書くと楽しいですね!