如何决定使用哪个 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 想要缓存结果,请使用 origin 响应事件。

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

如果您希望对 CloudFront 收到的分配请求执行该函数,请使用查看者请求或查看者响应事件。仅当请求的对象未缓存在边缘位置并将请求 CloudFront 转发到源站时,才会发生源请求和源站响应事件。

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

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

  • 查看者请求中的网址 — https://example.com/en/index.html

  • 请求来自德国 IP 地址时的网址 — https://example.com/de/index.html

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

注意

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

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

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