Elastic Beanstalk:如何将 RDS 模式回滚到已知的良好状态?

Posted

技术标签:

【中文标题】Elastic Beanstalk:如何将 RDS 模式回滚到已知的良好状态?【英文标题】:Elastic Beanstalk: how to roll back the RDS schema to a known good state? 【发布时间】:2014-11-12 11:58:45 【问题描述】:

我对如何实现一个基于 Elastic Beanstalk 的系统感到有些困惑,该系统允许我在部署错误的情况下将我的服务器代码和 RDS 架构回滚到已知的良好状态。

我有一个应用程序在每次部署时处理前向/向上模式迁移(使用.ebextensions/)。但是,请考虑以下情况:

    Elastic Beanstalk 正在运行我的应用程序和数据库架构的版本 1。 我推送了我的应用程序的第 2 版,它将 RDS 架构迁移到第 2 版。 我重新部署了我的应用程序的版本 1,但是,RDS 架构仍然是版本 2

我认为我不能在第 3 步回滚迁移,因为从第 2 版开始的向后/向下迁移此时不存在。

那么,解决这个问题的最佳方法是什么?我是否应该使用 capistrano 之类的东西来代替 Elastic Beanstalk 部署来获得对流程的更多控制?

【问题讨论】:

【参考方案1】:

正如您所推测的那样,在 ElasticBeanstalk 中并没有很好的集成机制来回滚架构更改。如果部署失败,最好的情况是模式更改数据库事务将自动回滚。在这种情况下,您只需修复出错的迁移并将其重新推送到 EB。

如果您不那么幸运(例如,运行多次迁移,但中途失败),并且您必须手动迁移您的架构,您可以:

让您的本地应用程序使用 RDS 数据库(假设您已将防火墙配置为允许),然后运行迁移。

(或)

SSH 进入您环境的一个 EC2 实例并从那里运行迁移。

我很想知道是否有更好的自动方法。但是,当迁移失败(并且您需要回滚它们)时,您通常不得不手动修复它们。

【讨论】:

以上是关于Elastic Beanstalk:如何将 RDS 模式回滚到已知的良好状态?的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Beanstalk:如何将 RDS 模式回滚到已知的良好状态?

如何通过 RDS 复制到 Elastic Beanstalk 克隆

无法将 RDS 实例添加到 Elastic Beanstalk

如何使用外部 RDS 数据库在 AWS Elastic Beanstalk 中设置 Laravel 应用程序

从 VPC 中的 Elastic Beanstalk 实例访问 RDS

如何从 Elastic Beanstalk 环境中删除 RDS 数据层