我在创建 Elastic Beanstalk 环境之前创建了我的 RDS 实例。两者一起工作没有问题,但我希望将它们链接在一起,并通过RDS_*
环境变量访问 RDS 参数。
Elastic Beanstalk 配置页面说:
虽然第一个链接就地创建了一个 RDS 实例并将其链接到当前环境,但第二个链接只是重定向到此文档页面。,不幸的是,它只解释了如何创建一个新的 RDS 实例,而不是如何链接现有的实例。
如何将现有 RDS 实例关联到我的 Elastic Beanstalk 环境?
我在创建 Elastic Beanstalk 环境之前创建了我的 RDS 实例。两者一起工作没有问题,但我希望将它们链接在一起,并通过RDS_*
环境变量访问 RDS 参数。
Elastic Beanstalk 配置页面说:
虽然第一个链接就地创建了一个 RDS 实例并将其链接到当前环境,但第二个链接只是重定向到此文档页面。,不幸的是,它只解释了如何创建一个新的 RDS 实例,而不是如何链接现有的实例。
如何将现有 RDS 实例关联到我的 Elastic Beanstalk 环境?
“选择”的答案是正确的,但我想添加一些额外的信息,因为大多数同时使用 EB 和 RDS 的人也应该有相同的要求——即使他们还不知道。
第一个问题:为什么要RDS实例存在于EB环境之外? 答:这样 RDS 实例的生命周期与 EB 环境的生命周期无关。即当你删除一个环境时,你不想用它破坏数据库。您想要将 RDS 实例实际绑定到您的环境的原因很少。
独立于 EB 设置 RDS 的一个问题是您不会自动填充 RDS_* 变量,因此需要检索它们的值并通过 Web 控制台或 .ebextensions 自行填充它们。不过,不建议您在代码中添加凭据,因为这可能是一个安全漏洞。
但是,下一个问题是,如果您想以编程方式创建环境(例如蓝绿零停机部署),那么您需要一个解决方案来解决如何每次都填充敏感的 RDS 值(例如密码)。不幸的是,这需要您进一步降低 AWS 堆栈并使用 CloudFormation 模板。
理想的解决方案是对 EB 的增强,以便问题中提到的“使用现有数据库”链接实际上允许您手动关联现有 RDS 数据库,然后再次自动填充 RDS_* 环境变量,而不是将您重定向到无用的文档. AWS Support 表示,这已作为一项功能请求提出,但当然没有给出时间表。
AWS 支持人员的回答:
我最近需要这样做,并且还想使用 AWS CLI/EB CLI 自动执行这些步骤。无论如何,这基本上是我遵循的步骤(假设您已经创建了一个 RDS 实例):
aws ec2 create-security-group
(AWS CLI) 并使用 (AWS CLI) 将其与 RDS 实例相关联aws rds modify-db-instance
。eb init
了 (EB CLI))。aws rds describe-db-instances
。RDS_*
当您创建环境(或稍后部署环境)时,使用该数据在 EB 实例上设置环境变量。您可以使用eb create
/eb deploy
(EB CLI) 执行此操作。当您最初创建环境时,它会降级,因为访问 RDS 数据库的安全组没有正确设置。aws elasticbeanstalk describe-configuration-settings
(AWS CLI)。aws ec2 authorize-security-group-ingress
(AWS CLI),它使用 VPC 安全组(而不是数据库安全组)。如果您所在的地区支持数据库安全组,您可能可以实现相同的效果。设置入站流量规则时,请确保为数据库引擎使用正确的协议和端口。aws rds modify-db-instance
(AWS CLI))。eb deploy
(EB CLI))。我不得不重新部署,因为我在部署上运行迁移。主要是这样。现在,只要您保持主机名和数据库凭证相同,您就应该能够在不关心 EB 实例的情况下扩大/缩小 RDS 实例。您也可以使用该方法进行蓝/绿部署(但您可能需要执行一些额外的步骤来撤销安全组访问)。
通过配置向 EB EC2 实例添加现有安全组的最简单方法是使用https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/中描述的简单文件安全配置/安全组-addexisting.config
例如:
我面临同样的问题并使用以下步骤修复:
1) 转到 EC2 实例并记下您的安全组示例“sg-121212121212”
2) 转到 RDS 安全组 ad=nd 入站流量
3)编辑规则选择所有流量并添加新的ebs安全组“sg-121212121212”
希望它会有所帮助
在 Elastic 下创建 RDS;它将添加新的正确安全组;修改旧有RDS的安全组;在网络配置中设置正确的连接字符串,一切正常......