Lambda@Edge 是一个 AWS Lambda 扩展,后者是一个计算服务,可用于执行函数以自定义 CloudFront 提供的内容。您可以在一个区域(US-East-1(弗吉尼亚北部))中编写 Node.js 或 Python 函数,然后在与查看器较为接近的全球 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 函数还可以向外部资源发出网络调用,以确认用户凭证,或获取更多内容来自定义响应。