Назад | Перейти на главную страницу

Как выполнить обновление до последней версии AMI в AWS Elastic Beanstalk?

Я запускаю приложение на AWS Elastic Beanstalk, и похоже, что мне нужно создать новую среду, если я хочу использовать последнюю версию AMI.

Если бы я знал, каков последний идентификатор AMI, я мог бы обновить его в конфигурации среды.

Есть ли место, где я мог бы найти ID последних образов Elastic Beanstalk AMI или, что еще лучше, можно ли автоматически заменять экземпляры новой версией при выпуске новой версии?

Рекомендуемый и поддерживаемый способ обновления среды AWS Beanstalk задокументирован. Вот обсуждаются обновления управляемой платформы Вот, честно говоря, я бы придерживался этого правила, если вы хотите, чтобы все было просто (и в этом вся суть Beanstalk), теоретически вы будете получать только постоянные обновления, а AWS будет управлять процессом, чтобы не было простоев.

Итак, я просто хочу повторить, что обновления управляемой платформы, вероятно, понадобятся вам или кому-либо еще из Google, но если вы хотите узнать последний предоставленный AWS AMI для вашей среды Beanstalk, это можно сделать довольно тривиально с помощью AWS CLI (спасибо к разумным соглашениям об именах от Amazon в своих AMI).

Начиная с экземпляра из вашей среды, опишите экземпляр, чтобы получить текущий AMI (пропустите, если вы уже знаете текущий AMI).

aws ec2 describe-instances --instance-ids i-0909613f35ec0ffee --query 'Reservations[*].Instances[*].ImageId' --output text

ami-35290a56

Возьмите полученный AMI ID и опишите его.

aws ec2 describe-images --image-ids ami-35290a56 --query 'Images[*][Architecture, Hypervisor, Name, RootDeviceType, VirtualizationType]' --output json

[
    [
        "x86_64",
        "xen",
        "aws-elasticbeanstalk-amzn-2016.03.0.x86_64-python34-hvm-201603290718",
        "ebs",
        "hvm"
    ]
]

Мы можем использовать вывод вышеупомянутого как вход для нового, отсортированного describe-images но на этот раз мы заменим временные метки на * символы подстановки, например:

aws ec2 describe-images --filters 'Name=architecture,Values=x86_64' 'Name=virtualization-type,Values=hvm' 'Name=owner-alias,Values=amazon' 'Name=name,Values=aws-elasticbeanstalk-amzn-*.x86_64-python34-hvm-*' --query 'sort_by(Images[*], &Name)[-1].ImageId' --output text

ami-1be5de78

Благодаря мощным возможностям лексической сортировки и ISO 8601 мы получили последний AMI, который в моем примере ami-1be5de78.

aws ec2 describe-images --image-ids ami-1be5de78 --query 'Images[*].Name' --output text

aws-elasticbeanstalk-amzn-2016.09.0.x86_64-python34-hvm-201612200708

Опять же, я бы не рекомендовал вам пытаться перейти на этот AMI вручную, у Beanstalk есть все необходимое, чтобы сделать все это за вас!

Похоже, даже если вы измените AMI на правильный AMI, который использует ElasticBeanstalk. Кажется, это не работает должным образом. Он пропускает все файлы. Это не работает.

Я думаю, вам нужно запустить новую среду Elastic Beanstalk с обновленным AMI. Сделайте так, чтобы все работало, а затем поменяйте URL-адреса среды.

Вы можете использовать функции управляемых обновлений, которые поставляются с eb, но для этого придется заплатить за расширенные отчеты о работоспособности. Или используйте команду 'eb platform show'; В рабочем приложении есть cron, который запускает CURRENT =eb platform show your_env_name | sed -n '5p' | cut -d: -f2- | tr -d '[[:space:]]' ПОСЛЕДНИЙ =eb platform show your_env_name | sed -n '6p' | cut -d: -f2- | tr -d '[[:space:]]' - Затем сравните их, и, если они разные, вы можете использовать eb clone (по умолчанию - новая версия), а затем заменить cname.

Перейдя на панель управления вашего приложения, найдите «Конфигурация» и нажмите «Изменить».

Вы должны увидеть список, в котором вы можете выбрать платформу. Последняя версия указана в этом списке. Выбор платформы

AWS EB использует определенные настройки для разных языков программирования. Вы можете найти список настроек в документации http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts.platforms.html

Существуют таблицы, показывающие, какую версию AMI использует каждая платформа.

Однако я не нашел способа запускать эти обновления автоматически. На самом деле я предпочитаю просматривать изменения платформы и тестировать их перед развертыванием.

Выберите свой сервис в Elastic Beanstalk. Вы увидите обзор на панели инструментов. В правой части панели управления вы можете увидеть конфигурацию вашего AMI. Выберите «Изменить обновление» или «Понизить AMI». На этом этапе вы собираетесь заменить свой экземпляр. Так что сделайте резервную копию или клонируйте.

Я смог обновить свое текущее приложение, размещенное на Beanstalk, до последней версии AMI Amazon Linux, выполнив следующие действия.

1- Войдите в Консоль AWS и перейдите на портал Beanstalk.

2- Перейдите на страницу конфигурации вашего приложения и нажмите «Экземпляры».

3- Найдите идентификатор AMI, он должен быть таким: AMI-xxxxxx.

4- Возьмите идентификатор AMI, вернитесь в консоль EC2 и нажмите AMI.

5- Измените представление на общедоступные изображения и найдите идентификатор AMI, полученный ранее из конфигурации Beanstalk.

6- Запустите этот AMI как новый экземпляр.

7- После запуска войдите в экземпляр и настройте его в соответствии с требованиями ваших приложений.

8- Как только вы будете удовлетворены всем, что вам нужно, создайте AMI-образ этого нового экземпляра.

9- Возьмите новый идентификатор экземпляра AMI, который был создан на шаге 8, и примените его к конфигурации приложения Beanstalk.

10. Он не удалит старый экземпляр и не создаст новый экземпляр с вашим настроенным AMI, а также развернет ваше последнее приложение на новых экземплярах.