測試函數 - Amazon CloudFront

測試函數

在將函數部署到即時階段 (生產環境) 之前,可以測試該函數以確保其運作正常。若要測試函數,您可以指定一個事件物件,代表您的 CloudFront 分佈可在生產環境中接收的 HTTP 請求或回應。

CloudFront Functions 會執行下列作業:

  1. 執行該函數,使用提供的事件物件作為函數的輸入。

  2. 返回函數的結果 (修改後的事件物件),同時返回任何函數日誌或錯誤訊息以及函數的運算利用率。如需運算使用率的詳細資訊,請參閱 了解運算利用率

注意

當您測試函數時,CloudFront 只會驗證函數執行錯誤。CloudFront 不會驗證發佈後請求是否成功通過。例如,如果您的函數刪除必要的標頭,測試將會成功,因為程式碼沒有問題。不過,如果您發佈函數並將其與分佈建立關聯,則函數會在透過 CloudFront 提出請求時失敗。

設定事件物件

在測試函數之前,您必須建立事件物件以進行測試。有幾種選項。

選項 1:設定事件物件而不儲存

您可以在 CloudFront 主控台的視覺化編輯器中設定事件物件,而不儲存該事件物件。

您可以使用此事件物件從 CloudFront 主控台測試函數,即使該函數尚未儲存也是如此。

選項 2:在視覺化編輯器中建立事件物件

您可以在 CloudFront 主控台的視覺化編輯器中設定事件物件,而不儲存該事件物件。您可以針對每個函數建立 10 個事件物件,例如,可測試不同的可能輸入。

以這種方式建立事件物件時,您可以使用事件物件,在 CloudFront 主控台中測試函數。您不能使用它來測試使用 AWS API 或 SDK 的函數。

選項 3:使用文字編輯器建立事件物件

您可以使用文字編輯器,以 JSON 格式建立事件物件。如需有關事件物件結構的詳細資訊,請參閱 事件結構

您可以使用此事件物件來測試使用 CLI 的函數。但是您無法使用它來測試 CloudFront 主控台中的函數。

建立事件物件 (選項 1 或 2)
  1. https://console.aws.amazon.com/cloudfront/v4/home#/functions 登入 CloudFront 主控台,並選擇函數頁面。

    選擇您要測試的函數。

  2. 在函數詳細資訊頁面上,選擇測試索引標籤。

  3. 針對事件類型,選擇以下其中一個選項:

    • 如果函數會根據請求修改 HTTP 請求或產生回應,請選擇檢視者請求請求區段隨即出現。

    • 選擇檢視器回應請求回應區段隨即出現。

  4. 完成您想要包含在事件中的所有欄位。您可選擇編輯 JSON 來檢視原始 JSON。

  5. (選用) 若要儲存事件,請選擇儲存,然後在儲存測試事件中輸入名稱,然後選擇儲存

    您也可以選擇編輯 JSON 並複製原始 JSON,並將其儲存在 CloudFront 之外您自己的檔案中。

建立事件物件 (選項 3)

使用文字編輯器建立事件物件。將檔案儲存於電腦可以連線的目錄中。

請確定您遵循這些準則:

  • 省略 distributionDomainNamedistributionIdrequestId 欄位。

  • 標頭、Cookie 和查詢字串的名稱必須為小寫。

以這種方式建立事件物件的一個選項是使用視覺化編輯器建立範例。您可以確定範例格式正確。然後您可以複製原始 JSON 並將其貼到文字編輯器中並儲存檔案。

如需有關事件結構的詳細資訊,請參閱 事件結構

測試函數

您可以在 CloudFront 主控台中或使用 AWS Command Line Interface (AWS CLI) 測試函數。

Console
若要測試函數
  1. https://console.aws.amazon.com/cloudfront/v4/home#/functions 登入 CloudFront 主控台,並選擇函數頁面。

  2. 選擇您要測試的函數。

  3. 選擇測試標籤。

  4. 確定已顯示正確的事件。若要從目前顯示的事件切換,請在選取測試事件欄位中選擇另一個事件。

  5. 選擇測試函數。控制台顯示函數的輸出,包括函數日誌和運算使用率。

CLI

您可以使用 aws cloudfront test-function 命令來測試函數。

若要測試函數
  1. 開啟命令列視窗。

  2. 從包含指定檔案的目錄執行下列命令。

    此範例會使用 fileb:// 標記法來傳入事件物件檔案。它還會包括換行符號,讓命令更易於讀取。

    aws cloudfront test-function \ --name MaxAge \ --if-match ETVABCEXAMPLE \ --event-object fileb://event-maxage-test01.json \ --stage DEVELOPMENT
    備註
    • 您可以透過其名稱和 ETag (在 if-match 參數中) 引用該函數。您可以依照事件物件在檔案系統中的位置來參照事件物件。

    • 此階段可以是 DEVELOPMENTLIVE

    如果命令成功執行,您會看到如下所示的輸出。

    TestResult: ComputeUtilization: '21' FunctionErrorMessage: '' FunctionExecutionLogs: [] FunctionOutput: '{"response":{"headers":{"cloudfront-functions":{"value":"generated-by-CloudFront-Functions"},"location":{"value":"https://aws.amazon.com/cloudfront/"}},"statusDescription":"Found","cookies":{},"statusCode":302}}' FunctionSummary: FunctionConfig: Comment: MaxAge function Runtime: cloudfront-js-2.0 KeyValueStoreAssociations= \ {Quantity=1, \ Items=[{KeyValueStoreARN='arn:aws:cloudfront::111122223333:key-value-store/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111'}]} \ FunctionMetadata: CreatedTime: '2021-04-18T20:38:56.915000+00:00' FunctionARN: arn:aws:cloudfront::111122223333:function/MaxAge LastModifiedTime: '2023-17-20T10:38:57.057000+00:00' Stage: DEVELOPMENT Name: MaxAge Status: UNPUBLISHED
備註
  • FunctionExecutionLogs 包含函數在 console.log() 語句中撰寫的日誌行清單 (如果有的話)。

  • ComputeUtilization 包含執行函數的相關資訊。請參閱 了解運算利用率

  • FunctionOutput 包含該函數返回的事件物件。

了解運算利用率

運用利用率是指執行函數所花費的時間,以所允許時間上限的百分比表示。例如,35 的值表示該函數以所允許時間上限的 35% 完成。

如果某個函數持續時間,超過允許時間上限,則 CloudFront 會將該函數限流。下列清單說明,根據運算利用率的值,函數限流的可能性。

運算利用率值:

  • 1 — 50—函數遠低於允許時間上限,應不會受到限流。

  • 51 — 70—函數接近允許時間上限。考慮將函數程式碼最佳化。

  • 71 — 100—函數非常接近或超過允許時間上限。如果您將此函數與分佈產生關聯,CloudFront 很有可能會將此函數限流。