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


22

在创建Elastic Beanstalk环境之前,我已经创建了RDS实例。两者可以正常工作,但是我希望将它们链接在一起,并且可以通过RDS_*环境变量访问RDS参数。

Elastic Beanstalk配置页面显示:

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

尽管第一个链接就地创建了RDS实例并将其链接到当前环境,但是第二个链接仅重定向到此文档页面。,不幸的是,它仅说明了如何创建新的RDS实例,但没有说明如何链接现有实例。

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

Answers:


24

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

第一个问题:为什么要让RDS实例存在于EB环境之外? :这样,RDS实例的生存期就不会与EB环境的生存期挂钩。即,当您删除环境时,您不想破坏数据库。您几乎没有理由将RDS实例实际绑定到您的环境。

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

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

理想的解决方案是对EB的增强,因此问题中提到的“使用现有数据库”链接实际上使您可以手动关联现有RDS数据库,然后再次自动填充RDS_ *环境变量,而不是将您重定向到无用的文档。AWS支持人员说,这是作为功能请求提出的,但是当然没有给出时间表。


一年后,似乎仍然如此?
lifeofguenter 2015年

1
据我所知仍然如此。
rgareth 2015年

我们如何应对这个AWS?
马修2016年

一年后,它仍然一样。
卡兰·库玛

添加rds的步骤docs.aws.amazon.com/elasticbeanstalk/latest/dg/…(仅出于对像我这样的人进行搜索的目的)您不会创建环境配置,而是在创建时通过配置文件加载它。这应该添加env vars,因此只要不更改,就可以了吗?
曼努埃尔

18

来自AWS支持的答案:

为了将现有数据库与EB环境相关联,您必须通过管理控制台对其进行快照,然后在“数据层”下选择“创建新的RDS数据库”。由于RDS实例绑定到Beanstalk环境的基础Cloudformation堆栈中,因此似乎没有一种方法可以将正在运行的RDS实例与现有的EB环境关联起来而不从快照中启动新的实例。如果您为当前RDS实例创建快照,则可以根据需要在EB中重新启动它。

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


我采用了第二种方法,使用RDS_ *名称定义环境变量以遵循约定。安全组的设置非常严格,但是将数据库密码放在环境变量中仍然感到有些松动。
约瑟夫·希迪

@velotron对我一样,但是我已经习惯了!
本杰明

2

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

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

仅此而已。现在,只要保持主机名和数据库凭据相同,就可以在不关心EB实例的情况下扩展/缩小RDS实例。您也可以使用这种方法进行蓝色/绿色部署(但是您可能还需要执行一些额外的步骤来撤消安全组访问权限)。



0

我遇到了同样的问题,并使用以下步骤进行了修复:

1)转到EC2实例,并记下您的安全组示例“ sg-121212121212”

2)转到RDS安全组ad = nd入站流量

3)编辑规则,选择所有流量并添加新的ebs安全组“ sg-121212121212”

希望对您有所帮助


-2

在Elastic下创建RDS; 它将添加新的正确的安全组;修改旧的现有RDS的安全组;在网络配置上设置正确的连接字符串,所有工作...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.