AWS Lambda 完全使用指南:从零搭建 Serverless 函数计算架构

AWS Lambda 完全使用指南:从零搭建 Serverless 函数计算架构

某出海 SaaS 公司的后端团队曾告诉我们:他们每月为一批”0 点到 6 点几乎无请求”的 API 服务支付着固定的 EC2 费用。换算下来,这些服务器有效利用率不到 15%,却一直在烧钱。

迁移到 AWS Lambda 后,同样的业务逻辑,每月账单从 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 架构评估,帮助出海企业找到最合适的云原生方案,实现成本降低与弹性提升。

👉 预约免费架构咨询 → aws-oncloudai.com


本文由 OnCloud AI 技术团队撰写 | aws-oncloudai.com 专注于帮助出海企业构建高效、低成本的 AWS 云架构

更多探索

Tell me what you need