如何将现有的RDS实例关联到Elastic Beanstalk环境?

我在创buildElastic Beanstalk环境之前创build了我的RDS实例。 两者正在一起工作,没有任何问题,但我希望将它们连接在一起,并通过RDS_*环境variables访问RDS参数。

Elastic Beanstalkconfiguration页面显示:

你没有数据库。您可以创建新的RDS数据库或使用现有的数据库。

尽pipe第一个链接就地创build了RDS实例并将其链接到当前环境,但第二个链接只是redirect到此文档页面。 ,不幸的是只解释了如何创build一个新的RDS实例,而不是如何链接现有的实例。

我如何将现有的RDS实例关联到我的Elastic Beanstalk环境?

“select”的答案是正确的,但我想补充一些额外的信息,因为大多数使用EB和RDS的人也应该有相同的要求 – 即使他们还不知道。

第一个问题 :为什么要让RDS实例存在于EB环境之外? :这样RDS实例的生命周期不会与EB环境的生命周期相关联。 即当你删除一个环境时,你不想用它来销毁数据库。 有几个原因可以让你将RDS实例绑定到你的环境。

设置独立于EB的RDS的一个问题是,您不会自动填充RDS_ *variables,因此需要通过Web控制台或.ebextensions来检索它们的值并填充它们。 不build议您向代码添加凭据,因为这可能是一个安全漏洞。

但是接下来的问题是,如果您想以编程方式创build环境(例如蓝绿色的零宕机部署),那么您需要一个解决scheme,以便每次填充敏感的RDS值(例如密码)。 不幸的是,这需要您进一步放下AWS堆栈并使用CloudFormation模板。

理想的解决scheme是对EB的增强,以便问题中提到的“使用现有数据库”链接实际上允许您手动关联现有RDS数据库,然后再次自动填充RDS_ *环境variables,而不是将您redirect到无用的文档。 AWS支持表示,这已被提出作为function要求,但当然没有时间表。

来自AWS支持的答复:

为了将现有的数据库关联到EB环境,您必须通过pipe理控制台对其进行快照,然后在数据层下select“创build新的RDS数据库”。 由于RDS实例绑定到Beanstalk环境的底层Cloudformation栈中,因此似乎没有办法将正在运行的RDS实例关联到现有的EB环境,而不从快照中启动新的RDS实例。 如果您拍摄当前RDS实例的快照,则可以根据需要在EB中重新启动它。

如果您希望RDS实例存在于环境之外,您可以简单地通过EB控制台提供连接参数作为环境variables:configuration – > Web层 – >软件configuration。 然后,你可以通过PHP读取环境variables 。

我最近需要这样做,并且希望使用AWS CLI / EB CLI自动执行这些步骤。 无论如何,这里基本上是我遵循的步骤(假设你已经创build了一个RDS实例):

  1. 确保您为RDS实例(而不是VPC默认组)设置了不同的安全组设置。 您可以使用aws ec2 create-security-group (AWS CLI),并使用aws rds modify-db-instance (AWS CLI)将其与RDS实例相关联。
  2. 初始化你的beanstalk应用程序(我使用eb init (EB CLI))。
  3. 从RDS数据库(DB名称,主机名,端口等)读取相关的configuration数据。 我使用了aws rds describe-db-instances
  4. 在创build环境(或稍后部署环境)时,使用该数据在EB实例上设置RDS_*环境variables。 您可以使用eb create / eb deploy (EB CLI)来执行此操作。 当您最初创build环境时,它将会降级,因为访问RDS数据库的安全组设置不正确。
  5. 从EBconfiguration中获取相关安全组。 您需要用于自动缩放组和弹性负载平衡器的组。 您可以使用aws elasticbeanstalk describe-configuration-settings (AWS CLI)。
  6. 对于您在步骤1中设置的安全组,将您的自动调节组授予入站stream量到您的数据库。对于使用VPC安全组(不是数据库安全组)的AWS aws ec2 authorize-security-group-ingress我使用了aws ec2 authorize-security-group-ingress (AWS CLI) 。 如果在您的地区支持,您可能也可以实现与数据库安全组相同的function。 设置入站stream量规则时,确保您使用正确的协议和端口为您的数据库引擎。
  7. 将弹性负载均衡器组添加到您的RDS实例的安全组(再次使用aws rds modify-db-instance (AWS CLI))。
  8. 重新启动或重新部署Elastic Beanstalk应用程序(例如,使用eb deploy (EB CLI))。 我必须重新部署,因为我在部署上运行迁移。

大部分是这样。 现在,只要保持主机名和数据库凭据相同,您就可以在不考虑EB实例的情况下向上/向下扩展RDS实例。 您也可以使用该方法进行蓝/绿部署(但您可能需要执行一些额外的步骤来撤销安全组访问权限)。

在Elastic下创buildRDS; 它会增加新的正确的安全组; 修改旧有RDS的安全组; 设置正确的连接string在networkingconfiguration和所有工作…