確定函數的用途 - Amazon CloudFront

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

確定函數的用途

在撰寫函數程式碼之前,請先確定函數的用途。CloudFront Functions 中的大多數函數都具有以下用途之一。

無論函數的用途如何,handler 都是任何函數的入口點。它採用一個稱為 event 的參數,該參數由 CloudFront 傳遞給函數。event 是一個 JSON 對象,其中包含 HTTP 請求的表示 (以及回應,前提是您的函數修改了 HTTP 回應)。

修改檢視器請求事件類型中的 HTTP 請求

您的函數可以修改 CloudFront 從檢視者 (用戶端) 接收的 HTTP 請求,並將修改後的請求返回給 CloudFront 以繼續處理。例如,您的函數程式碼可能會標準化快取金鑰或修改請求標頭。

建立及發布修改 HTTP 請求的函數時,請務必新增檢視器請求事件類型的關聯。如需詳細資訊,請參閱建立函數。這會使 CloudFront 每次收到來自檢視器的請求時執行該函數,然後再檢視請求的物件是否位於 CloudFront 快取中。

範例

下面的虛擬程式碼顯示了修改 HTTP 請求的函數結構。

function handler(event) { var request = event.request; // Modify the request object here. return request; }

該函數將修改後的 request 物件返回到 CloudFront。CloudFront 會按如下方式繼續處理返回的請求:檢查 CloudFront 快取以取得快取命中率,並在必要時將請求傳送至來源。

在檢視器請求事件類型中產生 HTTP 回應

您的函數可以在邊緣產生 HTTP 回應,並直接將其返回給檢視者 (用戶端),而無需檢查快取的回應,也無需 CloudFront 進一步處理。例如,您的函數程式碼可能會將請求重新導向至新的 URL,或檢查授權並將 401403 回應返回給未經授權的請求。

建立產生 HTTP 回應的函數時,請務必選擇檢視者請求事件類型。這表示 CloudFront 每次收到來自檢視者的請求時,該函數就會執行,然後 CloudFront 才進一步處理請求。

範例

下面的虛擬程式碼顯示了產生 HTTP 回應的函數結構。

function handler(event) { var request = event.request; var response = ...; // Create the response object here, // using the request properties if needed. return response; }

該函數將 response 物件返回到 CloudFront,CloudFront 立即將其返回給檢視者,而無需檢查 CloudFront 快取或將請求傳送至來源。

在檢視者回應事件類型中修改 HTTP 回應

您的函數可以在 CloudFront 將其發送給檢視者 (用戶端) 之前修改 HTTP 回應,無論該回應來自 CloudFront 快取還是來源。例如,您的函數代碼可能會新增或修改回應標頭、狀態碼,與本文內容。

建立可修改 HTTP 回應的函數時,請務必選擇檢視者回應事件類型。這表示無論回應是來自 CloudFront 快取還是來源,此函數都會在 CloudFront 將回應返回給檢視者之前執行。

範例

下面的虛擬程式碼顯示了修改 HTTP 回應的函數結構。

function handler(event) { var request = event.request; var response = event.response; // Modify the response object here, // using the request properties if needed. return response; }

該函數將修改後的 response 物件返回到 CloudFront,CloudFront 立即將其返回給檢視者。

驗證連線請求事件類型的 mTLS 連線

連線函數是一種在 TLS 連線期間執行的 CloudFront 函數類型,可提供自訂驗證和身分驗證邏輯。連線函數目前可用於交互 TLS (mTLS) 連線,您可以在其中驗證用戶端憑證,並實作超出標準憑證驗證的自訂身分驗證邏輯。在 TLS 交握程序期間執行的連線函數,可以根據憑證屬性、用戶端 IP 地址或其他條件允許或拒絕連線。

建立和發佈連線函數之後,請務必為啟用 mTLS 的 分佈新增連線請求事件類型的關聯。這可讓函數在每次用戶端嘗試與 CloudFront 建立 mTLS 連線時執行。

範例

下列虛擬程式碼顯示連線函數的結構:

function connectionHandler(connection) { // Validate certificate and connection properties here. if (/* validation passes */) { connection.allow(); } else { connection.deny(); } }

函數使用協助程式方法來判斷是否允許或拒絕連線。與檢視器請求和檢視器回應函數不同,連線函數無法修改 HTTP 請求或回應。

如需使用 CloudFront Functions 的詳細資訊,請參閱下列主題: