Cloudfront functions
CloudFront Functions は、以下のユースケースにおける軽量で実行時間の短い関数に最適です。
キャッシュキーの正規化 – HTTP リクエスト属性 (ヘッダー、クエリ文字列、Cookie、さらには URL パス) を変換して、最適なキャッシュキーを作成します。これにより、キャッシュのヒット率を向上させることができます。
ヘッダー操作 – リクエストまたはレスポンスに対する HTTP ヘッダーの挿入、変更、または削除を行います。たとえば、すべてのリクエストに True-Client-IP ヘッダーを追加できます。
URL リダイレクトまたは書き換え – リクエスト内の情報に基づいてビューワーを他のページにリダイレクトしたり、あるパスから別のパスにすべてのリクエストを書き換えたりします。
リクエストの承認 – 承認ヘッダーや他のリクエストメタデータを調べることで、JSON ウェブトークン (JWT) などのハッシュ化された承認トークンを検証します。
(gemini)
結論:何ができないのか?
一言で言えば、「CloudFrontの外部にあるもの(API、DB、ファイル)とやり取りすること」 が最大の制約です。
CloudFront Functions のランタイム環境は、動的コード評価をサポートしておらず、ネットワーク、ファイルシステム、タイマーへのアクセスを制限します。詳細については、「制限された機能」を参照してください。
これらが必要な場合は、制約が大幅に緩いLambda@Edge(コードサイズ50MB、メモリ最大10GB、ネットワークアクセス可)を選択する必要があります。CloudFront Functions は、あくまで「届いたリクエストのヘッダーやURLをその場で高速に書き換える」ための道具です。 1. 実行環境・リソースの制約
「超軽量・超高速」を維持するため、非常に厳しいリソース制限があります。
コードサイズ: 最大 10 KB(ライブラリ等も含む合計)。
メモリ: 最大 2 MB。
実行時間(コンピューティング使用率): ミリ秒未満での完了が想定されています。「コンピューティング使用率」という指標で 0〜100 のスコアで測定され、これを超えるとスロットリングが発生します。
ログ: 出力されるログは 10 KB で切り捨てられます。
2. 機能的な制限(ネットワーク・ファイル等)
以下の機能は JavaScript 2.0 になっても引き続き制限(禁止) されています。
ネットワークアクセス不可: fetch や http モジュールなどは存在しません。外部APIを叩く、データベースに接続するといった処理は一切できません。
ファイルシステムアクセス不可: ローカルファイルの読み書きはできません。
タイマー関数不可: setTimeout や setInterval は使えません。
動的評価の禁止: eval() や Function コンストラクタによる動的なコード実行はできません。
3. HTTPリクエスト/レスポンスへのアクセス制限
リクエストボディへのアクセス不可: GET/POSTに関わらず、HTTPボディ(中身)を読むことはできません。 ヘッダー、クエリ文字列、Cookie、URLの操作に限定されます。
トリガーの種類: 「ビューワーリクエスト」と「ビューワーレスポンス」の2つのみです。オリジンリクエスト/レスポンス(キャッシュミス時のみ実行されるイベント)には対応していません。
4. JavaScript 2.0 と async/await に関する制約
JS 2.0 で async/await が導入されましたが、ドキュメントには以下の注意書きがあります。
外部通信のための async ではない: ネットワークアクセスが禁止されているため、async/await は主に WebCrypto(暗号化処理)や CloudFront KeyValueStore(専用のKey-Valueストア)へのアクセスなど、AWSが提供する内部関数を待機するために使われます。
構文の制限: * 非同期の無名関数(クロージャ)や、引数に async を指定する一部の書き方はサポートされていない場合があります。
Promise を多用するとメモリ消費が激しくなり、2MB の制限に抵触しやすいため、可能な限りシンプルに書くことが推奨されています。