當您在 上從 F5 遷移至 Application Load Balancer 時修改HTTP標頭 AWS - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

當您在 上從 F5 遷移至 Application Load Balancer 時修改HTTP標頭 AWS

由 Sachin Trivedi 建立 (AWS)

環境:PoC 或試行

來源:內部部署

目標:AWS雲端

R 類型:Replatform

工作負載:所有其他工作負載

技術:聯網;混合雲端;遷移

AWS 服務:Amazon CloudFront;Elastic Load Balancing (ELB);AWSLambda

Summary

當您將使用 F5 Load 平衡器的應用程式遷移至 Amazon Web Services (AWS) 並想要在 上使用 Application Load Balancer 時AWS,遷移 F5 規則以進行標頭修改是常見的問題。Application Load Balancer 不支援標頭修改,但您可以使用 Amazon CloudFront 作為內容交付網路 (CDN) 和 Lambda@Edge 來修改標頭。

此模式描述必要的整合,並提供範例程式碼,以便使用 AWS CloudFront 和 Lambda@Edge 進行標頭修改。

先決條件和限制

先決條件

  • 內部部署應用程式,使用 F5 負載平衡器搭配使用 取代標頭值的HTTP組態if, else。如需此組態的詳細資訊,請參閱 F5 產品文件中的 HTTP::header。 

限制

  • 此模式適用於 F5 負載平衡器標頭自訂。對於其他第三方負載平衡器,請檢查負載平衡器文件以取得支援資訊。

  • 您用於 Lambda@Edge 的 Lambda 函數必須位於美國東部 (維吉尼亞北部) 區域。

架構

下圖顯示 上的架構AWS,包括 CDN和其他 AWS 元件之間的整合流程。

使用 Amazon CloudFront 和 Lambda@Edge 進行標頭修改的架構

工具

AWS 服務

  • Application Load Balancer - Application Load Balancer 是AWS完全受管的負載平衡服務,可在 Open Systems Interconnection (OSI) 模型的第七層運作。它平衡了多個目標的流量,並根據HTTP標頭和方法、查詢字串以及主機型或路徑型路由支援進階路由請求。

  • Amazon CloudFront – Amazon CloudFront 是一項 Web 服務,可加速將靜態和動態 Web 內容,例如 .html、.css、.js 和映像檔案分發給使用者。 透過稱為邊緣位置的資料中心全球網路 CloudFront 傳遞您的內容,以降低延遲並改善效能。

  • Lambda@Edge ─ Lambda@Edge 是 AWS Lambda 的延伸,可讓您執行函數來自訂 CloudFront 交付的內容。您可以在美國東部 (維吉尼亞北部) 區域中編寫函數,然後將函數與 CloudFront 分佈建立關聯,以在全球各地自動複寫程式碼,而無需佈建或管理伺服器。這可減少延遲並改善使用者體驗。

Code

下列範例程式碼提供修改 CloudFront 回應標頭的藍圖。請依照 Epics 區段中的指示部署程式碼。

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 Web 分佈。

在此步驟中,您會建立 CloudFront 分佈,以告知您要從 CloudFront 何處交付內容,以及如何追蹤和管理內容交付的詳細資訊。

若要使用主控台建立分佈,請登入 AWS 管理主控台,開啟CloudFront 主控台 ,然後遵循CloudFront 文件 中的步驟。

雲端管理員
任務描述所需的技能
建立和部署 Lambda@Edge 函數。

您可以使用修改 CloudFront 回應標頭的藍圖來建立 Lambda@Edge 函數。(其他 bluePrints 適用於不同的使用案例;如需詳細資訊,請參閱 CloudFront 文件中的 Lambda@Edge 範例函數。) 

若要建立 Lambda@Edge 函數:

  1. 登入 AWS 管理主控台,並在 開啟 AWS Lambda 主控台https://console.aws.amazon.com/lambda/

  2. 請確定您位於美國東部 (維吉尼亞北部) 區域。 CloudFront blueprints 僅適用於此區域。

  3. 選擇建立函數

  4. 選擇使用藍圖 ,然後在藍圖搜尋欄位中輸入雲端。 

  5. 選擇cloudfront-modify-response-header藍圖,然後選擇設定

  6. 基本資訊頁面上,輸入下列資訊:

    1. 輸入函數名稱。

    2. 對於執行角色 ,選擇從AWS政策範本 建立新角色

    3. 關聯所需的 AWS Identity and Access Management (IAM) 角色名稱。

  7. 選擇建立函數

  8. 在頁面的設計工具區段中,選擇函數名稱。

  9. 函數程式碼區段中,將範本程式碼取代為先前在此模式提供的範例程式碼,在程式碼區段中。

  10. 在範例程式碼中,將 取代xyz.com為您的網域名稱。 

  11. 選擇 Save (儲存)。

AWS 管理員
部署 Lambda@Edge 函數。

請遵循教學課程的步驟 4:在 Amazon CloudFront 文件中建立簡單的 Lambda@Edge 函數,以設定 CloudFront 觸發條件並部署函數。

AWS 管理員

相關資源

CloudFront 文件