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

ツール
AWS サービス
「Application Load Balancer」─ Application Load Balancer は、開放型システム間相互接続 (OSI) モデルの第 7 層で機能する AWS フルマネージド型負荷分散サービスです。複数のターゲット間でトラフィックを分散し、HTTP ヘッダーとメソッド、クエリ文字列、ホストベースまたはパスベースのルーティングに基づく高度なルーティングリクエストをサポートします。
「Amazon CloudFront」— Amazon CloudFront は、ユーザーへの静的および動的なウェブコンテンツ (.html、.css、.js、イメージファイルなど) の配信を高速化するウェブサービスです。CloudFront では、エッジロケーションというデータセンターの世界的ネットワークを経由してコンテンツを配信し、レイテンシーを短縮し、パフォーマンスを向上させます。
「Lambda@Edge」— Lambda@Edge は、CloudFront が配信するコンテンツをカスタマイズする関数を実行できる AWS Lambda の拡張機能です。米国東部 (バージニア北部) リージョンで作成した関数を CloudFront ディストリビューションに関連付けると、サーバーのプロビジョニングや管理の必要もなく、コードを世界中に自動的に複製できます。これにより、待ち時間が短縮され、ユーザーエクスペリエンスが向上します。
Code
次のサンプルコードは、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 関数の作成とデプロイ | CloudFront レスポンスヘッダーを変更するためのブループリントを使用して Lambda @Edge 関数を作成できます。(他のブループリントもさまざまなユースケースで利用できます。詳細については、「CloudFront のドキュメント」の「Lambda @Edge サンプル関数」を参照してください。) Lambda@Edge 関数を作成するには
| AWS 管理者 |
Lambda@Edge 関数をデプロイします。 | Amazon CloudFront のドキュメントのチュートリアル:簡単な Lambda @Edge 関数の作成の「ステップ 4」の手順に従い、CloudFront トリガーを設定し、関数をデプロイします。 | AWS 管理者 |
関連リソース
CloudFront のドキュメント