Lambda无服务器计算 #
一、Lambda概述 #
1.1 什么是Lambda #
AWS Lambda是无服务器计算服务,允许运行代码而无需预置或管理服务器。只需为代码执行期间消耗的计算时间付费,代码不运行时不产生费用。
1.2 Lambda核心特性 #
text
Lambda核心特性:
├── 无服务器
│ └── 无需管理基础设施
│ └── AWS自动处理运维
│
├── 自动扩展
│ └── 自动处理并发请求
│ └── 从每天几个请求到每秒数千个
│
├── 按需付费
│ └── 按执行次数和运行时间计费
│ └── 不运行不收费
│
├── 事件驱动
│ └── 响应各种事件触发
│ └── 与AWS服务深度集成
│
└── 多语言支持
└── 支持多种编程语言
1.3 Lambda使用场景 #
| 场景 | 说明 |
|---|---|
| 数据处理 | 实时处理数据流 |
| 后端服务 | API后端、Web应用 |
| 事件处理 | 响应AWS服务事件 |
| 定时任务 | 定时执行批处理 |
| 文件处理 | 上传文件自动处理 |
| 聊天机器人 | 处理聊天消息 |
二、Lambda核心概念 #
2.1 函数 #
text
函数组成:
├── 代码
│ └── 业务逻辑代码
│
├── 运行时
│ └── 执行环境
│
├── 配置
│ ├── 内存分配
│ ├── 超时设置
│ └── 环境变量
│
├── 触发器
│ └── 事件源
│
└── 权限
└── IAM执行角色
2.2 运行时 #
Lambda支持多种运行时:
| 语言 | 版本 |
|---|---|
| Node.js | 18.x, 20.x |
| Python | 3.9, 3.10, 3.11, 3.12 |
| Java | 11, 17, 21 |
| .NET | 6, 8 |
| Go | 1.x |
| Ruby | 3.2, 3.3 |
| Rust | provided.al2 |
| Custom Runtime | 任意语言 |
2.3 执行角色 #
text
执行角色权限:
├── 基本执行角色
│ └── 日志写入权限
│ └── CloudWatch Logs
│
├── 服务访问权限
│ └── S3、DynamoDB等
│
└── VPC访问权限
└── ENI创建权限
2.4 冷启动与热启动 #
text
启动类型:
├── 冷启动
│ └── 首次调用或长时间未调用
│ └── 需要初始化执行环境
│ └── 延迟较高(100ms-数秒)
│
└── 热启动
└── 已初始化的执行环境
└── 直接执行代码
└── 延迟低(毫秒级)
三、创建Lambda函数 #
3.1 通过控制台创建 #
text
创建Lambda函数步骤:
├── 第一步:选择创建方式
│ ├── 从头开始创作
│ ├── 使用蓝图
│ └── 容器镜像
│
├── 第二步:基本信息
│ ├── 函数名称
│ └── 运行时
│
├── 第三步:权限
│ ├── 创建新角色
│ └── 使用现有角色
│
├── 第四步:编写代码
│ └── 内联编辑或上传
│
└── 第五步:配置和部署
└── 设置内存、超时等
3.2 Lambda函数示例 #
Node.js示例 #
javascript
export const handler = async (event) => {
console.log('Event:', JSON.stringify(event, null, 2));
const response = {
statusCode: 200,
body: JSON.stringify({
message: 'Hello from Lambda!',
input: event
})
};
return response;
};
Python示例 #
python
import json
def lambda_handler(event, context):
print('Event:', json.dumps(event))
return {
'statusCode': 200,
'body': json.dumps({
'message': 'Hello from Lambda!',
'input': event
})
}
3.3 通过CLI创建 #
bash
aws lambda create-function \
--function-name my-function \
--runtime python3.11 \
--role arn:aws:iam::123456789012:role/lambda-role \
--handler index.lambda_handler \
--zip-file fileb://function.zip
3.4 使用AWS SAM部署 #
yaml
template.yaml:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Lambda function
Resources:
MyFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: src/
Handler: app.lambda_handler
Runtime: python3.11
Events:
Api:
Type: Api
Properties:
Path: /hello
Method: get
bash
sam build
sam deploy --guided
四、事件触发器 #
4.1 支持的事件源 #
text
Lambda触发器类型:
├── API Gateway
│ └── HTTP/REST API请求
│
├── S3
│ └── 对象创建/删除事件
│
├── DynamoDB Streams
│ └── 数据变更事件
│
├── Kinesis
│ └── 数据流事件
│
├── SNS
│ └── 消息通知
│
├── SQS
│ └── 队列消息
│
├── CloudWatch Events
│ └── 定时任务
│
├── CloudWatch Logs
│ └── 日志订阅
│
└── 其他
├── Alexa
├── CloudFront
├── EventBridge
└── 更多...
4.2 API Gateway触发器 #
text
API Gateway集成:
├── 创建API
│ └── REST API或HTTP API
│
├── 创建资源和方法
│ └── GET、POST等
│
├── 配置Lambda集成
│ └── 选择Lambda函数
│
└── 部署API
└── 创建部署阶段
API Gateway事件示例 #
json
{
"resource": "/hello",
"path": "/hello",
"httpMethod": "GET",
"headers": {},
"queryStringParameters": {},
"pathParameters": {},
"body": null,
"isBase64Encoded": false
}
4.3 S3触发器 #
text
S3触发器配置:
├── 选择存储桶
├── 事件类型
│ ├── s3:ObjectCreated:*
│ ├── s3:ObjectRemoved:*
│ └── s3:ObjectRestore:*
├── 前缀/后缀过滤
└── 选择Lambda函数
S3事件示例 #
json
{
"Records": [{
"eventVersion": "2.1",
"eventSource": "aws:s3",
"awsRegion": "us-east-1",
"eventTime": "2024-01-01T00:00:00.000Z",
"eventName": "ObjectCreated:Put",
"s3": {
"bucket": {
"name": "my-bucket",
"arn": "arn:aws:s3:::my-bucket"
},
"object": {
"key": "uploads/image.jpg",
"size": 1024
}
}
}]
}
4.4 定时触发器 #
text
EventBridge Scheduler配置:
├── 规则类型
│ ├── 基于时间
│ └── 基于事件模式
│
├── Cron表达式
│ └── cron(0 0 * * ? *)
│
└── 目标
└── Lambda函数
五、函数配置 #
5.1 内存配置 #
text
内存配置:
├── 范围:128MB - 10,240MB
├── 影响:
│ ├── CPU性能
│ ├── 网络带宽
│ └── 执行成本
└── 建议:根据实际需求调整
5.2 超时配置 #
text
超时设置:
├── 范围:1秒 - 15分钟
├── 默认:3秒
├── 超时后函数终止
└── 建议:根据执行时间设置
5.3 环境变量 #
bash
# 通过CLI设置环境变量
aws lambda update-function-configuration \
--function-name my-function \
--environment Variables={DB_HOST=localhost,DB_NAME=mydb}
python
import os
def lambda_handler(event, context):
db_host = os.environ.get('DB_HOST')
db_name = os.environ.get('DB_NAME')
return {'db_host': db_host, 'db_name': db_name}
5.4 并发配置 #
text
并发设置:
├── 预留并发
│ └── 为函数预留特定数量的并发
│ └── 确保关键函数有足够容量
│
├── 预置并发
│ └── 预先初始化执行环境
│ └── 消除冷启动延迟
│
└── 账户并发限制
└── 默认1000(可申请提升)
5.5 VPC配置 #
text
VPC配置:
├── 选择VPC
├── 选择子网
├── 选择安全组
├── 函数可访问VPC内资源
└── 注意:增加冷启动时间
六、Lambda Layers #
6.1 Layers概述 #
text
Lambda Layers特点:
├── 共享代码和依赖
├── 独立于函数管理
├── 多个函数可共享
├── 每个函数最多5个Layers
└── 支持自定义和AWS提供
6.2 创建Layer #
bash
mkdir python
pip install requests -t python/
zip -r layer.zip python
aws lambda publish-layer-version \
--layer-name my-layer \
--zip-file fileb://layer.zip \
--compatible-runtimes python3.11
6.3 使用Layer #
bash
aws lambda update-function-configuration \
--function-name my-function \
--layers arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1
七、Lambda监控 #
7.1 CloudWatch指标 #
| 指标 | 说明 |
|---|---|
| Invocations | 调用次数 |
| Duration | 执行时间 |
| Errors | 错误次数 |
| Throttles | 限流次数 |
| ConcurrentExecutions | 并发执行数 |
| ColdStarts | 冷启动次数 |
7.2 CloudWatch Logs #
text
日志记录:
├── 自动创建日志组
├── 日志流命名:函数名/时间戳
├── 使用console.log/print记录
└── 可配置日志级别
7.3 X-Ray追踪 #
text
X-Ray集成:
├── 启用追踪
│ └── 函数配置中启用
│
├── 追踪信息
│ ├── 调用链路
│ ├── 延迟分析
│ └── 错误定位
│
└── 性能分析
└── 识别性能瓶颈
八、Lambda最佳实践 #
8.1 性能优化 #
text
性能优化建议:
├── 减少冷启动
│ ├── 使用预置并发
│ ├── 减小部署包大小
│ └── 使用更简单的运行时
│
├── 优化内存配置
│ └── 测试找到最佳内存设置
│
├── 代码优化
│ ├── 初始化放在处理函数外
│ ├── 使用连接池
│ └── 避免重复初始化
│
└── 合理设置超时
└── 避免不必要的等待
8.2 代码组织 #
text
代码组织建议:
├── 单一职责
│ └── 每个函数做一件事
│
├── 使用Layers
│ └── 共享依赖和代码
│
├── 环境变量
│ └── 配置与代码分离
│
├── 错误处理
│ └── 完善的错误处理
│
└── 日志记录
└── 记录关键信息
8.3 安全最佳实践 #
text
安全建议:
├── 最小权限原则
│ └── 只授予必要的权限
│
├── 使用环境变量加密
│ └── 敏感信息使用加密
│
├── VPC隔离
│ └── 敏感操作在VPC内
│
├── 代码签名
│ └── 验证代码完整性
│
└── 审计日志
└── 启用CloudTrail
8.4 成本优化 #
text
成本优化建议:
├── 合理配置内存
├── 优化执行时间
├── 使用预留并发
├── 删除不用的函数
└── 监控和优化
九、Lambda限制 #
9.1 配额限制 #
| 限制项 | 配额 |
|---|---|
| 内存 | 128MB - 10,240MB |
| 超时 | 15分钟 |
| 部署包大小(直接上传) | 50MB |
| 部署包大小(S3) | 250MB |
| 临时存储 | 512MB - 10,240MB |
| 环境变量 | 4KB |
| Layers | 5个 |
| 并发执行 | 1000(默认) |
十、小结 #
本章介绍了Lambda无服务器计算:
| 内容 | 要点 |
|---|---|
| Lambda概念 | 无服务器、事件驱动、自动扩展 |
| 运行时 | Node.js、Python、Java等多种语言 |
| 触发器 | API Gateway、S3、DynamoDB等 |
| 配置 | 内存、超时、并发、VPC |
| 最佳实践 | 性能优化、安全、成本优化 |
下一步学习 #
了解Lambda后,接下来可以:
最后更新:2026-03-28