[CloudFront Functions] KeyValue ストアのチュートリアルを参考にリダイレクト処理をやってみた

[CloudFront Functions] KeyValue ストアのチュートリアルを参考にリダイレクト処理をやってみた

2025.10.19

CloudFront Functions について、以下の公式チュートリアル「キー値を含む関数を作成する」をやってみました。
https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/functions-tutorial-kvs.html

やってみた

前提準備

以下ブログに沿って CloudFront Functions 環境を準備します。
https://dev.classmethod.jp/articles/redirecting-with-cloudfront-functions/

ディストリビューションドメイン名にアクセスしたときに、
スクリーンショット 2025-10-12 18.20.47

以下のようにクラメソの DevelopersIO ブログページが表示されていれば準備 OK です。
スクリーンショット 2025-10-12 18.26.36

KeyValue ストアを作成する

CloudFront 関数画面の KeyValueStores タブを選択し、「Create KeyValueStore」を選びます。
スクリーンショット 2025-10-19 9.16.16

適当な名前を指定し、ストアを作成します。
スクリーンショット 2025-10-19 9.21.59

作成できました。
スクリーンショット 2025-10-19 9.23.03

ストアに Key と Value のペアを追加する

前項にて作成済みの KeyValue ストアの詳細ページを開き、「Key value pairs」セクションの「Add key value pairs」を選びます。
スクリーンショット 2025-10-19 9.27.06

右上の「Add pair」より任意の Key と Value のペアを追加し、「Save changes」を選びます。
ここでは、以下のクラメソ技術ブログと採用ページの URL を記載しています。

追加できました。
スクリーンショット 2025-10-19 12.37.40

KeyValue ストアを関数に関連付ける

作成済みの関数のページに移動し、「Associate existing KeyValueStore」を選びます。
スクリーンショット 2025-10-19 10.05.07

ポップアップが出るので関連付けたいストアを選び、「Associate KeyValueStore」を選択します。
スクリーンショット 2025-10-19 10.09.06

ストア(名称: TestStore)を関連付けることができました。
なお、関連づけると、「Example function」タブにサンプルコードが記載されます。この後、こちらのコードを参考にコードを修正していきます。
スクリーンショット 2025-10-19 11.34.22

関数コードを修正する

前述の「Example function」のコードを参考にコードを修正します。
処理は以下の流れです。デフォルトでは、クラメソ企業ページが表示され、URLパスによっては技術ブログや採用ページを表示するようにしてみました。

  • page_value 変数にはデフォルトでクラメソ企業ページの URL ( https://classmethod.jp/ ) を入れておく
  • クライアントがアクセスする URL パスから key 文字列を取得する
  • key 文字列が dev,recruit など KeyValueストアに格納されているものは、それぞれのページ(クラメソ技術ブログ, 採用サイト)の URL が page_value に上書きされる
  • key 文字列がストアに無い場合は、デフォルトのクラメソ企業ページのまま
  • location 句で page_value にリダイレクトする
			
			import cf from 'cloudfront';

// This fails if there is no key value store associated with the function
const kvsHandle = cf.kvs();

async function handler(event) {
    // Use the first part of the pathname as key, for example http(s)://domain/<key>/something/else
    const key = event.request.uri.split('/')[1]
    let page_value = "https://classmethod.jp/" // Default value
    try {
        page_value = await kvsHandle.get(key);
    } catch (err) {
        console.log(`Kvs key lookup failed for ${key}: ${err}`);
    }
    var response = {
        statusCode: 302,
        statusDescription: 'Found',
        headers: {
            'cloudfront-functions': { value: 'generated-by-CloudFront-Functions' },
            'location': { value: page_value }
        }
    };
    return response;
}

		

修正したら、コード右上にある「変更を保存」します。
スクリーンショット 2025-10-19 12.20.55

変更を保存後、発行タブから「関数を発行」します。
(今回は検証なのでコード修正後、すぐに関数を発行していますが、Functions にはテスト機能もあるので適宜テストするようにしましょう)
スクリーンショット 2025-10-19 12.22.18

動作確認

最後に Chrome のシークレットウィンドウで動作確認をします。
まず、CloudFront のディストリビューションドメイン名にそのままアクセスしてみます。
スクリーンショット 2025-10-19 12.29.41

クラメソ企業ページの URL ( https://classmethod.jp/ ) が表示されました。
スクリーンショット 2025-10-19 12.31.55

次に ディストリビューションドメイン名/recruit にアクセスしてみます。
スクリーンショット 2025-10-19 12.33.48

採用ページ(https://careers.classmethod.jp/requirements/ )が表示されました。
スクリーンショット 2025-10-19 12.39.41

最後に ディストリビューションドメイン名/dev にアクセスします。
スクリーンショット 2025-10-19 12.41.39

すると、クラメソ技術ブログ(https://dev.classmethod.jp/ )が表示されました。
スクリーンショット 2025-10-19 12.43.04

上記結果より関数コードの処理が適切に動いていそうですね。検証は以上です。

終わりに

今回は、以下公式ドキュメントのチュートリアルの内容を試してみました。
https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/functions-tutorial-kvs.html

KeyValue ストアって何?と思っていましたが、関数コードから参照できるキー値のペアということがわかりました。個人的には、環境変数に近いイメージかなと思います。
本ペアを使うことでコードが簡潔に書けるだけでなく、公式ドキュメントの通り、以下のようなユースケースに使えますね。とても便利な機能だと思いました。

ユースケース
キーと値のペアは、以下の例に示すように使用できます。

・URL の書き換えまたはリダイレクト — キーと値のペアは、書き換えられた URL またはリダイレクト URL を保持できます。
・A/B テストと機能フラグ – ウェブサイトの特定のバージョンにトラフィックの割合を割り当てることで、テストを実行する関数を作成できます。
・アクセスの認可 – 独自に定義した条件とキーバリューストアに保存したデータに基づいて、リクエストを許可または拒否するアクセスコントロールを実装できます。

Amazon CloudFront KeyValueStore

本記事がどなたかのお役に立てば幸いです。

参考情報

https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/functions-tutorial-kvs.html
https://dev.classmethod.jp/articles/redirecting-with-cloudfront-functions/
https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/functions-tutorial.html
https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/test-function.html
https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/functions-custom-methods.html
https://newstar.cloud/blog/introducing-amazon-cloudfront-keyvaluestore-a-low-latency-datastore-for-cloudfront-functions/

この記事をシェアする

FacebookHatena blogX

関連記事