使用 AWS Lambda 开始无服务器开发 - 函数设计与事件源活用
解析 Lambda 的函数设计、事件源映射、冷启动对策、Powertools 的活用。
Lambda 概述
Lambda 是无需管理服务器即可执行代码的无服务器计算服务。提供 Node.js、Python、Java、.NET、Ruby 的托管运行时,Go、Rust 等语言可在仅含 OS 的运行时上运行(AWS 官方运行时列表,截至 2026 年 9 月)。最长执行时间为 15 分钟(900 秒),最大内存为 10GB(10,240 MB)(均依据 AWS 官方文档,截至 2026 年 9 月)。按请求数和执行时间(GB-秒)按量计费,每月有 100 万次请求和 40 万 GB-秒的免费额度(AWS 官方 Lambda 价格页,截至 2026 年 9 月)。
函数设计与冷启动
函数应分离为处理程序(事件处理)和初始化代码(创建 SDK 客户端、加载配置)。初始化代码仅在冷启动时执行,热启动时仅执行处理程序。Provisioned Concurrency 预先初始化指定数量的执行环境,消除冷启动。在 API 的延迟要求严格时使用。Lambda Powertools 是通过装饰器或中间件简单实现结构化日志、X-Ray 追踪和 CloudWatch 指标的最佳实践的库。
实际架构模式
在生产环境中运维以 AWS Lambda 起步的无服务器开发时,比单独使用更重要的是组合多个服务的架构模式。典型的配置之一,是将 API Gateway 置于前端,由其负责认证、授权和限流的模式。后端与 DynamoDB 或 Aurora Serverless 组合实现数据持久化,并通过经由 SQS 或 EventBridge 的异步处理确保吞吐量。在错误处理方面,设置 Dead Letter Queue(DLQ)捕获处理失败的事件、并通过 CloudWatch Alarms 检测异常的机制不可或缺。在成本方面,若使用量稳定且可预期,可将 Compute Savings Plans 应用于 Lambda 的使用以降低成本(AWS 在 2021 年 9 月的官方博客中公布的折扣率最高为 17%,现行折扣率可在 AWS 官方的 Savings Plans 页面确认)。日志的结构化方面,引入 Lambda Powertools,并组合使用基于 correlation ID 的请求追踪和基于 X-Ray 的服务间延迟可视化,即可在发生故障时迅速确定原因。
成本优化与性能调优
成本优化的第一步是优化内存配置。就 Lambda 而言,增加内存时 CPU 也会按比例分配,因此有时会出现处理时间缩短、总成本下降的情况。使用 AWS Lambda Power Tuning 工具,可自动测量每种内存配置的执行时间和成本,并确定最优值。在 API 的延迟要求为 P99 100ms 以下等严格的场景中,考虑采用 Provisioned Concurrency。但待机期间也会产生费用,因此需在分析流量模式后与 Application Auto Scaling 组合,按时间段设置 Provisioned Concurrency 的增减。选择基于 ARM 的 Graviton2 处理器(arm64 架构)时,与 x86 相比,可望获得最高 34% 的性价比提升(每执行时间的费用低 20%,性能最高提升 19%,为 AWS 在 2021 年 9 月的官方博客中公布的数值。20% 的价格差在截至 2026 年 9 月的 AWS 官方价格页的单价中同样成立)。将现有函数迁移到 arm64 时,需事先验证依赖库(包括含原生二进制文件的库)的兼容性。
事件源与集成
Lambda 以各种事件为契机启动。调用方式包括同步响应 API 请求的调用、委托处理而不等待结果的异步调用,以及从队列或流中取出消息进行处理的轮询型调用。可与 S3 中的文件放置、数据库的变更、计划任务、消息的到达等多种来源集成。由于各自的重试行为和出错时的处理方式不同,需理解其特性后使用。设计接收哪些事件以及如何接收,是决定无服务器架构构成的出发点。
并发与扩展
请求增加时,Lambda 会自动增加执行环境并进行并行处理。该并发数存在上限,突增时一旦达到上限,请求有时会被限流。可为重要的函数预留并确保并发数,使其不受其他函数的影响。若想避免冷启动,应使用预先预热执行环境的机制。为避免下游的数据库等过载,限制并发数加以保护也很重要。理解扩展的行为,并考虑上限与下游处理能力的设计,能带来稳定的运维。
可观测性与错误处理
在无服务器中,由于处理是分布式的,确保可观测性是运维的关键。记录各函数的执行日志,并通过分布式追踪跟踪请求经由了哪些服务、如何经由。由此可以确定故障的原因和发生延迟的位置。在错误处理方面,需准备用于转存异步调用中失败事件的死信队列,防止遗漏。将处理设计为幂等很重要,这样即使重试导致同一处理多次执行也不会出问题。组合日志、追踪和错误的转存,使难以看清的分布式处理也能准确无误地运维。
安全与运维
为 Lambda 函数分配执行角色,仅以最小权限允许该函数所需的操作。过度的权限会在函数遭到入侵时扩大损害,因此应避免。访问数据库等私有资源的函数应在 VPC 内运行,并控制网络。认证信息和 API 密钥不要直接写在代码或环境变量中,而应从专用服务中安全地获取。环境变量应加密保护。彻底贯彻这些安全设计,就能在享受无服务器简易性的同时,构建稳健且安全的应用程序。
总结
Lambda 是事件驱动的无服务器计算服务,实现按量计费和零管理。通过 Provisioned Concurrency 消除冷启动,通过 SnapStart 缩短 Java、Python、.NET 函数的启动时间(支持的运行时以 AWS 官方文档为准,截至 2026 年 9 月)。通过与 220 个以上 AWS 服务的集成(AWS 官方产品页,截至 2026 年 9 月),自动处理来自 API Gateway、S3、DynamoDB Streams、SQS 等的事件。
参考资料(AWS 官方)
本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。
如本页内容与官方文档不一致,请以官方文档为准。