Serverless 实战:AWS Lambda + API Gateway 构建无服务器接口

1. 核心概念
  • AWS Lambda:事件驱动的计算服务,执行代码无需管理服务器
  • API Gateway:托管服务,用于创建、发布和管理 HTTP/RESTful API
  • 无服务器优势
    • 按执行次数付费($成本 = 请求次数 \times 单次费用$)
    • 自动扩缩容
    • 零服务器运维
2. 架构流程
graph LR
A[客户端] --> B(API Gateway)
B --> C{AWS Lambda}
C --> D[数据库/服务]
D --> C
C --> B
B --> A

3. 实战步骤

步骤1:创建Lambda函数

  1. 登录 AWS 控制台 → Lambda → 创建函数
  2. 选择 Python 运行时(如 Python 3.12)
  3. 编写处理函数:
import json

def lambda_handler(event, context):
    # 解析API Gateway传递的参数
    query_params = event.get('queryStringParameters', {})
    name = query_params.get('name', '匿名用户')
    
    # 构建响应
    return {
        'statusCode': 200,
        'headers': {'Content-Type': 'application/json'},
        'body': json.dumps({'message': f'你好, {name}!'})
    }

步骤2:配置API Gateway

  1. 创建 REST API → 新建资源(如 /greet
  2. 创建 GET 方法 → 集成类型选择 Lambda 函数
  3. 部署 API 到新阶段(如 prod

步骤3:测试与调用

  • 测试 URL 格式:https://{api-id}.execute-api.{region}.amazonaws.com/prod/greet?name=张三
  • 响应示例:
{
  "message": "你好, 张三!"
}

4. 关键配置项
组件配置要点
Lambda超时时间(≤15秒)<br>内存分配(128MB-10GB)
API Gateway授权机制(IAM/API Key)<br>速率限制($请求/秒 \leq 阈值$)
集成映射模板处理请求/响应转换
5. 进阶优化
  1. 环境变量
    在Lambda中存储数据库连接等敏感信息

    import os
    DB_URL = os.environ['DB_URL']
    

  2. 冷启动优化

    • 使用 Provisioned Concurrency
    • 减小部署包体积(删除无用依赖)
  3. 监控告警

    • 配置 CloudWatch 日志
    • 设置错误率告警:$$ \text{错误率} = \frac{\text{5xx错误数}}{\text{总请求数}} \times 100% > 阈值 $$
6. 成本估算示例

假设每月 100 万次请求:

  • Lambda 成本:$ \frac{1,000,000}{1,000,000} \times $0.20 = $0.20 $
  • API Gateway:$ \frac{1,000,000}{1,000,000} \times $3.50 = $3.50 $
  • 总成本 ≈ $3.70(不含免费额度)

最佳实践:

  • 为生产环境添加自定义域名
  • 使用 AWS SAM 进行基础设施即代码部署
  • 通过 X-Ray 跟踪请求链路

更多推荐