對 Lambda@Edge 的限制 - Amazon CloudFront

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

對 Lambda@Edge 的限制

下列限制僅適用於 Lambda@Edge。

如需配額的詳細資訊,請參閱 Lambda@Edge 的配額

DNS 解析度

CloudFront 會在原始網域名稱執行原始伺服器請求 Lambda@Edge 函數之前,先對原始伺服器網域名稱執行DNS解析。如果網域DNS的服務遇到問題,且 CloudFront 無法解析網域名稱以取得 IP 地址,您的 Lambda@Edge 函數將不會叫用 。 CloudFront 會將 HTTP 502 狀態碼 (錯誤的閘道) 傳回給用戶端。如需詳細資訊,請參閱DNS錯誤(NonS3OriginDnsError)

如需管理DNS容錯移轉的詳細資訊,請參閱 Amazon Route 53 開發人員指南 中的設定DNS容錯移轉

HTTP 狀態碼

檢視器回應事件的 Lambda@Edge 函數無法修改回應HTTP的狀態碼,無論回應來自原始伺服器或 CloudFront快取。

Lambda 函數版本

您必須使用 Lambda 函數的已編號版本,而不是 $LATEST 或別名。

Lambda 區域

Lambda 函數必須位於美國東部 (維吉尼亞北部)區域。

Lambda 角色許可

與 Lambda 函數相關聯的IAM執行角色必須允許服務主體lambda.amazonaws.comedgelambda.amazonaws.com 擔任該角色。如需詳細資訊,請參閱設定 Lambda@Edge 的IAM許可和角色

Lambda 功能

Lambda@Edge 不支援下列 Lambda 函數:

支援的執行期

Lambda@Edge 支援具有下列執行時間的 Lambda 函數:

Node.js

Python

  • Node.js 20

  • Node.js 18

  • Node.js 161

  • Node.js 142

  • Node.js 12²

  • Node.js 10²

  • Node.js 82

  • Node.js 62

  • Python 3.12

  • Python 3.11

  • Python 3.10

  • Python 3.9

  • Python 3.8

  • Python 3.7

1此版本的 Node.js 已達到生命週期結束,且即將由 取代 AWS Lambda。

2此版本的 Node.js 已達到生命週期結束,並由 完全取代 AWS Lambda。

您無法使用已棄用版本的 Node.js 建立或更新函數。您只能將現有函數與這些版本與 CloudFront 分佈建立關聯。具有與分佈相關聯的這些版本的函數將繼續執行。不過,建議您將函數移至較新的 Node.js 版本。如需詳細資訊,請參閱 AWS Lambda 開發人員指南中的執行期取代政策,以及 上的 Node.js 發行排程 GitHub。

提示

最佳實務是使用提供的最新版本執行期來改善效能和使用新功能。

CloudFront 標頭

Lambda@Edge 函數可以讀取、編輯、移除或新增 中列出的任何 CloudFront 標頭新增 CloudFront 要求標頭

備註
  • 如果您想要 CloudFront 新增這些標頭,您必須設定 CloudFront 以使用快取政策原始伺服器請求政策 來新增它們。

  • CloudFront 在檢視器請求事件之後新增標頭,這表示檢視器請求中的 Lambda@Edge 函數無法使用標頭。標頭僅適用於原始伺服器請求和原始伺服器回應中的 Lambda@Edge 函數。

  • 如果檢視器請求包含具有這些名稱的標頭,且您設定為使用快取政策原始伺服器請求政策 CloudFront 新增這些標頭,則 會 CloudFront 覆寫檢視器請求中的標頭值。面向檢視器的函數會從檢視器請求中查看標頭值,而面向原始伺服器的函數則會查看新增的 CloudFront標頭值。

  • 如果檢視器請求函數新增CloudFront-Viewer-Country標頭,則驗證會失敗,並將HTTP狀態碼 502 (錯誤的閘道) CloudFront 傳回給檢視器。

使用包含內文選項時的要求內文限制

當您選擇包含內文選項將請求內文公開至 Lambda@Edge 函數時,下列資訊和大小限制適用於已公開或已取代的內文部分。

  • CloudFront 一律在將請求內文公開給 Lambda@Edge 之前,Base64 會先編碼請求內文。

  • 如果請求內文較大,請在將其暴露至 Lambda@Edge 之前 CloudFront 將其截斷,如下所示:

    • 針對檢視器請求事件,會在 40 KB 處截斷內文。

    • 針對原始伺服器請求事件,會在 1 MB 處截斷內文。

  • 如果您以唯讀形式存取請求內文, 會將完整的原始請求內文 CloudFront 傳送至原始伺服器。

  • 如果您的 Lambda@Edge 函數取代請求內文,則下列大小限制適用於函數傳回的內文:

    • 如果 Lambda@Edge 函數以純文字格式傳回內文:

      • 對於檢視器請求事件,內文限制為 40 KB。

      • 對於原始伺服器請求事件,內文限制為 1 MB。

    • 如果 Lambda@Edge 函數以 base64 編碼的文字傳回內文:

      • 對於檢視器請求事件,內文限制為 53.2 KB。

      • 對於原始伺服器請求事件,內文限制為 1.33 MB。

注意

如果您的 Lambda@Edge 函數傳回超過這些限制的內文,您的請求將會以 HTTP 502 狀態碼 () 失敗Lambda 驗證錯誤。建議您更新 Lambda@Edge 函數,以免內文超過這些限制。

回應逾時和保持連線逾時 (僅限自訂原始伺服器)

如果您使用 Lambda@Edge 函數來設定分發原始伺服器的回應逾時或保持連線逾時,請確認您正在指定原始伺服器可支援的值。如需詳細資訊,請參閱回應和保持連線逾時配額