我將 AWS Lambda@Edge 函數與 Amazon CloudFront 分發進行關聯。現在我收到了 500、502 或 503 錯誤。我該如何對此錯誤進行疑難排解?
簡短描述
Lambda@Edge 500、502 和 503 錯誤表示以下情況:
-
HTTP 500 狀態碼表示 Lambda 函數傳回執行錯誤。
-
HTTP 502 狀態碼表示 Lambda 函數回應的格式不正確或包含無效的內容。
-
HTTP 503 狀態碼表示 CloudFront 因為 Lambda 服務配額 (先前稱為限制) 而遭到限流。
請參閱以下章節以了解錯誤的原因以及如何對其進行疑難排解。
解決方案
Lambda@Edge 函數傳回 500 錯誤
當 CloudFront 未從 Lambda 取得回應時,就會產生 500 執行錯誤。發生這種情況是因為函數中有未處理的例外情況、程式碼中存在錯誤,或者是不支援的執行環境。
若要解決 Lambda@Edge 產生的 500 錯誤,您必須新增 Lambda 函數的日誌記錄陳述式來進行程式碼偵錯。若要進一步了解,請參閱在 AWS 上進行內容交付偵錯的四個步驟,並檢閱 I – 執行錯誤下的資訊。這些日誌記錄陳述式會將訊息寫入監控 CloudFront 函數執行情況的 CloudWatch 日誌檔案中。您可以在 CloudWatch 日誌檔案中檢閱這些陳述式,以確認函數是否正常運作。
如需詳細資訊,請參閱 Node.js 中的 Lambda 函數錯誤和 Python 中的 Lambda 函數錯誤。
Lambda@Edge 函數傳回 502 錯誤
函數執行後,CloudFront 會收到來自 Lambda 的回應。如果回應的物件結構不符合 Lambda@Edge 事件結構,就會傳回 502 錯誤。如果回應包含無效的標頭或其他無效欄位,也會傳回 502 錯誤。
若要解決 Lambda@Edge 產生的 502 錯誤,請檢查 Lambda@Edge 函數中是否有以下常見問題:
- 傳回的 JSON 物件
- 缺少必要欄位
- 回應具有無效的物件
- 不允許的新增或更新,或有唯讀標頭
- 超過本文大小上限
- 字元或值無效
如需詳細資訊,請參閱 測試和偵錯 Lambda@Edge 函數和邊緣函數的限制。
Lambda@Edge 函數傳回 503 錯誤
Lambda 服務會對每個區域的執行進行限流,如果超出配額,就會傳回 503 錯誤。
若要解決 503 錯誤,請檢查 Lambda@Edge CloudWatch 指標和日誌檔案中是否有以下常見問題:
如需詳細資訊,請參閱 Lambda@Edge 配額。
注意: 您必須檢閱正確區域中的 CloudWatch 日誌檔案,以查看 CloudFront 執行 Lambda 函數時建立的日誌檔案。
相關資訊
Lambda@Edge 設計最佳實務