測試函數 - 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. 在 登入 CloudFront 主控台https://console.aws.amazon.com/cloudfront/v4/home#/functions,然後選擇函數頁面。

    選擇您要測試的函數。

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

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

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

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

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

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

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

建立事件物件 (選項 3)

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

確認您遵循下列準則:

  • 省略 distributionDomainNamedistributionIdrequestId 欄位。

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

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

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

測試函數

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

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

  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 很有可能會將此函數限流。