【发布时间】: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 模式不兼容。 运行的软件应始终与数据库架构相对应,即数据库架构升级后不应有任何旧实例运行。
-
当需要进行数据库架构升级时,如何以受控方式执行
cdk deploy,以免在旧软件版本上运行与新数据库架构不兼容的实例? -
作为
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