Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
测试函数
要测试函数,您需要提供一个事件对象,该对象表示 CloudFront 分配可能在生产环境中接收的 HTTP 请求或响应。CloudFront Functions 执行以下操作:
-
将提供的事件对象作为函数的输入来运行函数。
-
返回函数的结果(修改后的事件对象)和任何函数日志或错误消息以及函数的计算利用率。计算利用率是介于 0 到 100 之间的数字,表示函数运行所花费的时间占最大允许时间的百分比。例如,计算利用率为 35 表示函数在最大允许时间的 35% 内完成。
在测试函数之前,必须创建用于测试函数的事件对象。要创建事件对象,您可以使用以下选项:
您可以在 CloudFront 控制台中或使用 Amazon CLI 测试函数。
- Console
-
在 CloudFront 控制台中,您可以使用图形界面(可视化编辑器)创建和保存事件对象,然后使用它们测试函数。您还可以复制事件对象的 JSON 表示形式,用于通过其他界面测试函数。
要创建事件对象并测试函数(控制台)
-
如果您尚未执行此操作,请按照步骤创建函数。
要测试函数,请通过以下网址在 CloudFront 控制台中打开函数 页面:https://console.amazonaws.cn/cloudfront/v3/home#/functions,然后选择您想要测试的函数。
-
在函数页面上,选择测试选项卡。然后执行以下操作:
-
选择事件类型。如果您的函数修改了请求或根据请求生成了响应,请选择查看器请求。如果它修改了响应,请选择查看器响应。
-
选择要测试的函数的阶段,开发或实时。
-
向下滚动以使用控制台的可视化编辑器创建表示要测试的 HTTP 请求或响应的事件对象。当您为事件类型选择查看器响应时,可视化编辑器会添加字段,以便您可以测试响应。
对于请求,您可以选择请求方法,然后输入 URI 路径和客户端 IP 地址。要添加查询字符串或请求标头,请输入键和值,然后选择添加。
对于响应,您可以添加响应标头并输入响应状态代码和状态描述。
要查看事件对象的 JSON 表示形式,请选择 JSON 选项卡。您可以复制事件对象的 JSON 表示形式,以便通过 Amazon CLI 或 CloudFront API 等其他界面测试函数。
下图显示了同一测试事件的可视化编辑器和 JSON 视图。
-
要使用您创建的事件对象测试函数,请选择测试事件。控制台显示测试的输出,包括函数日志、查询字符串以及请求(和响应,如果适用)中的标头和 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)
的响应、一个值为 Location
的 https://aws.amazon.com/cloudfront/
标头,一个值为 Cloudfront-Functions
的 generated-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 可能会限制此函数。