AWS Elastic Beanstalk – 如何将现有环境从Ruby 2.1升级到Ruby 2.2

AWS Elastic Beanstalk – 无法克隆最新平台eb upgrade从Ruby 2.1 eb upgrade到Ruby 2.2

我一直在粉碎这个。 早在5月,AWS宣布他们的Ruby Elastic Environments现在提供Ruby-2.2(例如ruby-2.2-(passenger-standalone)ruby-2.2-(puma) )。 我无法将现有的ruby-2.1环境升级到ruby-2.2。 看来我必须完全重建它们……这看起来很傻? 有没有其他人经历过这个? 我只是缺少一些简单的东西吗?

额外的信息

在我的舞台制作环境中,我一直兴高采烈地使用ruby-2.1-(passenger-standalone)几个月。 现在我想它们升级到最新的ruby-2.2平台。 AWS文档说这非常简单,实际上他们的一些文档甚至似乎表明你可以使用eb clone --update 。 我正在使用的EB CLI 3.4.5中不存在该标志:(此外,Web控制台具有Clone with Latest Platform选项菜单项,但它已被禁用。

看来,我所能做的就是到达最新的Ruby-2.2实例,就是从头开始创建一个全新的环境。 这非常令人讨厌。

所以这就是我尝试过的……

 $ eb status Environment details for: staging Application name: xyz Region: us-west-2 Deployed Version: fbe7 Environment ID: someId Platform: 64bit Amazon Linux 2015.03 v1.4.3 running Ruby 2.1 (Passenger Standalone) Tier: WebServer-Standard CNAME: bla.bla.bla.elasticbeanstalk.com Updated: 2015-06-26 22:48:59.689000+00:00 Status: Ready Health: Green 

太棒了,证实我使用的是Ruby 2.1。 所以让我们尝试升级:

 $ eb upgrade Environment already on most recent platform version. 

好的,那很好,那么平台本身呢:

 $ eb platform select It appears you are using Ruby. Is this correct? (y/n): y Select a platform version. 1) Ruby 2.2 (Puma) 2) Ruby 2.2 (Passenger Standalone) 3) Ruby 2.1 (Puma) 4) Ruby 2.1 (Passenger Standalone) 5) Ruby 2.0 (Puma) 6) Ruby 2.0 (Passenger Standalone) 7) Ruby 1.9.3 (default is 1): 2 

所以现在,这是我的平台设置:

 $ eb platform show Current default platform: Ruby 2.2 (Passenger Standalone) New environments will be running: 64bit Amazon Linux 2015.03 v1.4.3 running Ruby 2.2 (Passenger Standalone) Platform info for environment "staging": Current: 64bit Amazon Linux 2015.03 v1.4.3 running Ruby 2.1 (Passenger Standalone) Latest: 64bit Amazon Linux 2015.03 v1.4.3 running Ruby 2.1 (Passenger Standalone) 

因此, 新环境将利用Ruby-2.2版本。 这很好,但是我是否真的必须退出我已配置的Ruby-2.1版本而不是新创建的Ruby-2.1版本? 来吧?

我通过使用aws cli (而不是eb cli )找到了解决方案:

 aws elasticbeanstalk update-environment --solution-stack-name "64bit Amazon Linux 2016.03 v2.1.0 running Ruby 2.3 (Puma)" --environment-name "dev-bg-123456" --region "us-east-1" 

aws cli可以用自制软件安装:

 brew install awscli 

我对这一挑战的解决方案是:

  1. 推出全新的环境。
  2. 创建Web应用程序或工作者。
  3. 选择您想要的环境,可能是最新的环境。 在我的情况下乘客使用Ruby-2.2。
  4. 我选择部署示例应用程序,以便新环境成功。
  5. 选择新环境的其余选项并启动它。

成功启动后,我设置了所有环境变量; 例如我的所有数据库,smtp,RAILS_ENV / RACK_ENV等。然后我转到我之前部署的应用程序,并将我最​​新的质量版本部署到全新的环境中。

人们会同意这比简单的eb upgrade要多得多。 蘸酱。

我找到了解决这个问题的不同方法。

我使其工作的方式类似于上面的注释,但我设法更新现有的beanstalk环境,而不是将代码部署到一个全新的。

我做的步骤:

  1. 在运行我需要的ruby版本的beanstalk上启动了一个全新的环境,2.3(在我的情况下,我需要从Ruby 2.2到Ruby 2.3的更新)
  2. SSH-ed到新实例并安装了我的应用程序所需的所有依赖项(包,开发工具等) – 您也可以在.ebextensions目录中执行这些操作。
  3. 从运行ruby 2.3的实例创建了一个自定义AMI,并安装了所有内容
  4. 使用了Ralph发布的相同命令,但有一些tweek:
 aws elasticbeanstalk update-environment --region "REGION" --environment-name "ENV_NAME" --solution-stack-name "64bit Amazon Linux 2018.03 v2.8.1 running Ruby 2.3 (Puma)" --option-settings Namespace=aws:autoscaling:launchconfiguration,OptionName=ImageId,Value="ami- xxxxxxxx" 

AMI选项设置对我来说很关键,因为这帮助我安装了ruby 2.3.7的AMI用于在现有环境中启动新实例。 以前只是在每次尝试时击中拉尔夫建议的命令都失败了。

Interesting Posts