【问题标题】:How to do database schema migrations as part of AWS CDK deploy?作为 AWS CDK 部署的一部分,如何进行数据库架构迁移?
【发布时间】:2021-02-26 11:15:26
【问题描述】:

我们正在 AWS EC2 上运行一个 Web 应用程序,该应用程序连接到在 AWS RDS 上运行的 MariaDB。我们设置了 AWS CDK 脚本来创建新的基础设施,包括我们自己的服务(Web 应用程序本身、后台工作程序、RabbitMQ、RDS DB)和 AWS 服务(如 ALB、安全组、DNS、S3 等)的所有内容。一切正常,即一个可操作的基础设施,在我运行cdk deploy 时设置所有运行、监控和自动缩放的服务。

但是,有时我们需要升级 MariaDB 架构。在没有自动缩放的旧基础设施中,只需将一个 EC2 实例设置为维护模式、部署新软件并运行特殊的管理命令以使用 Alembic 启动数据库架构升级即可完成。仅运行cdk deploy 的问题在于,在升级 DB 模式之前,Web 应用程序的新软件版本可能与 DB 模式不兼容。 运行的软件应始终与数据库架构相对应,即数据库架构升级后不应有任何旧实例运行。

  1. 当需要进行数据库架构升级时,如何以受控方式执行cdk deploy,以免在旧软件版本上运行与新数据库架构不兼容的实例?

  2. 作为cdk deploy 的一部分,如何进行数据库架构升级?

关于问题 2:我们考虑过有一个特殊版本的 Web 应用程序,它不会成为自动缩放的一部分或对 Internet 开放,即它只会用于运行特殊的管理器命令,例如数据库架构升级。这是不必要的,还是 AWS CDK 有一些机制可以通过关系数据库架构升级进行受控部署?

此外,我们计划将 AWS CDK 用作 CI/CD 的一部分,即使用 Jenkins 运行它以将软件部署到目标环境。之前我们一直使用 Jenkins 的 Salt 来编排所有这些。

注意:我已经看到了这个问题:How to perform database schema migrations after deploying with AWS CDK?,但这个问题不同,因为这更多的是关于软件兼容性,我认为那里的答案错过了实际问题。

【问题讨论】:

    标签: amazon-web-services relational-database amazon-rds aws-cdk alembic


    【解决方案1】:

    我认为使用 CloudFormation/CDK 将持久性资源与应用程序资源分离到单独的堆栈(数据/网络/应用程序)中始终是一个很好的模式。这将确保在更新任何下游堆栈之前完全更新相关堆栈中的所有内容。然后我认为将架构更新代码放在通过数据堆栈中的CustomResource 调用的 lambda 中将允许 CDK 在更新应用代码之前执行架构更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 2015-04-15
      • 2019-11-12
      • 1970-01-01
      • 2013-04-17
      • 2019-01-25
      • 1970-01-01
      相关资源
      最近更新 更多