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