AWS Lambda@Edge

云眼About 8 min

AWS Lambda@Edge

GitHub 上托管的初学者工具包open in new window,用于使用 AWS Lambda 和 AWS CloudFront 在 AWS Lambda@Edge 函数open in new window上运行 云眼灰度发布(特性标帜) 灰度发布(特性标帜)和实验。

AWS Lambda@Edge

Lambda@Edge 是 AWS Lambda 的扩展,AWS Lambda 是一种计算服务,可让开发者执行自定义 CloudFront 提供的内容的功能。

Lambda@Edge的优势

  • 速度 – 借助 CloudFront 减少的延迟,将计算位置扩展到更靠近用户的位置。

  • 成本 – 整合请求并消除 AWS 源的转出费用。

  • 安全性 – 通过 AWS 标准防护提高抵御 DDOS 攻击的安全性。

AWS Lambda@Edge使用案例

可以构建各种解决方案,例如:

  • 检查 Cookie 以将网址重写为网站的不同变体以进行实验。

  • 根据 User-Agent 标头向用户发送不同的对象,该标头包含有关提交请求的设备的信息。例如,可以根据用户的设备将不同分辨率的图像发送给用户。

  • 检查标头或授权令牌,插入相应的标头并允许访问控制,然后再将请求转发到源。

  • 添加、删除和修改标头,并重写 URL 路径,以将用户定向到缓存中的不同对象。

  • 生成新的 HTTP 响应以执行诸如将未经身份验证的用户重定向到登录页面或直接从边缘创建和交付静态网页等操作。有关更多信息,请参阅 Amazon CloudFront 开发人员指南 中的使用 Lambda 函数生成对查看器和源请求的 HTTP 响应open in new window

在此初学者工具包中,我们利用Lambda@Edge调用云眼灰度发布(特性标帜)AB实验数据文件,并通过检查 cookie 的值,根据传入的用户 ID 决定是启用还是禁用灰度发布(特性标帜)。EYEOFCLOUD_USER_ID

AWS Lambda@Edge限制和限制

  • 使用Lambda@Edge有一些限制。请阅读官方文档open in new window以获取最新详细信息。

  • 截至 2022 年 50 月,Lambda@Edge包的最大压缩大小对于源事件不能超过 1MB,对于查看器事件不能超过 <>MB。

进一步的注意事项

云眼 + AWS Lambda@Edge初学者工具包

适用于 AWS Lambda@Edge的 云眼 功能实验初学者工具包嵌入并扩展了我们的 Javascript 开发工具包,提供一个起点,以便为边缘体验实施实验和功能标记。有关更普遍地开始使用我们的平台的指南,可以将其与 Javascript 快速入门中概述的步骤结合使用。

📘 注意

这个入门工具包使用了我们的Javascript SDK for Node.js的“精简”变体。

外部数据获取和缓存

此初学者工具包使用标准的 ES7 异步/等待提取方法来处理外部数据获取。获取云眼灰度发布(特性标帜)AB实验数据文件后,数据文件本身将作为 JSON 对象缓存在内存中。大型数据文件可能会导致初学者工具包中介绍的此方法中断。如果遇到大型数据文件中断内存中 Lambda 缓存的问题,可以考虑本文中概述open in new window的具有Lambda@Edge缓存的替代方法之一。

内存中数据缓存的替代方法包括使用与数据文件 JSON 的持久连接或通过 CloudFront 进行缓存。

为了更快地获取数据,可以将数据文件存储在您拥有的 S3 分桶中,并重构数据文件提取机制以使用 Lambda 的内置 AWS 开发工具包库,改为从 S3 分桶中提取数据。

📘 注意

其他缓存机制可通过 CloudFront 分配的配置使用。

身份管理

开箱即用,云眼 的功能实验 SDK 要求在运行时传入用户提供的标识符,以推动实验和灰度发布(特性标帜)决策。如果客户端未直接提供用户 ID,则此初学者工具包会生成唯一 ID 作为回退,将其存储到 Cookie 中并重复使用它以确保每个用户会话的决策具有粘性。或者,可以使用应用程序中可用的现有唯一标识符,并将其作为 Cookie 的值传入。EYEOFCLOUD_USER_ID

分桶

有关 云眼 功能实验 SDK 如何将用户分配到灰度发布(特性标帜)和实验的更多信息,请参阅有关分桶工作原理的文档

