
AWS Lambda 完全使用指南:从零搭建 Serverless 函数计算架构
某出海 SaaS 公司的后端团队曾告诉我们:他们每月为一批”0 点到 6 点几乎无请求”的 API 服务支付着固定的 EC2 费用。换算下来,这些服务器有效利用率不到 15%,却一直在烧钱。
迁移到 AWS Lambda 后,同样的业务逻辑,每月账单从 2,400降到2,400降到180——Lambda 只在请求到达时计费,空闲时不产生任何费用。
一、什么是 AWS Lambda?Serverless 的核心逻辑
1.1 传统服务器 vs Serverless 的本质区别
| 维度 | 传统 EC2 服务器 | AWS Lambda (Serverless) |
|---|---|---|
| 计费方式 | 按小时/月付费,无论是否有请求 | 按调用次数 + 执行时长计费 |
| 扩容方式 | 手动或预设规则扩容,有延迟 | 自动瞬时扩容,可并发数千 |
| 运维负担 | 需管理 OS、补丁、安全组 | 零服务器管理,专注业务代码 |
| 冷启动 | 无(进程常驻) | 存在冷启动延迟(首次 100~500ms) |
| 适用场景 | 稳定持续的工作负载 | 间歇性、事件驱动的工作负载 |
核心思想:Lambda 让你只写”函数”,AWS 负责运行环境、扩容、监控的一切——你只为代码真正运行的时间付费。
1.2 Lambda 的定价逻辑(2026 年最新)
Lambda 的免费额度非常慷慨:
- 免费请求数:每月 100 万次调用(永久免费)
- 免费计算时长:每月 40 万 GB-秒
- 超出后的费用:
- 请求:$0.20 / 100 万次
- 计算时长:$0.0000166667 / GB-秒
举例计算:一个每天被调用 10 万次、平均执行 200ms、内存 512MB 的函数:
- 月调用次数:300 万次 → 超出免费额度 200 万次 → 费用:$0.40
- 月计算时长:300 万 × 0.2s × 0.5GB = 30 万 GB-秒 → 全在免费额度内
- 月总费用:约 $0.40
二、Lambda 核心概念速览
2.1 函数(Function)
Lambda 的基本执行单元,支持以下运行时:
| 语言 | 支持版本 |
|---|---|
| Python | 3.9、3.10、3.11、3.12 |
| Node.js | 18.x、20.x |
| Java | 11、17、21 |
| Go | 1.x(via provided.al2023) |
| .NET | 6、8 |
| 自定义运行时 | 任何语言(通过 Runtime API) |
2.2 触发器(Trigger)
Lambda 函数本身是被动的——它需要触发器来调用。常见触发器:
| 触发器类型 | 使用场景 |
|---|---|
| API Gateway / ALB | HTTP API 接口,最常见 |
| S3 事件 | 文件上传时触发处理(图片压缩、格式转换) |
| DynamoDB Streams | 数据变更时触发下游逻辑 |
| SQS 队列 | 异步消息处理,削峰填谷 |
| EventBridge | 定时任务(类似 Cron) |
| SNS | 消息通知触发处理 |
| Cognito | 用户注册/登录事件触发 |
2.3 执行环境与生命周期
请求到达
↓
[冷启动阶段] 仅首次或实例回收后触发
├── 初始化执行环境(下载代码、启动运行时)
├── 运行初始化代码(import、连接池等 handler 外的代码)
└── 约 100~500ms 延迟
[热执行阶段] 绝大多数请求
├── 直接复用已有执行环境
└── 仅运行 handler 函数,无延迟
函数执行完毕
└── 执行环境保留约 5~15 分钟,等待下次复用
三、第一个 Lambda 函数:实战搭建流程
3.1 通过 AWS 控制台创建(5分钟上手)
Step 1:进入 Lambda 控制台 → 点击”创建函数”
Step 2:选择”从头开始创作”,填写:
- 函数名称:
my-first-function - 运行时:Python 3.12
- 架构:x86_64(ARM/Graviton2 可降低约 20% 成本)
Step 3:编写 handler 代码(控制台内联编辑):
import json
def lambda_handler(event, context):
# event: 触发器传入的数据
# context: 函数运行时信息(剩余时间、请求ID等)
name = event.get('name', 'World')
return {
'statusCode': 200,
'body': json.dumps({
'message': f'Hello, {name}!',
'requestId': context.aws_request_id
})
}
Step 4:配置测试事件 → 运行测试,验证输出
Step 5:添加触发器(以 API Gateway 为例):
- 选择”API Gateway” → 创建新 API → REST API
- 部署后获得公开 HTTPS 端点,即可通过 HTTP 调用函数
3.2 使用 AWS SAM 进行本地开发(推荐生产环境)
AWS Serverless Application Model(SAM)是官方推荐的 IaC 工具
本地测试命令:
# 安装 SAM CLI
pip install aws-sam-cli
# 本地启动 API
sam local start-api
# 运行单个函数测试
sam local invoke ProcessOrderFunction --event events/test_event.json
四、性能优化:解决冷启动问题
冷启动是 Lambda 使用中最常被质疑的问题,以下是系统性解决方案:
4.1 减少冷启动时间
| 优化手段 | 效果 | 实操方法 |
|---|---|---|
| 选择轻量运行时 | 显著 | Python/Node.js 冷启动远快于 Java |
| 减小部署包体积 | 明显 | 只打包必要依赖,使用 Lambda Layer 共享库 |
| 使用 ARM 架构 | 轻微 | Graviton2 处理器,冷启动快约 10% |
| 代码优化 | 明显 | 将 DB 连接、SDK 初始化移到 handler 外部,利用实例复用 |
# ✅ 推荐:初始化代码放在 handler 外(只在冷启动时执行一次)
import boto3
# 这里的代码只在冷启动时运行
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('orders')
def lambda_handler(event, context):
# 这里直接复用已初始化的 table 对象
response = table.get_item(Key={'order_id': event['order_id']})
return response['Item']
4.2 Provisioned Concurrency(预置并发)
对于延迟敏感型应用(如实时 API),可以预先初始化指定数量的执行环境:
# 为函数配置 10 个预置并发实例
aws lambda put-provisioned-concurrency-config \
--function-name my-api-function \
--qualifier production \
--provisioned-concurrent-executions 10
成本提示:预置并发按小时收费($0.0000646 / GB-小时),适合高流量关键路径,不适合所有函数全量配置。
五、生产环境最佳实践
5.1 内存配置策略
Lambda 的内存直接影响 CPU 算力和费用。找到最优内存的方法:
- Lambda Power Tuning 工具:AWS 开源工具,自动测试不同内存配置的性能/成本比
- 经验规则:内存翻倍,CPU 也翻倍;如果执行时间减少 50%+,升内存反而更省钱
5.2 并发限制与账户配额
| 并发类型 | 默认限制 | 说明 |
|---|---|---|
| 账户并发上限 | 1000(可申请提升) | 整个账户所有函数共享 |
| 预留并发 | 按函数配置 | 保障关键函数不被其他函数抢占 |
| 爆发并发(Burst Limit) | 500~3000(按区域) | 突发流量时的瞬时扩容上限 |
六、Lambda 与其他 AWS 服务的黄金组合
最常见的 Serverless 架构模式
用户请求
↓
API Gateway(HTTPS 端点)
↓
Lambda(业务逻辑处理)
├──→ DynamoDB(数据持久化)
├──→ S3(文件存储)
├──→ SQS(异步任务队列)
└──→ SNS(消息通知)
典型出海业务场景:
| 场景 | Lambda 用途 | 搭配服务 |
|---|---|---|
| 独立站订单处理 | 接收订单、校验、写库 | API GW + DynamoDB + SQS |
| 图片/视频处理 | 上传后自动压缩、打水印 | S3 触发 + S3 存储 |
| 定时数据报告 | 每日拉取广告数据汇总 | EventBridge 定时触发 + S3/邮件 |
| AI 推理接口 | 调用 Bedrock/SageMaker | API GW + Bedrock |
结语:Lambda 适合你的业务吗?
Lambda 不是万能的,但对于以下特征的工作负载,它是最优解:
✅ 适合 Lambda:
- 请求量波动大(低谷几乎为零)
- 单次执行时间短(< 15 分钟)
- 无状态处理逻辑
- 事件驱动型任务
❌ 不适合 Lambda:
- 需要维持长连接(WebSocket 需配合 API Gateway)
- 执行时间 > 15 分钟(用 ECS Fargate 替代)
- 需要大量本地磁盘 I/O(/tmp 上限 10GB)
☁️ 想把现有后端迁移到 Serverless 架构?
aws-oncloudai.com 提供免费的 AWS 架构评估,帮助出海企业找到最合适的云原生方案,实现成本降低与弹性提升。
本文由 OnCloud AI 技术团队撰写 | aws-oncloudai.com 专注于帮助出海企业构建高效、低成本的 AWS 云架构

