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

尽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实例):
aws ec2 create-security-group (AWS CLI),并使用aws rds modify-db-instance (AWS CLI)将其与RDS实例相关联。 eb init (EB CLI))。 aws rds describe-db-instances 。 RDS_*环境variables。 您可以使用eb create / eb deploy (EB CLI)来执行此操作。 当您最初创build环境时,它将会降级,因为访问RDS数据库的安全组设置不正确。 aws elasticbeanstalk describe-configuration-settings (AWS CLI)。 aws ec2 authorize-security-group-ingress我使用了aws ec2 authorize-security-group-ingress (AWS CLI) 。 如果在您的地区支持,您可能也可以实现与数据库安全组相同的function。 设置入站stream量规则时,确保您使用正确的协议和端口为您的数据库引擎。 aws rds modify-db-instance (AWS CLI))。 eb deploy (EB CLI))。 我必须重新部署,因为我在部署上运行迁移。 大部分是这样。 现在,只要保持主机名和数据库凭据相同,您就可以在不考虑EB实例的情况下向上/向下扩展RDS实例。 您也可以使用该方法进行蓝/绿部署(但您可能需要执行一些额外的步骤来撤销安全组访问权限)。
在Elastic下创buildRDS; 它会增加新的正确的安全组; 修改旧有RDS的安全组; 设置正确的连接string在networkingconfiguration和所有工作…