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