

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

# 對 Lambda@Edge 的限制
<a name="lambda-at-edge-function-restrictions"></a>

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

**Contents**
+ [

## DNS 解析
](#lambda-at-edge-restrictions-dns)
+ [

## HTTP 狀態碼
](#lambda-at-edge-restrictions-status-codes)
+ [

## Lambda 函數版本
](#lambda-at-edge-restrictions-version)
+ [

## Lambda 區域
](#lambda-at-edge-restrictions-region)
+ [

## Lambda 角色許可
](#lambda-at-edge-restrictions-role-permissions)
+ [

## Lambda 功能
](#lambda-at-edge-restrictions-features)
+ [

## 支援的執行時期
](#lambda-at-edge-restrictions-runtime)
+ [

## CloudFront 標頭
](#lambda-at-edge-restrictions-cloudfront-headers)
+ [

## 使用包含內文選項時的要求內文限制
](#lambda-at-edge-restrictions-request-body)
+ [

## 回應逾時和保持連線逾時 (僅限自訂原始伺服器)
](#timeout-for-lambda-edge-functions)

如需配額的詳細資訊，請參閱 [Lambda@Edge 的配額](cloudfront-limits.md#limits-lambda-at-edge)。

## DNS 解析
<a name="lambda-at-edge-restrictions-dns"></a>

CloudFront 在執行原始伺服器請求 Lambda@Edge 函數*之前*，會對原始伺服器網域名稱執行 DNS 解析。如果您網域的 DNS 服務遇到問題，且 CloudFront 無法解析網域名稱以取得 IP 位址，您的 Lambda@Edge 函數將不會調用。CloudFront 將傳回 [HTTP 502 狀態碼 (無效的閘道)](http-502-bad-gateway.md) 給用戶端。如需詳細資訊，請參閱[DNS 錯誤 (`NonS3OriginDnsError`)](http-502-bad-gateway.md#http-502-dns-error)。

如果您的函數邏輯修改原始網域名稱，CloudFront 將在函數完成執行後對更新的網域名稱執行另一個 DNS 解析。

如需有關管理 DNS 備援的詳細資訊，請參閱《Amazon Route 53 開發人員指南》**中的[設定 DNS 備援](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-configuring.html)。

## HTTP 狀態碼
<a name="lambda-at-edge-restrictions-status-codes"></a>

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

## Lambda 函數版本
<a name="lambda-at-edge-restrictions-version"></a>

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

## Lambda 區域
<a name="lambda-at-edge-restrictions-region"></a>

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

## Lambda 角色許可
<a name="lambda-at-edge-restrictions-role-permissions"></a>

與 Lambda 函數關聯的 IAM 執行角色必須可由服務主體 `lambda.amazonaws.com` 和 `edgelambda.amazonaws.com` 擔任。如需詳細資訊，請參閱[設定 Lambda@Edge 的 IAM 許可權限和角色](lambda-edge-permissions.md)。

## Lambda 功能
<a name="lambda-at-edge-restrictions-features"></a>

Lambda@Edge 不支援下列 Lambda 函數：
+ **自動** (預設值) 以外的 [Lambda 執行時期管理組態](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-update.html#runtime-management-controls)。
+ 用於存取您 VPC 中的資源的 Lambda 函數組態
+ [Lambda 函數無效字母佇列](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html#dlq)
+ [Lambda 環境變數](https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html) (自動支援預留環境變數除外)
+ [透過圖層管理 AWS Lambda 相依項](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html)的 Lambda 函數
+ [使用 AWS X-Ray](https://docs.aws.amazon.com/lambda/latest/dg/lambda-x-ray.html)
+ Lambda 佈建並行
**注意**  
Lambda@Edge 函數與所有 Lambda 函數共用相同的[區域並行](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html)功能。如需詳細資訊，請參閱[Lambda@Edge 的配額](cloudfront-limits.md#limits-lambda-at-edge)。
+ [使用容器映像建立 Lambda 函數](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html)
+ [使用 arm64 架構的 Lambda 函數](https://docs.aws.amazon.com/lambda/latest/dg/foundation-arch.html)
+ 具有超過 512 MB 暫時性儲存的 Lambda 函數
+ 使用[客戶自管金鑰以加密您的 .zip 部署套件](https://docs.aws.amazon.com/lambda/latest/dg/encrypt-zip-package.html)

## 支援的執行時期
<a name="lambda-at-edge-restrictions-runtime"></a>

Lambda@Edge 支援最新版本的 Node.js 和 Python 執行時期。如需支援版本及其未來棄用日期的清單，請參閱《AWS Lambda 開發人員指南》**中的[支援的執行時期](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html#runtimes-supported)。

**提示**  
依照最佳實務，請使用所提供的最新版本執行時期，以獲得效能提升與新功能。
您無法使用棄用的 Node.js 版本來建立或更新函數。您只能將現有函數與這些版本與 CloudFront 分佈建立關聯。使用此版本且與分佈相關聯的函數會繼續執行。不過，建議您將函數移至更新版本的 Node.js。如需詳細資訊，請參閱《AWS Lambda 開發人員指南》**中的[執行時期支援政策](https://docs.aws.amazon.com/lambda/latest/dg/runtime-support-policy.html)和 GitHub 上的 [Node.js 發行排程](https://github.com/nodejs/Release#release-schedule)。

## CloudFront 標頭
<a name="lambda-at-edge-restrictions-cloudfront-headers"></a>

Lambda@Edge 函數可以讀取、編輯、移除或新增任何列於 [新增 CloudFront 請求標頭](adding-cloudfront-headers.md) 的 CloudFront 標頭。

**備註**  
如果您希望 CloudFront 新增這些標頭，則必須將 CloudFront 設定為使用[快取政策](controlling-the-cache-key.md)或[原始伺服器請求政策](controlling-origin-requests.md)來新增標頭。
CloudFront 會在檢視器請求事件*之後*新增標頭，這表示檢視器請求中的 Lambda@Edge 函數無法使用這些標頭。標頭僅適用於原始伺服器請求和原始伺服器回應中的 Lambda@Edge 函數。
如果檢視器請求包含具有這些名稱的標頭，且您將 CloudFront 設定為使用[快取政策](controlling-the-cache-key.md)或[伺服器請求政策](controlling-origin-requests.md)來新增標頭，則 CloudFront 會覆寫檢視器請求中的標頭值。檢視器對應的函數會從檢視器請求查看標頭值，而原始伺服器對應的函數則會查看 CloudFront 新增的標頭值。
若檢視器請求函數新增 `CloudFront-Viewer-Country` 標頭，它將無法通過驗證，且 CloudFront 會向檢視器傳回 HTTP 狀態碼 502 (無效的閘道)。

## 使用包含內文選項時的要求內文限制
<a name="lambda-at-edge-restrictions-request-body"></a>

如果您選擇**包含本文**選項以向您的 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 驗證錯誤](http-502-bad-gateway.md#http-502-lambda-validation-error)) 失敗。我們建議您更新 Lambda@Edge 函數，讓本文不超過這些限制。

## 回應逾時和保持連線逾時 (僅限自訂原始伺服器)
<a name="timeout-for-lambda-edge-functions"></a>

如果您使用 Lambda@Edge 函數來設定分佈原始伺服器的回應逾時或持續作用逾時，請確認您正在指定原始伺服器可支援的值。如需詳細資訊，請參閱[回應和保持連線逾時配額](DownloadDistValuesOrigin.md#response-keep-alive-timeout-quota)。