将AWS RDS实例重置为初始状态的最快方法?

问题描述 投票:6回答:2

我正在尝试在弹性beanstalk上创建一个简单的postgres RDS支持的CRUD Web应用程序的暂存版本。此暂存版本的目的是在将这些更改重新部署到生产环境之前,在实施新代码更改时运行集成测试。

我当前遇到的问题是重置临时堆栈。我想在集成测试开始时使用空白数据库实例。然而,重新部署新的RDS实例需要几分钟,这意味着集成测试需要很长时间(> 20分钟)才能运行。

由于它是在弹性beanstalk上,它在VPC中,因此用SQL命令重置数据库,似乎CI服务器必须用ssh隧道做一些棘手的事情,这对于那个简单的(至少对我而言)也是如此。

是否有快速方法将正在运行的RDS实例重置为空白状态以进行测试?

postgresql amazon-web-services amazon-rds
2个回答
5
投票

我认为你想要的是拥有空白数据库(与空白RDS实例相比),这里有几个选项可以做到这一点:

1)最佳选择IMO,但可能需要一些编码 - postgresql支持保存点,因此您可以构建测试,它们将始终保持数据库清洁(对本地测试也很有用)。我们的想法是在开始测试之前创建一个保存点,并在最后回滚到该保存点。这样,测试所做的所有更改都将被删除。

2)当您的测试开始时,您可以运行SQL命令来删除/创建数据库。您的测试可以连接到数据库,因此您可以从代码中执行此操作,不需要通过ssh执行此操作。如果数据量很小,您可以为每个测试运行创建一个新数据库。您可以将其命名为“mydb20160115101112”(具有当前日期和时间)。

3)实际上也可以从CI配置中删除/创建数据库(也没有ssh或其他复杂的东西),您的登台实例已经可以访问RDS,因此您可以使用psql运行一些SQL命令,如下所示:

psql -c "drop database mydb20160115101112;" --dbname=template1

要以这种方式使用psql(无需输入用户名/密码),您需要创建一个与系统用户同名的postgresql用户(确保为CI使用的系统用户创建postgresql)。


0
投票

如果您在Elastic Beanstalk的帮助下创建RDS实例,请考虑我的解决方案。这不适用于外部创建和连接的RDS。

对于我的用例,我通过控制台简单地重建EB环境,找到了一个非常简单的解决方案。这会自动创建具有相同设置的新RDS数据库实例,但不会应用任何快照,因此新数据库为空。在使用Django应用新的迁移时,这非常有用。

希望这是有用的,更多信息在这里:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environment-management-rebuild.html

© www.soinside.com 2019 - 2024. All rights reserved.