F5 から AWS のApplication Load Balancer に移行するときの HTTP ヘッダーを変更 - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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 を使用したヘッダー変更のアーキテクチャ

ツール

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 コンソール を開き、CloudFront ドキュメント のステップに従います。

クラウド管理者
タスク説明必要なスキル
Lambda@Edge 関数の作成とデプロイ

Lambda@Edge 関数を作成するには、ブループリントを使用して CloudFront レスポンスヘッダーを変更します。(他の bluePrints はさまざまなユースケースで使用できます。詳細については、 CloudFront ドキュメントの「Lambda@Edge サンプル関数」を参照してください。) 

Lambda@Edge 関数を作成するには

  1. AWS マネジメントコンソールにサインインして AWS Lambda コンソールを https://console.aws.amazon.com/lambda/ で開きます。

  2. 米国東部 (バージニア北部) Region. CloudFront blueprints が、このリージョンでのみ使用可能であることを確認します。

  3. 関数を作成 を選択します。

  4. ブループリントを使用を選択し、ブループリント検索フィールドに cloudfront を入力します。 

  5. cloudfront-modify-response-header 設計図を選択し、「 の設定」を選択します

  6. [基本情報] ページで、次の情報を入力します。

    1. 関数名を入力します。

    2. [Execution role (実行ロール)] ドロップダウンリストで、[Create new role from AWS policy templates (AWS ポリシーテンプレートから新しいロールを作成)] を選択します。

    3. AWS Identity and Access Management (IAM) ロールとオプションを関連付けます。

  7. 関数を作成 を選択します。

  8. ページの [デザイナー] セクションで、関数名を選択します。

  9. [関数コード]セクションで、テンプレートコードを、このパターンの[コード]セクションで以前に提供したサンプルコードに置き換えます。

  10. サンプルコードでは、ドメイン名を xyz.com に置き換えます。 

  11. [保存] を選択します。

AWS 管理者
Lambda@Edge 関数をデプロイします。

「Amazon ドキュメント」の「チュートリアル: シンプルな Lambda@Edge 関数の作成」のステップ 4 の指示に従って、 CloudFront トリガーを設定し、関数をデプロイします。 CloudFront

AWS 管理者

関連リソース

CloudFront ドキュメント