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

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

で 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、 のアーキテクチャを示しています。

Amazon CloudFront と Lambda@Edge を使用したヘッダー変更のアーキテクチャ

ツール

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

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

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

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

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

  2. 米国東部 (バージニア北部) リージョンにいることを確認してください。 CloudFront ブループリントは、このリージョンでのみ使用できます。

  3. [Create function (関数の作成)] を選択します。

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

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

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

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

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

    3. 必要な AWS Identity and Access Management (IAM) ロール名を関連付けます。

  7. [Create function (関数の作成)] を選択します。

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

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

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

  11. [Save] を選択します。

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

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

AWS 管理者

関連リソース

CloudFront ドキュメント