翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
F5 から AWS のApplication Load Balancer に移行するときの HTTP ヘッダーを変更
作成者:Sachin Trivedi (AWS)
環境:PoC またはパイロット | 出典:オンプレミス | ターゲット: AWS クラウド |
Rタイプ:リプラットフォーム | ワークロード:その他すべてのワークロード | テクノロジー: ネットワーキング、ハイブリッドクラウド、移行 |
AWS サービス: Amazon CloudFront、Elastic Load Balancing (ELB)、AWS Lambda |
[概要]
F5 ロードバランサーを使用するアプリケーションをAmazon Web Services (AWS) に移行し、AWS でApplication Load Balancer を使用したい場合、ヘッダー変更の F5 ルールを移行することがよくある問題です。Application Load Balancer はヘッダーの変更をサポートしていませんが、Amazon をコンテンツ配信ネットワーク (CDN) および Lambda@Edge CloudFront として使用してヘッダーを変更できます。
このパターンでは、必要な統合について説明し、AWS CloudFront と Lambda@Edge を使用してヘッダーを変更するためのサンプルコードを提供します。
前提条件と制限
前提条件
F5 ロードバランサーを使用するオンプレミスアプリケーションで、HTTP ヘッダー値を
if, else
により、置き換える設定になっています。この設定の詳細については、F5 製品ドキュメントの「HTTP:: header」を参照してください。
制約事項
このパターンは F5 ロードバランサーのヘッダーのカスタマイズに適用されます。他の第三者ロードバランサーについては、ロードバランサーのドキュメントでサポート情報を確認してください。
Lambda@Edge に使用する Lambda 関数は、米国東部 (バージニア北部) リージョンにある必要があります。
アーキテクチャ
次の図は、CDN と他の AWS コンポーネント間の統合フローを含む AWS のアーキテクチャを示しています。
![Amazon CloudFront と Lambda@Edge を使用したヘッダー変更のアーキテクチャ](images/pattern-img/00abbe3c-2453-4291-9b24-b488dced4868/images/4ee9a19e-6da2-4c5a-a8bc-19d3918a166e.png)
ツール
AWS サービス
「Application Load Balancer」─ Application Load Balancer は、開放型システム間相互接続 (OSI) モデルの第 7 層で機能する AWS フルマネージド型負荷分散サービスです。複数のターゲット間でトラフィックを分散し、HTTP ヘッダーとメソッド、クエリ文字列、ホストベースまたはパスベースのルーティングに基づく高度なルーティングリクエストをサポートします。
Amazon CloudFront – Amazon CloudFront は、.html、.css、.js、イメージファイルなどの静的および動的なウェブコンテンツのユーザーへの配信を高速化するウェブサービスです。 は、レイテンシーを短縮し、パフォーマンスを向上させるために、エッジロケーションと呼ばれるデータセンターのワールドワイドネットワークを通じてコンテンツを CloudFront 配信します。
Lambda@Edge ─ Lambda@Edge は AWS Lambda の拡張機能で、関数を実行して が 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 ドキュメント