如何使用

先决条件

需要完成以下先决条件才能使用此模板:

开始使用

  1. 准备好Lambda@Edge环境后,将初学者工具包从 GitHubopen in new window 克隆到本地开发环境并运行:

Shell

npm install

  1. 导航到 和 值并将其更新为相应的值 云眼 仪表板。要从 云眼 应用程序访问 SDK 密钥,请导航到设置选项卡。 src/index.js``<YOUR_SDK_KEY_HERE>``<YOUR_FLAG_HERE>

📘 注意

不能使用 Lambda@Edge 存储环境变量。在此处阅读有关限制的更多信息open in new window。如果想将开发工具包密钥注入 Lambda,这篇 StackOverflow 文章中open in new window概述了另一种方法,详细介绍了如何使用 CloudFront Origin 自定义标头作为解决方法。

  1. 通过在 的开关大小写语句中插入更改标头、Cookie 等的逻辑,挂钩到不同的生命周期事件。src/index.js
  2. 利用 云眼 的 JavaScript Lite 捆绑包来获取决策并记录事件以影响该逻辑的行为。
  3. 使用汇总将源代码捆绑到要导入到 Lambda 的整洁.zip文件中:

npm run build

📘 注意

请注意,将使用新的 dist.zip 文件生成一个文件夹。假设没有进行任何其他更改,它的大小应该大约为 ~22kb。/dist

  1. 通过 GUI 或 CLI 将函数上传到 AWS Lambda。
    1. 导航到 AWS Lambda 控制台,选择与Lambda@Edge环境关联的函数并导入文件。上传后,现在应该有一个缩小的文件位于 Lambda 函数的“代码源”部分中。 dist.zip``index.js
    2. AWS CLI:可以使用 AWS CLI 以编程方式更新 AWSopen in new window Lambda 函数。示例命令:aws lambda update-function-code --function-name my-aws-lambda-at-edge-function --zip-file fileb://dist.zip
    3. Lambda 层:如果需要其他库、自定义运行时或配置文件与 Lambda 函数一起使用,请考虑考虑使用 Lambda 层open in new window
  2. 设置 Lambda 函数后,请确保您已为其预置Lambda@Edge权限,并将其与 CloudFront 分配关联。将此函数的 CloudFront 触发器设置为“查看器请求”。

📘 注意

CloudFront 触发器仅与 Lambda 函数的一个特定变体相关联。请记住在推送新版本的 Lambda 函数时根据需要更新 CloudFront 触发器分配。例如,开发者可能需要有一个处理接收查看器请求的函数(查看器请求触发器)和一个处理向查看器返回响应的函数(查看器响应触发器)。

  1. 测试 Lambda@Edge 函数 - 应该看到它返回一个简单的主页,其中包含灰度发布(特性标帜)测试结果。万岁!

要查看初学者工具包正在完成的任务,可以转到 CloudWatch 控制台。在 > > 下,单击进入 Lambda 的日志组并查看测试。将在那里找到读取标头、分配用户 ID、获取数据文件和做出决定的整个过程。Logs``Log groups``/aws/lambda/<YOUR_LAMBDA_NAME>

📘 注意

还提供:

  • - 的略有改动的变体,这是一个概述如何返回对象而不是对象的文件。在设计仅将请求调整到源而不是返回响应的函数时,可以引用此文件。index.js``viewer_request.js``request``response
  • viewer_response.js ,这是一个从请求标头读取 cookie 并将其包含在返回响应中的文件。在适应检索从查看器请求钩子生成的用户 ID 并在查看器响应钩子中重用它时,可以引用此文件。
  1. 根据需要调整 Lambda 的配置。例如,开发者可能需要增加函数的内存、存储和超时阈值,以满足函数的需求。
  2. 从这里,可以根据需要使用云眼灰度发布(特性标帜)AB实验实验功能。可以根据实验结果修改 Cookie 和标头,向“源请求”和“源响应”CloudFront 触发器添加挂钩,以执行源重定向或动态资产操作等操作,或者向管道添加更多服务,包括您自己的日志记录系统、数据库、CDN 源等。请记住,Lambda@Edge有一些限制 - 可以通过参考本文 - 边缘函数open in new window限制来熟悉这些限制。

其他资源

Last update:
Contributors: “zhangweixue”