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

测试函数

要测试函数,您需要提供一个事件对象,该对象表示 CloudFront 分配可能在生产环境中接收的 HTTP 请求或响应。CloudFront Functions 执行以下操作:

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

  2. 返回函数的结果(修改后的事件对象)和任何函数日志或错误消息以及函数的计算利用率。计算利用率是介于 0 到 100 之间的数字,表示函数运行所花费的时间占最大允许时间的百分比。例如,计算利用率为 35 表示函数在最大允许时间的 35% 内完成。

在测试函数之前,必须创建用于测试函数的事件对象。要创建事件对象,您可以使用以下选项:

  • 使用 CloudFront 控制台中的可视化编辑器。使用可视化编辑器,您可以使用图形界面创建事件对象,然后使用它们来测试函数。创建事件对象后,您还可以复制事件对象的 JSON 表示形式,以便通过 Amazon CLI 或 CloudFront API 等其他界面测试函数。有关更多信息,请参阅测试函数处的控制台选项卡。

  • 以 JSON 格式手动编写事件对象。有关事件对象结构的更多信息,请参阅事件结构

    注意

    创建用于测试函数的事件对象时,您可以省略 distributionDomainNamedistributionIdrequestId 字段。此外,请确保标头、Cookie 和查询字符串的名称为小写。

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

Console

在 CloudFront 控制台中,您可以使用图形界面(可视化编辑器)创建和保存事件对象,然后使用它们测试函数。您还可以复制事件对象的 JSON 表示形式,用于通过其他界面测试函数。

要创建事件对象并测试函数(控制台)
  1. 如果您尚未执行此操作,请按照步骤创建函数

    要测试函数,请通过以下网址在 CloudFront 控制台中打开函数 页面:https://console.amazonaws.cn/cloudfront/v3/home#/functions,然后选择您想要测试的函数。

  2. 在函数页面上,选择测试选项卡。然后执行以下操作:

    1. 选择事件类型。如果您的函数修改了请求或根据请求生成了响应,请选择查看器请求。如果它修改了响应,请选择查看器响应

    2. 选择要测试的函数的阶段开发实时

    
                                CloudFront 函数的测试选项卡。
  3. 向下滚动以使用控制台的可视化编辑器创建表示要测试的 HTTP 请求或响应的事件对象。当您为事件类型选择查看器响应时,可视化编辑器会添加字段,以便您可以测试响应。

    对于请求,您可以选择请求方法,然后输入 URI 路径和客户端 IP 地址。要添加查询字符串或请求标头,请输入键和值,然后选择添加

    对于响应,您可以添加响应标头并输入响应状态代码和状态描述。

    要查看事件对象的 JSON 表示形式,请选择 JSON 选项卡。您可以复制事件对象的 JSON 表示形式,以便通过 Amazon CLI 或 CloudFront API 等其他界面测试函数。

    下图显示了同一测试事件的可视化编辑器和 JSON 视图。

    
                                可视化编辑器中的 CloudFront 函数的示例测试事件。
    
                                JSON 编辑器中的 CloudFront 函数的示例测试事件。
  4. 要使用您创建的事件对象测试函数,请选择测试事件。控制台显示测试的输出,包括函数日志、查询字符串以及请求(和响应,如果适用)中的标头和 Cookie。它还显示了计算利用率,计算利用率是介于 0 到 100 之间的数字,表示函数运行所花费的时间占最大允许时间的百分比。例如,计算利用率为 35 表示函数在最大允许时间的 35% 内完成。有关更多信息,请参阅了解计算利用率

CLI

创建事件对象后,您可以使用它在 aws cloudfront test-function 中通过 Amazon CLI 命令来测试函数,如以下示例所示。此示例命令使用输入文件 (event-object.json) 向命令提供事件对象。以下是 event-object.json 文件中用于测试的简单事件对象的示例。

{ "version": "1.0", "context": { "eventType": "viewer-request" }, "viewer": { "ip": "198.51.100.11" }, "request": { "method": "GET", "uri": "/example.png", "headers": { "host": {"value": "example.org"} } } }

要使用以下示例命令,请执行以下操作:

  • ExampleFunction 替换为要测试的函数的名称。

  • ETVABCEXAMPLE 替换为您在测试其代码的函数的 ETag 值。要获取此值,您可以使用 aws cloudfront describe-function 命令。

  • event-object.json 替换为包含用于测试函数的事件对象的文件的名称。从包含此文件的同一目录运行命令。

  • 以下命令在 DEVELOPMENT 阶段测试函数。如果您想要在 LIVE 阶段测试函数,则将 DEVELOPMENT 替换为 LIVE

  • 在一行上运行该命令。在示例中,提供换行符以使示例更具可读性。

aws cloudfront test-function \ --name ExampleFunction \ --if-match ETVABCEXAMPLE \ --event-object fileb://event-object.json --stage DEVELOPMENT

命令成功后,您会看到如下所示的输出,显示了测试函数的结果。

请注意有关输出的以下内容:

  • FunctionSummary描述了被测试的函数。

  • FunctionExecutionLogs 包含函数在 console.log() 语句中写入的日志行列表(如果有)。

  • ComputeUtilization 包含介于 0 到 100 之间的数字,表示函数运行所花费的时间占最大允许时间的百分比。例如,计算利用率为 35 表示函数在最大允许时间的 35% 内完成。有关更多信息,请参阅了解计算利用率

  • 如果函数失败,则 FunctionErrorMessage 包含错误消息。

  • FunctionOutput 包含函数返回的事件对象。以下输出显示函数返回了一个带有 HTTP 状态代码 302 (Found) 的响应、一个值为 Locationhttps://aws.amazon.com/cloudfront/ 标头,一个值为 Cloudfront-Functionsgenerated-by-CloudFront-Functions 标头。

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: Example function Runtime: cloudfront-js-1.0 FunctionMetadata: CreatedTime: '2021-04-18T20:38:56.915000+00:00' FunctionARN: arn:aws:cloudfront::111122223333:function/ExampleFunction LastModifiedTime: '2021-04-18T20:38:57.057000+00:00' Stage: DEVELOPMENT Name: ExampleFunction Status: UNPUBLISHED

了解计算利用率

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

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

计算利用率值:

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

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

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