Elastic Beanstalk:在同一可用区创建 EC2 和 RDS 实例

Posted

技术标签:

【中文标题】Elastic Beanstalk:在同一可用区创建 EC2 和 RDS 实例【英文标题】:Elastic Beanstalk: Create EC2 and RDS instances in the same Availibity Zone 【发布时间】:2014-08-22 11:12:58 【问题描述】:

我是 Elastic Beanstalk 的新手,我对创建 EC2 和 RDS 实例的位置有一个“简单”的问题。在创建、删除环境和谷歌搜索解决方案的几个小时里,我没有想法。

这个问题看起来很简单。我希望 EC2 和 RDS 实例位于同一可用区中,这样我就不必为可用区之间的流量付费。但似乎创建它们的区域是随机的(1a-1c)。在“配置”选项卡中,我看到在“实例”下配置了“可用区:任何”。但是当我编辑实例配置时,没有选项可以更改它。

实际区域无关紧要。重要的是所有实例都创建在同一个区域中。

谢谢。

【问题讨论】:

【参考方案1】:

aws:autoscaling:asg:Custom Availability Zones 选项不适用于现代“VPC”Elastic Beanstalk 环境。

你会得到错误:Custom Availability Zones option not supported for VPC environments

相反,您必须将通过aws:ec2:vpc:Subnets 选项提供的子网限制为仅在您希望实例运行的可用区中指定子网。

【讨论】:

子网调整也可以通过配置-> VPC部分下的控制台进行,其中提供了AZ、ELB和EC2选项【参考方案2】:

这是可能的。您可以为 EC2 实例和 RDS 数据库指定自定义可用区。您可以使用.ebextensions 来实现这一点。在您的应用程序源中创建一个名为 .ebextensions 的目录。在此目录中创建一个名为“01-rds-setup.config”的文件。此目录中的配置文件按其名称的字典顺序处理。 假设这是唯一将被处理的文件。

要配置 EC2 可用区,请使用“aws:autoscaling:asg”命名空间下的“自定义可用区”选项设置。 here 提供了有关此选项设置的文档。 要配置 RDS 可用性区域,您可以覆盖 RDS 资源的属性。有关覆盖资源属性的更多文档,请阅读this。

.ebextensions/01-rds-setup.config 文件的内容:

option_settings:
   - namespace: aws:autoscaling:asg
     option_name: Custom Availability Zones
     value: us-west-2a
Resources:
   AWSEBRDSDatabase:
     Type: AWS::RDS::DBInstance
     Properties:
        AvailabilityZone: us-west-2a

确保从控制台启动具有 RDS 的 Elastic Beanstalk 环境时未选择多可用区选项。这应该适用于您的用例。

【讨论】:

谢谢。这听起来很有希望。当我上传新版本并且RDS服务器位于不同的区域时,旧的会被删除并设置新的,对吗?因为我明天要去度假,所以我还需要一段时间才能测试它。 我希望 RDS 与数据一起被删除,并且在预期的可用区域中启动了一个新的 RDS。 (尚未测试此替换方案,但上述 ebextension 应该适用于新环境)。为了安全起见,我建议尝试新环境。 啊忘记了可以在创建新环境的时候上传应用程序版本,而不是之后。

以上是关于Elastic Beanstalk:在同一可用区创建 EC2 和 RDS 实例的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Beanstalk Procfile 中不可用的环境变量

“解码器 jpeg 不可用”在 AWS Elastic Beanstalk 上使用 Pillow

Elastic Beanstalk、Java Spring Boot 和 RDS 多可用区部署

没有可用的包 nodejs。错误:无事可做。 Elastic Beanstalk 上的 Rails 应用程序

AWS Elastic Beanstalk Worker - 根据可用队列消息的数量进行扩展

Amazon Elastic Beanstalk Worker cronjob (SQS) 多次触发同一消息