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

测试函数

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

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

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

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

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

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

    注意

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

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

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

要创建事件对象并测试函数(控制台)

  1. 如果您尚未执行此操作,请按照步骤创建函数

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

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

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

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

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

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

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

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

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

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

创建事件对象后,您可以使用它在 Amazon CLI 中通过 aws cloudfront test-function 命令来测试函数,如以下示例所示。此示例命令使用输入文件 (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

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

注意

以下输出格式为 YAML 字符串。此功能只能用于 Amazon CLI 版本 2。有关更多信息,请参阅 Amazon Command Line Interface 用户指南中的设置 Amazon CLI 输出格式

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

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

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

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

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

  • FunctionOutput 包含函数返回的事件对象。以下输出显示函数返回了一个带有 HTTP 状态代码 302 (Found) 的响应、一个值为 https://aws.amazon.com/cloudfront/Location 标头,一个值为 generated-by-CloudFront-FunctionsCloudfront-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