使用 AWS Lambda 搭配 CloudFront Lambda@Edge - AWS Lambda

使用 AWS Lambda 搭配 CloudFront Lambda@Edge

Lambda@Edge 可讓您執行 Node.js 和 Python Lambda 函數來自訂 CloudFront 交付的自訂內容,在靠近檢視器附近的 AWS 位置執行函數。執行以回應 CloudFront 事件的函數,無需佈建或管理伺服器。您能在下列時間點使用 Lambda 函式,以變更 CloudFront 請求與回應:

  • CloudFront 接收到來自檢視器的請求 (檢視器請求) 之後

  • CloudFront 轉寄請求給來源 (原始請求) 之前

  • CloudFront 接收到來自來源的回應 (原始回應) 之後

  • CloudFront 轉寄回應給檢視器 (檢視器回應) 之前


      說明 CloudFront 事件如何觸發 Lambda 函式的概念圖。
注意

Lambda@Edge 支援一組有限的執行時間和功能。如需詳細資訊,請參閱 Amazon CloudFront 開發人員指南中的 Lambda 函數的需求和限制

您也可以產生回應給檢視器,而無需傳送要求給源頭。

範例 CloudFront 訊息事件

{ "Records": [ { "cf": { "config": { "distributionId": "EDFDVBD6EXAMPLE" }, "request": { "clientIp": "2001:0db8:85a3:0:0:8a2e:0370:7334", "method": "GET", "uri": "/picture.jpg", "headers": { "host": [ { "key": "Host", "value": "d111111abcdef8.cloudfront.net" } ], "user-agent": [ { "key": "User-Agent", "value": "curl/7.51.0" } ] } } } } ] }

有了 Lambda@Edge,您可以建置各種解決方案,例如:

  • 檢查 cookie 以便重寫網站不同版本的 URL,做為 A/B 測試用途。

  • 根據 User-Agent 標頭 (含有提交要求之裝置的相關資訊),傳送不同的物件給您的使用者。例如,您可以根據使用者的裝置傳送不同解析度影像給他們。

  • 檢查標頭或已授權字符、插入相對應的標頭,並在轉發要求到源頭之前,允許存取控制。

  • 新增、刪除和修改標頭,並重寫 URL 路徑將使用者導向快取中的不同物件。

  • 產生新的 HTTP 回應,以進行像是將未驗證使用者重新導向登入頁面,或是從節點直接建立並交付靜態網頁等工作。如需詳細資訊,請參閱 Amazon CloudFront 開發人員指南中的使用 Lambda 函數來產生 HTTP 回應給檢視器和原始請求

如需有關使用 Lambda@Edge 的詳細資訊,請參閱使用 CloudFront 搭配 Lambda@Edge