AWS Elastic Beanstalk — как обновить существующую среду с Ruby 2.1 до Ruby 2.2

AWS Elastic Beanstalk: невозможно клонировать с последней платформой или eb upgrade с Ruby 2.1 на Ruby 2.2

Я ломал голову над этим. Еще в мае 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 <env-name> --update. Этого флага нет в EB CLI 3.4.5, который я использую :( Кроме того, в веб-консоли есть пункт меню Клонировать с последней платформой, но он отключен.

Похоже, что все, что я могу сделать, чтобы получить последние экземпляры 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? Давай?


person Dan    schedule 29.06.2015    source источник
comment
Что бы это ни стоило, я попытался создать новую среду с Puma пару месяцев назад и обнаружил, что эта штука совершенно сломана. Когда я вернулся к пассажиру, это просто сработало.   -  person Gabe Kopley    schedule 29.06.2015
comment
Не уверен, почему, черт возьми, этот вопрос начался с -1 голоса ... хромой соус.   -  person Dan    schedule 04.07.2015


Ответы (3)


Я нашел решение для этого, используя клиент aws (НЕ 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 можно установить с помощью homebrew:

brew install awscli
person Ralph von der Heyden    schedule 13.04.2016
comment
Это потрясающе. Спасибо, что поделился. Я даже не удосужился установить awscli, но я попробую эту технику во время моего следующего крупного обновления версии Ruby. - person Dan; 14.04.2016
comment
Привет, @Gavin, извини, это не работает для тебя. Может быть, интересно увидеть сообщение об ошибке или другой вывод для отладки? - person Ralph von der Heyden; 22.05.2016
comment
Привет @Ralph, это решение не удастся, если в файле gem указана версия ruby. Приложение не запускается, потому что версия ruby ​​не соответствует, поэтому изменение отменяется. - person Gavin; 28.05.2016
comment
Успешно обновлен с ruby ​​2.2 до 2.3 с помощью этого метода. - person Yeonho; 11.11.2016
comment
Была та же проблема, что и у @Gavin, решил ее, сначала удалив версию Ruby из Gemfile - теперь вместо этого сервер будет знать версию Ruby из среды - а затем развернуть с этим Gemfile; затем запустите команду ( aws elasticbeanstalk update-environment --solution-stack-name "64bit Amazon Linux 2016.09 v2.3.2 running Ruby 2.3 (Puma)" --environment-name "env" ). После этого не стесняйтесь повторно добавлять версию Ruby в Gemfile, но обратите внимание, что она должна совпадать с версией на их сервере, например. текущая последняя версия 2.3.3, но на сервере только 2.3.1. - person Velizar Hristov; 29.03.2017
comment
Спасибо, что поделился! У меня есть сомнения по поводу RDS. У меня есть эластичная среда beanstalk, подключенная к RDS, нужно ли мне создавать новую RDS или команда update-enviroment ничего не делает с RDS? - person MatayoshiMariano; 09.06.2017
comment
@MatayoshiMariano RDS это не коснется. - person Ralph von der Heyden; 12.06.2017
comment
@RalphvonderHeyden круто! Я использовал эту команду и успешно обновился с ruby ​​2.1 до 2.3! Спасибо! - person MatayoshiMariano; 12.06.2017
comment
Для людей, которые ищут все доступные имена стека решений, вы можете запустить следующую команду aws elasticbeanstalk list-available-solution-stacks - person Lewy; 24.08.2017
comment
Также укажите version-label для обновления вместе с соответствующими изменениями Gemfile/code (см. stackoverflow.com/a/35207353/184184) - person Lenin Raj Rajasekaran; 02.09.2017
comment
Это здорово, и жаль, что это плохо задокументировано в документации AWS. Вот пример обновления Ruby 2.3 =› 2.4 в Огайо aws elasticbeanstalk update-environment --solution-stack-name "64bit Amazon Linux 2017.09 v2.6.1 running Ruby 2.4 (Puma)" --environment-name "my-environment-blabla" --region "us-east-2" - person januszm; 17.11.2017

Мое решение этой задачи заключалось в следующем:

  1. Запустите совершенно новую среду.
  2. Создайте веб-приложение или Worker.
  3. Выберите среду, которую вы хотите, возможно, самую последнюю из лучших. В моем случае Passenger с Ruby-2.2.
  4. Я выбираю развертывание примера приложения, чтобы новая среда успешно работала.
  5. Выберите оставшиеся параметры для вашей новой среды и дайте ей запуститься.

После успешного запуска я настроил все свои переменные среды; например вся моя база данных, smtp, RAILS_ENV/RACK_ENV и т. д. Затем я перехожу к своим ранее развернутым приложениям и просто развертываю свою последнюю качественную версию в совершенно новой среде.

Можно согласиться, что это намного больше работы, чем простой eb upgrade. Ламский соус.

person Dan    schedule 03.07.2015

Я нашел другой подход к этой проблеме.

То, как я заставил это работать, похоже на комментарий выше, но мне удалось обновить существующую среду beanstalk и не развертывать код в совершенно новую.

Шаги, которые я сделал:

  1. Запустил совершенно новую среду на beanstalk с нужной мне версией ruby, 2.3 (в моем случае мне нужно было обновление с Ruby 2.2 до Ruby 2.3)
  2. SSH-ed в новый экземпляр и установил все зависимости, которые нужны моему приложению (пакеты, инструменты разработки и т. д.) - вы также можете сделать это в каталоге .ebextensions
  3. Создал пользовательский AMI из экземпляра, работающего под управлением ruby ​​2.3, со всем установленным
  4. Использовал ту же команду, которую опубликовал Ральф, но с некоторыми изменениями:
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 были для меня ключевыми, так как это помогло мне использовать AMI с установленным ruby ​​2.3.7 для запуска нового экземпляра в существующей среде. Раньше простое нажатие на предложенную Ральфом команду терпело неудачу при каждой попытке.

person Antonio Nedanoski    schedule 27.06.2018