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后,接下来可以:

  1. S3基础 - 学习对象存储
  2. DynamoDB - 学习NoSQL数据库
  3. 无服务器应用实战 - 构建无服务器应用
最后更新:2026-03-28