jjl*_*val 5 relational-database amazon-web-services amazon-rds alembic aws-cdk
我们正在 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 架构不兼容。正在运行的软件应始终与 DB 模式相对应,即在升级 DB 模式时不应有任何旧实例在运行。
cdk deploy
当要进行数据库架构升级时,如何以受控方式进行操作,以免在旧软件版本上运行与新数据库架构不兼容的实例?
如何将数据库架构升级作为其中的一部分cdk deploy
?
关于问题 2:我们已经考虑拥有一个特殊版本的 web 应用程序,它不会成为自动缩放的一部分或对 Internet 开放,即它仅用于运行特殊的管理器命令,例如数据库模式升级。这是不必要的还是 AWS CDK 有一些机制可以通过关系数据库架构升级进行受控部署?
此外,我们计划使用 AWS CDK 作为 CI/CD 的一部分,即与 Jenkins 一起运行以将软件部署到目标环境。以前,我们一直使用 Jenkins 的 Salt 来编排所有这些。
注意:我看到过这个问题:使用 AWS CDK 部署后如何执行数据库架构迁移?但这不同,因为这更多是关于软件兼容性,我认为那里的答案错过了实际问题。
我认为 CloudFormation/CDK 将持久资源与应用程序资源分离到单独的堆栈(数据/网络/应用程序)始终是一个很好的模式。这将确保在更新任何下游堆栈之前完全更新依赖堆栈中的所有内容。然后我认为将架构更新代码放入通过数据堆栈中的CustomResource调用的 lambda 中将允许 CDK 在更新应用程序代码之前执行架构更新。
归档时间: |
|
查看次数: |
460 次 |
最近记录: |