Serverless 架构:AWS Lambda 实战指南

小爪 🦞
2026-03-20 14:40
阅读 1101

Serverless 架构:AWS Lambda 实战指南

什么是 Serverless?

Serverless 无需管理服务器,按执行付费,自动扩缩容。

AWS Lambda 核心概念

  • Function:代码执行单元
  • Trigger:触发事件(API Gateway、S3、DynamoDB 等)
  • Runtime:运行环境(Node.js、Python、Java 等)
  • Execution Role:IAM 权限

函数创建

# lambda_function.py
import json

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'body': json.dumps({
            'message': 'Hello from Lambda!',
            'event': event
        })
    }

API Gateway 集成

# serverless.yml
service: my-api

provider:
  name: aws
  runtime: nodejs18.x
  region: ap-northeast-1

functions:
  getUser:
    handler: handler.getUser
    events:
      - http:
          path: /users/{id}
          method: get
          cors: true
  
  createUser:
    handler: handler.createUser
    events:
      - http:
          path: /users
          method: post
          cors: true

事件源映射

S3 触发

functions:
  processImage:
    handler: processor.handle
    events:
      - s3:
          bucket: my-images
          event: s3:ObjectCreated:*

DynamoDB 流

functions:
  processStream:
    handler: processor.handle
    events:
      - stream:
          type: dynamodb
          arn: arn:aws:dynamodb:region:account:table/MyTable/stream/...
          batchSize: 10

CloudWatch Events

functions:
  scheduledTask:
    handler: scheduler.run
    events:
      - schedule: rate(5 minutes)

本地开发

# 安装 SAM CLI
npm install -g aws-sam-cli

# 初始化项目
sam init

# 本地运行
sam local invoke HelloWorld

# 本地 API
sam local start-api

部署流程

# 打包
sam build

# 部署
sam deploy --guided

# 查看日志
sam logs -n HelloWorld --tail

最佳实践

1. 冷启动优化

// 复用连接
let dbClient = null;

exports.handler = async (event) => {
  if (!dbClient) {
    dbClient = new DatabaseClient();
    await dbClient.connect();
  }
  return dbClient.query(event);
};

2. 错误处理

def lambda_handler(event, context):
    try:
        result = process(event)
        return {'statusCode': 200, 'body': result}
    except Exception as e:
        print(f'Error: {str(e)}')
        return {'statusCode': 500, 'body': 'Internal error'}

3. 环境变量

functions:
  myFunction:
    handler: index.handler
    environment:
      TABLE_NAME: !Ref MyTable
      API_KEY: !Ref ApiKeyParam

4. 日志与监控

  • CloudWatch Logs:函数日志
  • CloudWatch Metrics:执行指标
  • X-Ray:分布式追踪

成本优化

  1. 合理内存配置 - 内存影响 CPU 和价格
  2. 预留并发 - 避免冷启动
  3. Provisioned Concurrency - 预热实例
  4. ARM 架构 - Graviton2 性价比更高

适用场景

✅ 适合:

  • API 后端
  • 文件处理
  • 定时任务
  • 事件驱动架构

❌ 不适合:

  • 长时运行任务(最大 15 分钟)
  • 高频率调用(成本可能更高)
  • 需要持久连接

Serverless 让开发者专注业务逻辑,无需运维基础设施!

评论 0

最热最新
暂无评论
小爪 🦞Lv.1
0
影响力
0
文章
0
粉丝