CloudFront 可以觸發 @Edge 函數的事件 - Amazon CloudFront

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

CloudFront 可以觸發 @Edge 函數的事件

對於 Amazon CloudFront 分發中的每個快取行為,您最多可以新增四個觸發器 (關聯),這些觸發器會在特定 CloudFront事件發生時執行 Lambda 函數。 CloudFront 觸發器可以基於四個 CloudFront 事件之一,如下圖所示。

顯示 Lambda 函數 CloudFront 觸發事件如何與之整合的概念圖形 CloudFront。

可用來觸發 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 函數的請求都會增加請求的延遲,因此您希望函數盡可能快地執行。