CloudFront(BYOCDN)
この設定では、エージェントトラフィック(AI ボットおよび LLM ユーザーエージェントからのリクエスト)を Edge での最適化バックエンドサービス(live.edgeoptimize.net)にルーティングします。 人間の訪問者と SEO ボットは、通常どおりオリジンから引き続き提供されます。 設定をテストするには、設定が完了したら、応答のヘッダー x-edgeoptimize-request-id を探します。
前提条件
CloudFront 設定を指定する前に、次を確認します。
- Web サイトを提供する既存の CloudFront 配布。
- Lambda 関数、IAM 役割、CloudFront 配布およびキャッシュポリシーを作成する AWS IAM 権限。
- LLM Optimizer UI から取得された Edge Optimize API キー。 手順について詳しくは、API キーの取得を参照してください。
- (オプション)ステージングルーティングをテストするには、Staging API キーを参照してください。
手順 1:Edge での最適化オリジンを作成
ナビゲーション: AWS コンソール/CloudFront/配布/[配布]/オリジンタブ
-
「オリジンを作成」をクリックします。
-
オリジンを設定します。
- オリジンドメイン:
live.edgeoptimize.net - 名前:
EdgeOptimize_Origin
- オリジンドメイン:
-
その他のフィールドはすべてデフォルト値のままにします。
-
カスタムヘッダーを追加します。
table 0-row-2 1-row-2 2-row-2 3-row-2 ヘッダー 値 x-edgeoptimize-api-keyAPI キー x-forwarded-hostwww.example.comx-edgeoptimize-fetcher-keyFetcher キー(WAFを許可リストに加えるする場合のみ必要) www.example.comを実際の web サイトのドメインに、Your API keyをアドビ担当者から提供された Edge Optimize API キーに置き換えます。 -
「オリジンを作成」をクリックします。
手順 2:ビューアリクエスト関数を作成
ナビゲーション: AWS コンソール/CloudFront/関数
-
「関数を作成」をクリックします。
-
設定:
- 名前:
edgeoptimize-routing - ランタイム:
cloudfront-js-2.0
- 名前:
-
デフォルトのコードを viewer-request.js のコードに置き換えます。
公開する前に、コード内の次の値をカスタマイズします。
YOUR_DEFAULT_ORIGIN- 既存のデフォルトのオリジンの名前に置き換えます(CloudFront/配分/[配分]/オリジンタブで確認)。TARGETED_PATHS- すべての HTML ページをターゲットにするにはnullに設定するか、特定のパスの配列(例:['/', '/products', '/about'])に設定します。
-
変更を保存/関数を公開をクリックします。
手順 3:キャッシュポリシーを設定
ナビゲーション: AWS コンソール/CloudFront/配分/[配分]/動作
現在、動作にアタッチされているキャッシュポリシーを確認します。 動作の「編集」をクリックし、「キャッシュキーとオリジンリクエスト」セクションを確認して、シナリオを特定します。
- シナリオ A (レガシー): レガシーキャッシュ設定 というラベルのラジオボタンが選択されている状態が表示されます。 ポリシー名のドロップダウンはなく、代わりにインライン TTL とヘッダー設定が表示されます。
- シナリオ B (カスタムポリシー): キャッシュポリシー が選択されている状態が表示され、そのポリシー名は、自分または自分のチームが作成した名前(AWS が提供したポリシーではない)です。
- シナリオ C (管理ポリシー): キャッシュポリシー が選択されている状態が表示され、その AWS が提供した名前は
CachingOptimized、CachingDisabledまたはCachingOptimizedForUncompressedObjectsなどですが、これらは編集できません。
シナリオ A:レガシーキャッシュ設定
動作でレガシーキャッシュ設定を使用している場合は、次の手順に従います。
-
キャッシュキーとオリジンリクエストの下に、「レガシーキャッシュ設定」が選択されている状態が表示されます。
-
ヘッダー許可リストに
x-edgeoptimize-configとx-edgeoptimize-urlを追加します。- ドロップダウンから「次のヘッダーを含める」を選択します。
x-edgeoptimize-configとx-edgeoptimize-urlを追加します。
ヘッダードロップダウンで既に「すべて」が選択されている場合は、この手順をスキップします。すべてのヘッダーは自動的にオリジンに転送されます。
-
「オブジェクトキャッシュ」設定を確認します。
- カスタマイズに設定されている場合 - 最小 TTL を
0に設定することをお勧めします。 ただし、現在の最小 TTL が既に非常に短い場合、変更する必要はありません。 - オリジンキャッシュヘッダーを使用に設定した場合 - 変更は必要ありません。
- カスタマイズに設定されている場合 - 最小 TTL を
-
「変更を保存」をクリックします。
シナリオ B:カスタムキャッシュポリシーを持つレガシー以外
動作で既にカスタムキャッシュポリシー(AWS が管理するポリシーではなく、作成したポリシー)を使用している場合は、次の手順に従います。
ナビゲーション: AWS コンソール/CloudFront/ポリシー/キャッシュ
-
既存のポリシーをクリックします。
-
「編集」をクリックします。
-
最小TTLを
0に設定することをお勧めします。ただし、現在の最小TTLがすでに非常に短い場合は、変更する必要がない可能性があります。
-
キャッシュキー設定/ヘッダーの下に、既存のインクルージョンと共に、
x-edgeoptimize-configとx-edgeoptimize-urlを追加します。
-
「変更を保存」をクリックします。
シナリオ C:管理対象(AWS) キャッシュポリシーを持つレガシー以外
動作で AWS が管理するキャッシュポリシー(例:CachingOptimized)を使用している場合、編集できません。 既存の管理するポリシー設定をレプリケートし、上部に Edge での最適化ヘッダーを追加する新しいカスタムキャッシュポリシーを作成する必要があります。
第 1 部:現在の管理するキャッシュポリシー設定をメモ
ナビゲーション: AWS コンソール/CloudFront/ポリシー/キャッシュ
-
現在、動作にアタッチされている管理するキャッシュポリシー(例:
CachingOptimized)を検索してクリックします。 -
既存のすべての設定をメモします。
- 最小 TTL、最大 TTL、デフォルトの TTL
- キャッシュキーに含まれるヘッダー
- キャッシュキーに含まれる Cookie
- キャッシュキーに含まれるクエリ文字列
- 圧縮サポート(Gzip、Brotli)
第 2 部:同じ設定 + Edge での最適化設定で新しいカスタムキャッシュポリシーを作成
ナビゲーション: AWS コンソール/CloudFront/ポリシー/キャッシュ
-
「キャッシュポリシーを作成」をクリックします。
-
名前:
edgeoptimize-cache
-
第 1 部に記載されているすべての設定を、次の変更を行ってレプリケートします。
- 最小 TTL を
0に設定することをお勧めします。 ただし、現在の最小 TTL が既に非常に短い場合、変更する必要はありません。
- キャッシュキー設定/ヘッダーの下に、管理するポリシーが持つすべてを含めて、
x-edgeoptimize-configと x-x-edgeoptimize-urlを追加します。
- 最小 TTL を
-
「作成」をクリックします。
-
動作に戻り、新しく作成したポリシーを関連付けます。
ナビゲーション: AWS コンソール/CloudFront/配分/[配分]/動作
- 動作を編集します。
- キャッシュキーとオリジンリクエストの下にある「キャッシュポリシー」を選択します。
- ドロップダウンから
edgeoptimize-cacheを選択します。 - 「変更を保存」をクリックします。
手順 4:Lambda@Edge 関数を作成(オリジンリクエストと応答)
us-east-1(バージニア北部)地域で作成する必要があります。 これは AWS の要件です。 関数を us-east-1 で作成したとしても、AWS は世界中のすべての CloudFront Edge の場所に自動的にレプリケートするので、ビューアに最も近い Edge の場所で実行されます。 先に進む前に、AWS コンソールで us-east-1 地域にいることを確認してください。Lambda 関数の作成
ナビゲーション: AWS コンソール/Lambda
-
「関数を作成」をクリックします。
-
「ゼロから作成者」を選択します。
-
設定:
- 関数名:
edgeoptimize-origin - その他のフィールドはすべてデフォルト値のままにします。
- 関数名:
-
「関数を作成」をクリックします。
-
コードエディターで、デフォルトのコードを origin-request-response.js のコードに置き換えます。
-
「デプロイ」をクリックして、コードを保存します。
-
設定/権限の下に表示される 実行役割名 をメモします(例:
edgeoptimize-origin-role-xxxxx)。 これは、次の手順で必要になります。
実行役割の信頼ポリシーの更新
自動作成された役割は、lambda.amazonaws.com のみを信頼します。 Lambda@Edge の場合は、edgelambda.amazonaws.com も追加する必要があります。
ナビゲーション/ AWS コンソール/IAM/役割/[前の手順での役割]/信頼関係タブ
-
「信頼ポリシーを編集」をクリックします。
-
ポリシーを trust-policy.json の内容に置き換えます。
-
「ポリシーを更新」をクリックします。
edgelambda.amazonaws.com サービスプリンシパルが 必須 です。 これがないと、CloudFront は Edge の場所で関数を呼び出すことができません。CloudWatch ログの権限ポリシーの修正
通常の Lambda 用に設定された AWSLambdaBasicExecutionRole ポリシーが含まれますが、Lambda@Edge に対して地域とロググループ名が間違っています。 これを更新する必要があります。
ナビゲーション: AWSコンソール/IAM/役割/[役割]/権限タブ/アタッチされているポリシー名をクリックします(例:AWSLambdaBasicExecutionRole-xxxx)。
-
「編集」をクリックします。
-
ポリシーを cloudwatch-policy.json の内容に置き換えます。
JSON では、
ACCOUNT_IDを実際の AWS アカウント ID(AWS コンソールの右上隅に表示)に、FUNCTION_NAMEを Lambda 関数の名前(例:edgeoptimize-origin)に置き換えます。 -
「変更を保存」をクリックします。
* にする必要があります - Lambda@Edge はビューアに最も近い Edge の場所で実行されるので、ログは必ずしも us-east-1 ではなく、Edge の場所の地域(例:ap-south-1、eu-west-1)の CloudWatch に書き込まれます。 ロググループは、地域名を接頭辞とした名前(/aws/lambda/us-east-1.FUNCTION_NAME)を使用します。ここで、us-east-1 は常にその関数のホーム地域です。CloudWatch ログリンクを修正
デフォルトでは、Lambda コンソールのView CloudWatch logs ショートカットは、us-east-1の/aws/lambda/FUNCTION_NAMEにリンクします。これは、Lambda@Edgeに対して間違ったロググループです。 リンクが正しいパスを指すように、カスタムロググループを設定します。
ナビゲーション: AWS コンソール > Lambda > [お使いの関数] > Configuration > Monitoring and operations tools
-
「編集」をクリックします。
-
CloudWatch ロググループで、カスタムを選択します。
-
カスタムロググループ名を
/aws/lambda/us-east-1.edgeoptimize-originに設定します。 -
権限で、必要な権限を追加 チェックボックス オフのままにします。
-
「保存」をクリックします。
us-east-1ではなく、リクエストを配信したエッジ領域(例:eu-west-1、ap-south-1)に書き込まれます。 引き続き、CloudWatchの正しいリージョンに切り替えて、ログを確認する必要があります。バージョンの公開
-
関数ページで、アクション(右上)/新しいバージョンを公開をクリックします。
-
説明を追加します。
-
「公開する」をクリックします。
-
関数 ARN をコピーまたはメモします。これは、次の手順で必要になります。
手順 5:関数とキャッシュポリシーを動作に関連付け
ナビゲーション: AWS コンソール/CloudFront/配分/[配分]/動作
-
動作を編集します。
-
手順 3(シナリオ C)で新しいキャッシュポリシーを作成した場合は、キャッシュポリシー を
edgeoptimize-cacheに設定します。
-
関数の関連付けの下で、次を設定します。
- ビューアリクエスト:
edgeoptimize-routing - オリジンリクエスト:手順 4(バージョンの公開)からバージョン管理された関数 ARN
- オリジン応答:手順 4(バージョンの公開)からバージョン管理された関数 ARN
- ビューアリクエスト:
-
「変更を保存」をクリックします。
ファイアウォールルールを通じて Edge での最適化を許可(オプション)
CDNでWAFまたはBot Managerを使用している場合:
-
WAFまたはBot Managerで
*AdobeEdgeOptimize/1.0*ユーザーエージェントを許可リストに加えるして、Optimize at Edge サービスがオリジンコンテンツを取得できるようにします。 -
ファイアウォールでユーザーエージェント以外の追加の検証が必要な場合は、秘密鍵(例:
openssl rand -hex 32)を生成し、次の操作を行います。- ルーティングルールのシークレットを他の
x-edgeoptimize-*ヘッダーと共にx-edgeoptimize-fetcher-keyを追加します。 - WAFまたはBot Manager ルールを追加して、
x-edgeoptimize-fetcher-keyが同じシークレットと一致するリクエストを許可します。
- ルーティングルールのシークレットを他の
-
Edgeで最適化すれば、このヘッダーをそのまま転送できます。ユーザーは鍵のライフサイクル全体を所有しています。
手順 6:設定をテスト
1. ボットトラフィックをテスト(最適化する必要があります)
エージェントボットのユーザーエージェントを使用してリクエストを送信します。 最初のリクエスト時に、Edge での最適化では、ページを処理およびキャッシュする間、プロキシされた(最適化されていない)応答を返す場合があります。 これは、応答に含まれる x-edgeoptimize-proxy: 1 ヘッダーで特定できます。
エージェント型ユーザーエージェントを使用して、AI ボットリクエストをシミュレートします。
curl -svo /dev/null https://www.example.com/page.html \
--header "user-agent: chatgpt-user"
正常な応答には、リクエストが Edge での最適化を経由してルーティングされたことを確認する x-edgeoptimize-request-id ヘッダーが含まれます。
< HTTP/2 200
< x-edgeoptimize-request-id: 50fce12d-0519-4fc6-af78-d928785c1b85
2. 人間のトラフィックをテスト(影響を受けません)
通常の人間によるブラウザーリクエストをシミュレートします。
curl -svo /dev/null https://www.example.com/page.html \
--header "user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"
応答には、x-edgeoptimize-request-id ヘッダーを含め ない でください。 ページのコンテンツと応答時間は、Edge での最適化を有効にする前と同じ状態を維持する必要があります。
3. 2 つのシナリオを区別する方法
x-edgeoptimize-request-idx-edgeoptimize-fo1)トラフィックルーティングのステータスは、LLM Optimizer UIでも確認できます。 顧客設定に移動し、CDN設定 タブを選択します。
4. ログが正しくフローされていることを確認
上記のテストリクエストを実行した後、CloudFront 関数と Lambda@Edge 関数の両方についてログが書き込まれていることを確認します。
CloudFront 関数ログ(edgeoptimize-routing)
ナビゲーション: AWS コンソール/CloudWatch/ロググループ(us-east-1 またはCloudFront 配分が設定されている地域)
-
/aws/cloudfront/function/edgeoptimize-routingという名前のロググループを探します。 -
最新のログストリームを開きます。
-
エージェント型リクエストの場合、次のようなエントリが表示されます。
Adding origin group for userAgent: chatgpt-userRouting to Edge Optimize origin for userAgent: chatgpt-user
-
エージェント型以外のリクエストの場合、次を参照してください。
Routing to Default origin for userAgent: ...
また、AWS コンソール/CloudFront/関数/edgeoptimize-routing の下にある「指標」タブを確認すると、呼び出し回数とエラー率を確認できます。
Lambda@Edge ログ(edgeoptimize-origin)
us-east-1 地域ではなく、リクエストを提供した Edge の場所の地域の CloudWatch に書き込まれます。 curl コマンドを実行した場所に最も近い AWS 地域の CloudWatch を確認します。ナビゲーション: AWS コンソール/CloudWatch/ロググループ(正しい地域に属していることを確認します)
-
/aws/lambda/us-east-1.edgeoptimize-originという名前のロググループを探します。 -
最新のログストリームを開きます。
-
エージェント型リクエストの場合、次のようなエントリが表示されます。
Calling Edge Optimize Origin for agentic requests- プライマリパスCalling Default Origin in case of failover for agentic requests— フェイルオーバーパスFailover Triggered for agentic requests- origin-response フェールオーバー検出
ロググループが存在しない場合は、手順 4 で IAM 権限が正しく更新されたことを確認します。 また、近くにある他の AWS 地域も確認します。リクエストを提供した Edge の場所は、想定していたものと異なる場合があります。
トラブルシューティング
x-edgeoptimize-request-id がないYOUR_DEFAULT_ORIGIN が正しく置き換えられていることを確認します(手順 2)。x-edgeoptimize-api-key ヘッダーの値を確認します(手順 1)。us-east-1 ではなく、リクエストを提供した Edge の地域に表示されます。cache-control: no-store を適用していない0 に設定します(手順 3)。 最小 TTL が既に非常に短い場合は、これが問題ではないことがあります。Edge での最適化の無効化と再有効化
Lambda@Edge 関数(edgeoptimize-origin)は、CloudFront 動作のオリジンリクエストおよびオリジン応答イベントに関連付けられています。 Lambda@Edge は、その動作を通過するすべてのリクエスト(人間とエージェントの両方)に対してインラインで実行されるので、Lambda@Edge の停止は、エージェント型リクエストだけでなく、すべてのライブトラフィックに影響を与えます。 Lambda@Edge の停止を検出した場合は、すぐに関数の関連付けを削除して、デフォルトのオリジンへの通常のトラフィックフローを復元します。
Lambda@Edge の停止を検出する方法
- AWS サービスヘルスダッシュボード - AWS サービスヘルスダッシュボードで、Amazon CloudFront または AWS Lambda に影響を与えているアクティブなインシデントがないか確認します。 ここで報告されたグローバルまたは地域的な停止は、問題が設定ではなく AWS インフラストラクチャ側にあることを最も迅速に確認する方法です。
- Lambda@Edge エラー - AWS コンソール/CloudFront/監視/[配分]に移動します。 「Lambda@Edge エラー」タブを開き、実行エラーグラフで実行エラーを確認します。 エラー数が高い場合は、Lambda@Edge がダウンしている可能性があります。
Lambda@Edge 関数のデタッチ
ナビゲーション: AWS コンソール/CloudFront/配分/[配分]/動作
-
動作で「編集」をクリックします。
-
「関数の関連付け」セクションまでスクロールします。
-
次の関連付けを 関連付けなし に設定します。
table 0-row-2 1-row-2 2-row-2 3-row-2 イベント 変更先 ビューアリクエスト 関連付けなし オリジンリクエスト 関連付けなし オリジン応答 関連付けなし
-
「変更を保存」をクリックします。
-
CloudFront 配分のデプロイが完了するのを待機します。 ステータスは デプロイ中 から最終変更日に変更されます(通常は数分以内)。
デプロイ後、すべてのトラフィックがデフォルトのオリジンに直接ルーティングされます。 設定は削除されません。Lambda 関数とその関連付けはいつでも復元できます。
Lambda@Edge 関数の再アタッチ
ナビゲーション: AWS コンソール/CloudFront/配分/[配分]/動作
-
動作で「編集」をクリックします。
-
「関数の関連付け」セクションまでスクロールします。
-
関連付けを復元します。
table 0-row-2 1-row-2 2-row-2 3-row-2 イベント 設定先 ビューアリクエスト edgeoptimize-routing(CloudFront 関数)オリジンリクエスト 手順 4 からのバージョン管理された Lambda ARN オリジン応答 手順 4 からのバージョン管理された Lambda ARN 手順 4(バージョンの公開)でメモしたバージョン管理された 関数 ARN を使用します。
-
「変更を保存」をクリックします。
-
配分のデプロイが完了するまで待機し、手順 6 の説明に従って、エージェント型リクエストが
x-edgeoptimize-request-idヘッダーを返すことを確認します。
利用可能なオポチュニティ、自動最適化ワークフロー、FAQなど、Edgeでの最適化について詳しくは、Edgeでの最適化の概要に戻ります。