本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
可以觸發 Lambda@Edge 函數的 CloudFront 事件
對於 Amazon CloudFront 分佈中的每個快取行為,您最多可以新增四個觸發 (關聯),以便在特定 CloudFront 事件發生時導致 Lambda 函數執行。CloudFront 觸發條件可以根據四個 CloudFront 事件之一,如下圖所示。

可用於觸發 Lambda@Edge 函數的 CloudFront 事件如下:
- 檢視者請求
-
函數會在 CloudFront 接獲檢視器請求時執行,然後再檢視請求的物件是否位在 CloudFront 快取。
函數不在以下情況執行:
-
擷取自訂錯誤頁面時。
-
當 CloudFront 自動將 HTTP 請求重新導向至 HTTPS 時 (當 的值檢視器通訊協定政策是將 HTTP 重新導向至 HTTPS 時)。
-
- 原始伺服器請求
-
函數只在 CloudFront 將請求轉傳到您的原始伺服器時執行。如果請求的物件在 CloudFront 快取中,則不會執行該函數。
- 原始伺服器回應
-
函數會在 CloudFront 接獲原始伺服器回應後執行,然後才快取回應中的物件。請注意,即使原始伺服器傳回錯誤,函數仍會執行。
函數不在以下情況執行:
-
當請求的檔案在 CloudFront 快取中,並且未過期。
-
當回應是從原始伺服器請求事件觸發的函數所產生。
-
- 檢視者回應
-
函數會在請求的檔案傳回給檢視器之前執行。請注意,無論檔案是否已在 CloudFront 快取中,函數皆會執行。
函數不在以下情況執行:
-
當原始伺服器傳回 HTTP 狀態碼 400 或更高版本。
-
當傳回自訂錯誤頁面。
-
當回應是被檢視器請求事件觸發的函數所產生。
-
當 CloudFront 自動將 HTTP 請求重新導向至 HTTPS 時 (當 的值檢視器通訊協定政策是將 HTTP 重新導向至 HTTPS 時)。
-
當您新增多個觸發條件至相同的快取行為時,可將其用於針對每個觸發條件執行相同或不同的函數。您也可以將相同的函數與一個以上的分佈建立關聯。
注意
當 CloudFront 事件觸發 Lambda 函數的執行時,函數必須先完成,CloudFront 才能繼續。
例如,當 Lambda 函數是由 CloudFront 檢視器請求事件觸發時,CloudFront 在 Lambda 函數執行完畢之前不會將回應傳回給檢視器或轉送請求給原始伺服器。
這表示觸發 Lambda 函數的每個請求都會增加請求的延遲,因此您希望函數盡快執行。