Amazon CloudFront
开发员指南 (API 版本 2016-09-29)

使用 Lambda@Edge 在边缘站点自定义内容

Lambda@Edge 是 AWS Lambda 的扩展,后者是一种计算服务,可让您执行函数以自定义 CloudFront 提供的内容。您可以在一个区域中编写函数,然后在与查看器较为接近的全球 AWS 位置执行它们,而无需预置或管理服务器。Lambda@Edge 会自动扩展,从每天几个请求到每秒数千个请求。在与查看器较为接近 AWS 位置 (而不是源服务器) 上处理请求,可显著减少延迟并改善用户体验。

当您将 CloudFront 分配与 Lambda@Edge 函数关联时,CloudFront 会在 CloudFront 边缘站点截获请求和响应。您可以在发生以下 CloudFront 事件时执行 Lambda 函数:

  • 当 CloudFront 收到查看器的请求时 (查看器请求)

  • 在 CloudFront 将请求转发到源之前 (源请求)

  • 当 CloudFront 收到来自源的响应之后 (源响应)

  • 在 CloudFront 将响应返回到查看器之前 (查看器响应)

Lambda@Edge 处理有很多用途。例如:

  • Lambda 函数可检查 Cookie 并重写 URL,以便用户可看到不同版本的站点以进行 A/B 测试。

  • CloudFront 可通过检查 User-Agent 标头来基于查看器使用的设备将不同的对象返回到查看器,该标头包含有关这些设备的信息。例如,CloudFront 可基于不同图像所在的设备的屏幕尺寸返回这些图像。同样,函数可考虑 Referer 标头的值,并使 CloudFront 将图像返回到具有最低的可用分辨率的自动程序。

  • 或者,您也可以检查 Cookie 中是否有其他条件。例如,在出售服装的零售网站上,如果您使用 Cookie 来指示用户选择了哪种颜色的夹克,Lambda 函数可更改相应请求,以便 CloudFront 返回选定颜色的夹克的图像。

  • 当发生 CloudFront 查看器请求或源请求事件时,Lambda 函数可生成 HTTP 响应。

  • 函数可检查标头或授权令牌,并在 CloudFront 将请求转发到您的源之前插入一个标头以控制对您的内容的访问。

  • Lambda 函数还可以向外部资源发出网络调用,以确认用户凭证,或获取更多内容来自定义响应。

有关示例代码和更多示例,请参阅 Lambda@Edge 示例函数