AWS EB 和 RDS:引擎名称 mysql 和存储类型 gp2 的存储大小无效

AWS EB 和 RDS:引擎名称 mysql 和存储类型 gp2 的存储大小无效

我正在尝试将我的 (python/django) 应用程序部署到 AWS Elastic Beanstalk,但出现了错误。过去几个月的部署一直运行良好,所以我很困惑原因可能是什么。错误如下:

ERROR: Updating RDS database named: aa1xxxxxxxxx failed Reason: Invalid storage size for engine name mysql and storage type gp2: 5

有人帮助我完成了初始 EB+RDS 设置,因此我并不完全了解从一开始是如何设置的。但是,现在当我进入 AWS 控制台时,我会看到一个 RDS 实例,其中有一个字段设置storage100GiB,当我进入 EB 配置时,我会看到与现有 RDS 实例的连接,但这里storage只显示5 GB。我尝试将 5GB 更新为 10GB,但仍然出现相同的错误,部署仍然不起作用。

此外,Endpoint我的 EB 数据库设置看起来与我的 RDS 实例端点“aa1xxxx.yyyyyyyyy.us-west-2.rds.amazonaws.com”的 URL 相同。

AWS RDS 设置

AWS Elastic Beanstalk 数据库配置

注意:我发现了这个线,情况类似,但不完全符合我的情况,因为我能够编辑存储字段,尽管这不起作用。

答案1

看起来 RDS 实例已在 Elastic Beanstalk 之外进行了修改 - 这意味着 EB 认为正确的配置数据与实际正确的配置数据不再匹配。这是使用 Elastic Beanstalk 等工具时的一个常见问题 - 它只是其他 AWS 服务的包装器(它实际上是一组非常特定的 CloudFormation 模板的漂亮 UI),并且没有什么可以阻止您在 EB 配置设置后进入 RDS 控制台并自行摆弄设置。

gp2对于 MySQL 实例,最小存储大小为 20GB,因此您收到此错误的原因是您的 EB 环境的 5GB 存储大小配置与 RDS 实例上设置的存储类型相冲突。EB 认为存储类型是磁性的,因此不会强制执行其他存储类型规定的限制。不是 Elastic Beanstalk 发出了该错误,而是位于 EB 后面的 CloudFormation 堆栈将 EB 控制台最终控制的所有内容联系在一起。

为了解决这个问题,您需要将 Elastic Beanstalk 的环境设置为尽可能接近您的 RDS 实例的配置。我认为 Elastic Beanstalk 无法从默认磁性配置中修改 RDS 实例的存储类型。因此,您有 2 个选择:

  1. 将 EB 配置中的存储大小设置为 100GB 并保存,这样 EB 应该可以有效地与实际情况同步。应用后,它会告诉 CloudFormation 调整数据库大小。现在,由于“新”存储大小与当前大小相同,我不确定这是否会真正关闭实例以进行调整大小。它还可能会引发错误,因为新大小 == 旧大小。您可以将其修改为最小 20GB(如果您想要更低),这将执行实例调整大小,并确保 RDS 上的存储大小与 Elastic Beanstalk 的配置相匹配。您只需记住,由于存储类型限制,您不能低于 20GB。

  2. 手动将 RDS 实例的大小调整回磁性存储和 5GB 大小 - Elastic Beanstalk 认为这是事实。当然,这只有在您的数据库足够小以适合 5GB 实例时才会起作用。如果不行,您就没那么幸运了,可能值得探索选项 #1。如果它适合,此操作将把您的数据库大小调整回 Elastic Beanstalk 认为的当前大小,然后您将能够使用 EB 的配置工具再次调整数据库大小。

相关内容