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

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

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

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 は、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 コンソール」を開き、「CloudFront のドキュメント」の手順に従います。

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

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

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

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

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

  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 CloudFront のドキュメントのチュートリアル:簡単な Lambda @Edge 関数の作成の「ステップ 4」の手順に従い、CloudFront トリガーを設定し、関数をデプロイします。

AWS 管理者

関連リソース

CloudFront のドキュメント