對 Lambda@Edge 的限制 - Amazon CloudFront

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

對 Lambda@Edge 的限制

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

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

DNS 解析

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

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

HTTP 狀態碼

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

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 22

  • 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.13

  • 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 開發人員指南中的執行時間支援政策和 GitHub 上的 Node.js 發行排程

提示

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

CloudFront 標頭

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

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

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

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

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

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

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

  • CloudFront 一律會在將要求內文公開給 Lambda@Edge 之前對其進行 base64 編碼。

  • 如果要求內文過大,CloudFront 會在公開給 Lambda@Edge 之前將內文截斷,如下所示:

    • 針對檢視器請求事件,會在 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 函數來設定分發原始伺服器的回應逾時或保持連線逾時,請確認您指定原始伺服器可支援的值。如需詳細資訊,請參閱回應和持續作用逾時配額