翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
で F5 から Application Load Balancer に移行するときにHTTPヘッダーを変更する AWS
作成者: Sachin Trivedi (AWS)
概要
F5 ロードバランサーを使用するアプリケーションをアマゾン ウェブ サービス (AWS) に移行し、 で Application Load Balancer を使用する場合AWS、ヘッダー変更のための F5 ルールの移行は一般的な問題です。Application Load Balancer はヘッダーの変更をサポートしていませんが、Amazon をコンテンツ配信ネットワーク (CDN) および Lambda@Edge CloudFront として使用してヘッダーを変更できます。
このパターンでは、必要な統合について説明し、 AWS CloudFront と Lambda@Edge を使用してヘッダーを変更するためのサンプルコードを提供します。
前提条件と制限
前提条件
を使用してヘッダー値を置き換えHTTPる設定で F5 ロードバランサーを使用するオンプレミスアプリケーション
if, else
。この設定の詳細については、F5 製品ドキュメントのHTTP「::header」を参照してください。
機能制限
このパターンは F5 ロードバランサーのヘッダーのカスタマイズに適用されます。他の第三者ロードバランサーについては、ロードバランサーのドキュメントでサポート情報を確認してください。
Lambda@Edge に使用する Lambda 関数は、米国東部 (バージニア北部) リージョンにある必要があります。
アーキテクチャ
次の図は、 CDNと他のAWSコンポーネント間の統合フローを含むAWS、 のアーキテクチャを示しています。

ツール
AWS サービス
Application Load Balancer ─ Application Load Balancer は、Open Systems Interconnection (OSI) モデルの 7 番目のレイヤーで機能するAWSフルマネージド型のロードバランシングサービスです。複数のターゲット間でトラフィックを分散し、HTTPヘッダーとメソッド、クエリ文字列、ホストベースまたはパスベースのルーティングに基づいて高度なルーティングリクエストをサポートします。
Amazon CloudFront – Amazon CloudFront は、.html、.css、.js、イメージファイルなどの静的および動的なウェブコンテンツのユーザーへの配信を高速化するウェブサービスです。 は、エッジロケーションと呼ばれるデータセンターの世界的ネットワークを通じてコンテンツを CloudFront 配信し、レイテンシーを短縮し、パフォーマンスを向上させます。
Lambda@Edge ─ Lambda@Edge は Lambda AWS の拡張機能で、 関数を実行して が CloudFront 配信するコンテンツをカスタマイズできます。米国東部 (バージニア北部) リージョンで関数を作成し、その関数を CloudFront ディストリビューションに関連付けることで、サーバーのプロビジョニングや管理を行わずに、コードを世界中に自動的にレプリケートできます。これにより、待ち時間が短縮され、ユーザーエクスペリエンスが向上します。
コード
次のサンプルコードは、 CloudFront レスポンスヘッダーを変更するための設計図を提供します。[エピック] セクションの指示に従い、コードをデプロイします。
exports.handler = async (event, context) => { const response = event.Records[0].cf.response; const headers = response.headers; const headerNameSrc = 'content-security-policy'; const headerNameValue = '*.xyz.com'; if (headers[headerNameSrc.toLowerCase()]) { headers[headerNameSrc.toLowerCase()] = [{ key: headerNameSrc, value: headerNameValue, }]; console.log(`Response header "${headerNameSrc}" was set to ` + `"${headers[headerNameSrc.toLowerCase()][0].value}"`); } else { headers[headerNameSrc.toLowerCase()] = [{ key: headerNameSrc, value: headerNameValue, }]; } return response; };
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
CloudFront ウェブディストリビューションを作成します。 | このステップでは、コンテンツの配信元と、 CloudFront コンテンツ配信の追跡および管理方法の詳細を に伝えるディス CloudFront トリビューションを作成します。 コンソールを使用してディストリビューションを作成するには、 AWSマネジメントコンソールにサインインし、 CloudFront コンソール | クラウド管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
Lambda@Edge 関数の作成とデプロイ | Lambda@Edge 関数を作成するには、ブループリントを使用して CloudFront レスポンスヘッダーを変更します。(その他の bluePrints はさまざまなユースケースで利用できます。詳細については、 CloudFront ドキュメントの「Lambda@Edge サンプル関数」を参照してください。) Lambda@Edge 関数を作成するには
| AWS 管理者 |
Lambda@Edge 関数をデプロイします。 | 「チュートリアル: Amazon ドキュメントのシンプルな Lambda@Edge 関数の作成」のステップ 4 の指示に従って、 CloudFront トリガーを設定し、関数をデプロイします。 CloudFront | AWS 管理者 |
関連リソース
CloudFront ドキュメント