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

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

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

由薩欽特里韋迪(AWS)創建

環境:PoC 或試點

來源:內部部署

目標:AWS 雲端

R 類型:重新平台

工作負載:所有其他工作

技術:網路、混合雲、移轉

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

Summary

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

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

先決條件和限制

先決條件

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

限制

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

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

架構

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

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

工具

AWS 服務

  • 應用程式負載平衡器 ─ 應用程式負載平衡器是 AWS 全受管負載平衡服務,可在開放系統互連 (OSI) 模型的第七層運作。它平衡多個目標的流量,並支援基於 HTTP 標頭和方法、查詢字串以及主機型或路徑型路由的進階路由要求。

  • Amazon CloudFront — Amazon CloudFront 是一種網絡服務,可以加快向用戶分發靜態和動態 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 函數。其他藍圖適用於不同的使用案例;如需詳細資訊,請參閱 CloudFront 文件中的 Lambda @Edge 範例函數。) 

若要建立 Lambda 函數:@Edge

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

  2. 確認您位於美國東部 (維吉尼亞北部) 區域。 CloudFront 藍圖僅在此區域提供。

  3. 選擇建立函數

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

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

  6. 在「基本」資訊頁上,輸入下列資訊:

    1. 輸入函數名稱。

    2. 針對 Execution role (執行角色),選擇 Create a 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 文件