You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI结合Alembic、Docker、Lambda部署时运行数据库迁移问题咨询

迁移执行方案

直接设置alembic upgrade head为CMD不生效的原因

Lambda容器镜像必须符合Lambda运行时接口规范,直接将迁移命令设为CMD的话,命令执行完成进程就直接退出,无法满足Lambda的运行要求,因此会启动失败。

方案1:专用迁移Lambda函数(数据库无公网访问时适用)

  • 编写极简Lambda处理函数,触发时执行迁移命令,示例handler.py内容如下:
import subprocess
import sys
import os

def handler(event, context):
    # 从Lambda环境变量获取数据库连接配置
    os.environ["SQLALCHEMY_DATABASE_URI"] = os.getenv("AURORA_DB_CONN_STR")
    try:
        # 执行alembic迁移
        result = subprocess.run(
            [sys.executable, "-m", "alembic", "upgrade", "head"],
            check=True,
            capture_output=True,
            text=True
        )
        print("Migration output:", result.stdout)
        return {"status": "success", "output": result.stdout}
    except subprocess.CalledProcessError as e:
        print("Migration failed, error:", e.stderr)
        raise RuntimeError(f"Migration failed: {e.stderr}")
  • 调整迁移用镜像的Dockerfile,将入口改为上述处理函数:
# 基于你原应用的镜像构建即可,确保包含alembic、迁移脚本和所有依赖
FROM your-existing-fastapi-app-image:latest
COPY handler.py .
CMD ["handler.handler"]
  • 为迁移Lambda配置和原业务Lambda相同的VPC、安全组权限,确保可以访问Aurora数据库,同时配置加密环境变量存储数据库连接串,不要明文写入代码或镜像。
  • 在GitHub Actions部署流程中,新增Lambda调用步骤,待镜像推送ECR、Lambda配置更新完成后执行迁移:
# 调用迁移Lambda
aws lambda invoke \
  --function-name your-project-db-migration-lambda \
  --payload '{}' \
  migration_result.json
# 校验迁移结果
if grep -q "errorMessage" migration_result.json; then
  echo "Migration failed, check Lambda logs for details"
  exit 1
fi
echo "Migration completed successfully"

方案2:GitHub Actions直接执行迁移(更简化方案)

如果你的Aurora数据库允许公网访问,或者GitHub Actions runner已经和AWS VPC打通,可以不需要额外维护迁移Lambda,直接在Actions流程中执行迁移:

  • 在GitHub Secrets中配置AWS凭证和数据库连接信息
  • 部署流程中新增步骤:安装Python依赖、拉取数据库配置、直接执行alembic upgrade head

注意事项

  • 执行生产环境迁移前务必提前备份Aurora数据库,避免迁移错误导致数据损坏
  • 迁移Lambda的超时时间需要根据迁移脚本的执行时长调整,建议至少设置为5分钟,避免执行中途被Lambda强制终止
  • 所有涉及数据库连接的敏感信息必须使用加密存储,不要明文暴露在配置、代码或日志中

内容的提问来源于stack exchange,提问作者Devon Ray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:15:11