决定使用哪个 CloudFront 事件来触发 Lambda@Edge 函数 - Amazon CloudFront
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

决定使用哪个 CloudFront 事件来触发 Lambda@Edge 函数

当您决定使用哪个 CloudFront 事件来触发 Lambda 函数时,请考虑以下因素:

是否希望 CloudFront 缓存由 Lambda 函数更改的对象?

如果您希望 CloudFront 缓存 Lambda 函数修改的对象,以便在下次请求该对象时 CloudFront 可以从边缘站点中提供该对象,请使用源请求或源响应事件。这样可减少源上的负载、减少后续请求的延迟,并降低对后续请求调用 Lambda@Edge 的成本。

例如,如果要添加、删除或更改由源返回的对象的标头,并且希望 CloudFront 缓存结果,请使用源响应事件。

是否希望该函数针对每个请求执行?

如果您希望该函数针对 CloudFront 为分配接收的每个请求执行,请使用查看器请求或查看器响应事件。只有在未将请求的对象缓存在边缘站点中且 CloudFront 将请求转发到源时,才会发生源请求和源响应事件。

该函数是否会更改缓存键?

如果您希望该函数更改您要用作缓存基础的值,请使用查看器请求事件。例如,如果某个函数将 URL 更改为在路径中包含语言缩写 (例如,由于用户从下拉列表中选择了其语言),请使用查看器请求事件:

  • 查看器请求中的 URL – https://example.com/en/index.html

  • 在请求来自德国的一个 IP 地址时的 URL – https://example.com/de/index.html

如果您要根据 Cookie 或请求标头缓存,则也使用查看器请求事件。

注意

如果该函数更改 Cookie 或标头,则将 CloudFront 配置为将请求的适用部分转发到源。有关更多信息,请参阅以下主题:

该函数是否会影响来自源的响应?

如果希望该函数以会影响来自源的响应的方式更改请求,请使用源请求事件。通常,大多数查看器请求事件都不会被转发到源;CloudFront 使用已在边缘缓存中的对象来响应请求。如果该函数基于源请求事件更改请求,则 CloudFront 会缓存对更改的源请求的响应。