将遗留单体迁移至 AWS Serverless
发布: (2025年12月10日 GMT+8 22:40)
3 min read
原文: Dev.to
Source: Dev.to
概览
本项目演示了如何使用 Strangler Fig Pattern 在 AWS 上将传统的单体应用迁移到无服务器架构,利用:
- Terraform 进行基础设施即代码(IaC)
- Python 编写业务逻辑
目标是展示如何从单体中剥离新功能并用无服务器组件替代——且不破坏现有系统。
架构
该方案包括以下主要组件:
- 传统单体
- 新无服务器组件
路由行为
| 路由 | 描述 |
|---|---|
/products | 已迁移路由 |
/products/restock | 增强(混沌)路由 |
前置条件
部署前,请确保您拥有:
- 一个符合免费套餐条件的 AWS 账户
- 已安装并配置好的 AWS CLI(
aws configure) - Terraform v1.0 以上版本
- 用于测试的 Postman 或
curl
项目结构
strangler-fig-aws-migration-demo/
部署说明
1️⃣ 初始化 Terraform
# Inside the infra-terraform directory
terraform init
2️⃣ 部署基础设施
terraform apply
在提示时输入 yes。
部署大约需要 2 分钟,随后 EC2 实例安装依赖并启动传统服务器还需约 3 分钟。
3️⃣ 获取 API URL
Terraform 将输出类似以下的值:
api_url = "https://.execute-api.us-east-1.amazonaws.com"
复制该 URL 用于测试。
测试场景
| 场景 | 端点 | 描述 |
|---|---|---|
| 1 | /users | 传统路由 |
| 2 | /products | 已迁移路由 |
| 3 | /products/restock | 混沌路由(POST) |
场景 3 的示例请求:
curl -X POST /products/restock
故障排查指南
| 问题 | 原因 |
|---|---|
| 502 Bad Gateway | API Gateway 无法访问 EC2 实例。 |
| 400 Bad Request | 负载版本不匹配。 |
| 500 Internal Server Error | 混沌测试的预期行为。 |
| 405 Method Not Allowed | 在仅支持 POST 的路由上使用了 GET。 |
如有需要,可重新运行请求:
curl -X POST /products/restock
清理(避免产生费用)
完成后,销毁所有资源:
terraform destroy