测试函数 - Amazon CloudFront
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

测试函数

在将 CloudFront Functions 部署到实时阶段(生产)之前,您可以先对该函数进行测试以确保其按预期运行。要测试函数,您需要提供一个事件对象,该对象表示 CloudFront 分配可能在生产环境中接收的 HTTP 请求或响应。CloudFront Functions 执行以下操作:

  1. 将提供的事件对象作为输入来运行函数。

  2. 返回函数的结果(修改后的事件对象)和任何函数日志或错误消息以及函数的计算利用率。有关计算利用率的更多信息,请参阅了解计算利用率

设置事件对象

在测试函数之前,必须设置用于测试函数的事件对象。有多种选择。

选项 1:在不保存的情况下设置事件对象

您可以在 CloudFront 控制台的可视化编辑器中设置事件对象,而不将其保存。

您可以使用此事件对象从 CloudFront 控制台测试该函数,即使未保存该对象。

选项 2:在可视化编辑器中创建事件对象

您可以在 CloudFront 控制台的可视化编辑器中设置事件对象,而不将其保存。您可以为每个函数创建 10 个事件对象,以便您可以测试不同的可能输入。

以这种方式创建事件对象时,您可以使用事件对象在 CloudFront 控制台中测试该函数。您不能使用它通过 Amazon API 或 SDK 来测试函数。

选项 3:使用文本编辑器创建事件对象

您可以使用文本编辑器以 JSON 格式创建事件对象。有关事件对象结构的信息,请参阅事件结构

您可以使用此事件对象通过 CLI 测试函数。但不能使用它在 CloudFront 控制台中测试函数。

使用选项 1 或 2 创建
  1. 在 CloudFront 控制台中显示函数页面,然后选择要测试的函数。

  2. 在函数详细信息页面上,选择测试选项卡。将显示测试函数部分,其中包含包括编辑 JSON测试函数的按钮。

  3. 填写事件类型

    • 如果您的函数修改了 HTTP 请求或根据请求生成了响应,请选择查看器请求。已显示的请求部分适用于此类型。

    • 或者选择查看器响应。已显示的请求部分适用于此类型。此外,还会出现响应部分。

  4. 填写您希望在事件中包含的所有字段。处理时,您可以选择编辑 JSON 来查看原始 JSON。

  5. 如果需要,请保存事件。

    您也可以选择编辑 JSON 并复制原始 JSON,然后将其保存在 CloudFront 之外您自己的文件中。

使用选项 3 创建

使用文本编辑器创建事件对象。将文件存储在计算机可以连接到的目录中。

务必遵循以下指导原则:

  • 忽略 distributionDomainNamedistributionIdrequestId 字段。

  • 确保标头、Cookie 和查询字符串的名称为小写。

以这种方式创建事件对象的一个选项是使用可视化编辑器创建示例。您可以确保示例的格式正确。然后,您可以复制原始 JSON,并将其粘贴到文本编辑器中,然后保存文件。

有关事件的结构的详细信息,请参阅事件结构

测试此函数

您可以在 CloudFront 控制台中或使用 Amazon CLI 测试函数。

Console

在 CloudFront 控制台中,您可以测试使用控制台创建的函数。

测试此函数
  1. 在 CloudFront 控制台中显示函数页面,然后选择要测试的函数。

  2. 在函数页面上,选择测试选项卡。将显示测试函数部分,其中包含包括编辑 JSON测试函数的按钮。

  3. 确保显示了正确的事件。

    如果要从当前显示的事件切换,请在选择测试事件字段中选择另一个事件。

  4. 选择测试函数按钮。控制台将显示函数的输出,包括函数日志。它还显示了计算利用率。有关更多信息,请参阅 了解计算利用率

CLI

您可以使用 aws cloudfront test-function 命令测试函数。

  1. 运行该命令,如示例所示。从包含此文件的同一目录运行命令。

    此示例使用 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::1: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 包含函数返回的事件对象。

了解计算利用率

Compute utilization(计算利用率)是函数运行所花费的时间占最大允许时间的百分比。例如,值为 35 表示函数在最大允许时间的 35% 内完成。

如果函数持续超过最大允许时间,CloudFront 将限制该函数。以下列表说明了函数根据计算利用率值受到限制的可能性。

计算利用率值:

  • 1 – 50 – 该函数远低于最大允许时间,应在不受限制的情况下运行。

  • 51 – 70 – 函数正在接近最大允许时间。考虑优化函数代码。

  • 71 – 100 – 函数非常接近或超过最大允许时间。如果您将此函数与分配关联,CloudFront 可能会限制此函数。