Lambda@Edge 与事件驱动模式
在 CloudFront 边缘站点运行函数,并将 Lambda 连接到 SQS、SNS、DynamoDB Streams 和 Kinesis,构建事件驱动架构。
Lambda@Edge 与事件驱动模式 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。
什么是 Lambda@Edge
Lambda@Edge 允许您在全球各地的 CloudFront 边缘站点运行 Lambda 函数,使其更接近最终用户,而不必运行在集中的区域中。这样,您就可以在 CDN 层自定义 HTTP 请求和响应,同时新增延迟低于一毫秒。Lambda@Edge 函数会部署到全球各地,并在每次 CloudFront 缓存命中或未命中事件发生时调用,因此非常适合执行轻量级的请求处理任务。
CloudFront 的四个触发点
Lambda@Edge 可以在 CloudFront 请求生命周期的四个位置拦截流量:
- 查看器请求:CloudFront 从查看器(用户)接收到请求时触发,此时尚未检查缓存
- 源请求:CloudFront 将缓存未命中请求转发到源站时触发
- 源响应:源站返回响应后、响应被缓存前触发
- 查看器响应:CloudFront 将响应返回给查看器前触发
Lambda@Edge 与常规 Lambda 的限制对比
Lambda@Edge 的限制比常规 Lambda 更严格:最大 128 MB 内存(查看器事件)、1 GB(源站事件),最长5 秒超时(查看器事件)和30 秒(源站事件)。函数必须在 us-east-1 中创建,并通过 CloudFront 部署到边缘站点。不支持 VPC、环境变量或 Lambda Layer。这些限制意味着 Lambda@Edge 适用于轻量级转换,而不是繁重处理。
Lambda@Edge 的常见使用场景
Lambda@Edge 特别适合以下场景:A/B 测试(根据 Cookie 将 URL 重写到不同的源站路径)、身份验证(在转发到源站前于边缘站点验证 JWT)、HTTP 标头处理(添加 HSTS、CSP、X-Frame-Options 等安全标头)、URL 规范化(将 www 重定向到非 www,或强制使用结尾斜杠),以及个性化(根据 CloudFront-Viewer-Country 标头中的查看器国家/地区提供不同内容)。
// Viewer Request: Add security headers
exports.handler = async (event) => {
const response = event.Records[0].cf.response;
response.headers['strict-transport-security'] = [{
key: 'Strict-Transport-Security',
value: 'max-age=63072000; includeSubdomains; preload'
}];
response.headers['x-frame-options'] = [{
key: 'X-Frame-Options',
value: 'DENY'
}];
return response;
};CloudFront Functions 与 Lambda@Edge
CloudFront Functions 是超轻量级的 JavaScript 函数,仅在查看器请求/响应阶段运行,执行时间限制为 2 毫秒,成本也低得多。对于简单使用场景(URL 重写、标头处理和缓存键规范化),CloudFront Functions 比 Lambda@Edge 更受推荐,因为它们速度更快、成本更低。当您需要访问网络调用、更大的有效负载,或需要使用源请求/响应触发点时,请使用 Lambda@Edge。
使用 Lambda 的事件驱动架构
事件驱动架构通过事件(表示某件事情已经发生的消息)连接服务。在 AWS 中,Lambda 是主要的事件使用者:它可以接收来自 SQS、SNS、DynamoDB Streams、Kinesis、S3、EventBridge 等服务的事件。每个事件都会触发一次 Lambda 执行,使系统能够异步、独立地做出响应,而无需紧密耦合。这种模式支持松耦合、独立扩展和故障隔离。
作为 SQS 使用者的 Lambda
可以将 Lambda 配置为 SQS 的事件源映射。Lambda 会轮询队列,获取最多一个批次大小的消息(标准队列最多 10,000 条,FIFO 队列最多 10 条),并针对每个批次调用一次函数。如果函数失败,整个批次都会返回队列。您可以配置批次窗口,在调用函数前等待更多消息,从而提高吞吐量。对于反复失败的消息,请在源 SQS 队列上使用 DLQ。
aws lambda create-event-source-mapping \
--function-name 'OrderProcessor' \
--event-source-arn 'arn:aws:sqs:us-east-1:123456789012:OrderQueue' \
--batch-size 10 \
--maximum-batching-window-in-seconds 5Lambda 与 DynamoDB Streams
DynamoDB Streams 会将每项更改(INSERT、MODIFY、REMOVE)捕获为有序的事件序列。Lambda 使用带有 TRIM_HORIZON(从最旧记录开始)或 LATEST(从最新记录开始)的事件源映射读取流。Lambda 会按分区内的顺序处理记录。失败的批次会阻止同一分区的后续处理,直到问题解决——请使用错误时拆分批次来拆分失败批次并隔离有问题的记录。
aws lambda create-event-source-mapping \
--function-name 'StreamProcessor' \
--event-source-arn 'arn:aws:dynamodb:us-east-1:123456789012:table/Orders/stream/...' \
--starting-position TRIM_HORIZON \
--batch-size 100 \
--bisect-batch-on-function-errorLambda 与 Kinesis Data Streams
Lambda 处理 Kinesis 记录的方式与处理 DynamoDB Streams 类似——每个分片执行一次并发处理。主要配置选项包括并行化因子(每个分片最多 10 次并发 Lambda 调用,并行处理子批次)和增强型扇出(为 Lambda 使用者提供每个分片专用的 2 MB/s 吞吐量)。这些选项可以显著提高高容量流的吞吐量,而无需增加分片数量。
EventBridge 作为事件路由器
Amazon EventBridge 是连接 AWS 服务和自定义应用程序的推荐事件总线。事件会流入总线,规则根据模式筛选事件,并将其路由到包括 Lambda、SQS、Step Functions 等在内的目标。EventBridge 完全解耦事件生产者和使用者——双方都不需要知道对方的存在。默认事件总线接收来自 AWS 服务的事件;对于应用程序事件,请创建自定义事件总线。
aws events put-rule \
--name 'OrderPlacedRule' \
--event-pattern '{"source": ["com.myapp.orders"], "detail-type": ["OrderPlaced"]}' \
--state ENABLED
aws events put-targets \
--rule 'OrderPlacedRule' \
--targets 'Id=LambdaTarget,Arn=arn:aws:lambda:us-east-1:123456789012:function:InventoryUpdater'扇出模式:SNS 到多个 Lambda
一种常见的事件驱动模式是扇出:一个事件触发多个并行处理流程。向SNS 主题发布事件后,多个 Lambda 函数订阅者会分别独立地做出响应。例如,一个下单事件可以扇出到以下处理:发送确认邮件的 Lambda、更新库存的 Lambda,以及通知仓库的 Lambda。每个使用者都彼此独立并单独扩展——任何一个使用者都无法阻塞其他使用者。
快速检查
请测试您对本课 AWS Solutions Architect(SAA-C03)概念的理解。
课程回顾
本课介绍了:Lambda@Edge 在 CloudFront 边缘站点运行函数,并通过四个触发点(查看器请求/响应、源请求/响应)执行身份验证、URL 重写和标头处理等任务;CloudFront Functions 是成本更低、延迟更低的简单查看器阶段转换方案;而使用 SQS、DynamoDB Streams、Kinesis、EventBridge 和 SNS 扇出的事件驱动模式支持松耦合架构,让 Lambda 能够响应实时事件。接下来,我们将学习 SQS Standard 队列与 FIFO 队列的区别。
常见问题解答
「Lambda@Edge 与事件驱动模式」课时是免费的吗?
是的 — 「Lambda@Edge 与事件驱动模式」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。
「Lambda@Edge 与事件驱动模式」这节课中我会学到什么?
在 CloudFront 边缘站点运行函数,并将 Lambda 连接到 SQS、SNS、DynamoDB Streams 和 Kinesis,构建事件驱动架构。 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cloud & IT Cert Prep 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「Lambda@Edge 与事件驱动模式」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?
能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Lambda 函数:运行时、触发器与处理程序
- 并发、节流与预留并发
- Lambda 层与部署包
- Lambda@Edge 与事件驱动模式