本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Lambda@Edge 在边缘进行自定义
Lambda@Edge 是 Amazon Lambda 的扩展。Lambda @Edge 是一项计算服务,可让您执行自定义所交付内容的 CloudFront 函数。您可以在一个区域(美国东部(弗吉尼亚州北部))中编写 Node.js 或 Python 函数,然后在与查看器较为接近的全球 Amazon 位置执行它们,而无需预置或管理服务器。Lambda@Edge 会自动扩展,从每天几个请求到每秒数千个请求。在与查看器较为接近 Amazon 位置 (而不是源服务器) 上处理请求,可显著减少延迟并改善用户体验。
当您将 CloudFront 分配与 Lambda @Edge 函数关联时,会在边缘 CloudFront 位置拦截请求和响应。 CloudFront CloudFront 发生以下事件时,您可以执行 Lambda 函数:
-
当 CloudFront 收到观众的请求时(观看者请求)
-
在将请求 CloudFront 转发到源站之前(源请求)
-
当 CloudFront 收到来自来源的响应(源站响应)时
-
Before 向查看者 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 函数示例。