CodeDeploy - отличное решение вашей проблемы. Если он настроен правильно, он может автоматически развертываться в новых экземплярах EC2, которые создаются с помощью автомасштаба. Чтобы получить эту работу, вам понадобятся три вещи:
- Группа автоматического масштабирования, которая запускает экземпляры с установленным и запущенным последним хост-агентом.
- Код Разверните группу развертывания, настроенную для развертывания в этой группе автоматического масштабирования (в качестве группы автоматического масштабирования не по тегам).
- Целевая версия для автоматического развертывания в новых экземплярах. Если целевой ревизии нет, Code Deploy увидит запуск экземпляра, но ничего не будет внедрять.
Это учебник, который вы можете использовать, чтобы начать работу: Tutorial: Using AWS CodeDeploy to Deploy an Application to an Auto Scaling Group. В этом учебном пособии вы пройдете через выемку AMI с установленным агентом и настройте группу развертывания для развертывания вашего кода в новых экземплярах.
Если вы запекаете AMI с предварительно установленным агентом, вам необходимо регулярно обновлять это изображение с помощью релизов агента. Как только агент будет установлен, он обновится, но автоматическое масштабирование может привести к сбою запуска вашего экземпляра, если версия агента больше не поддерживается Code Deploy. Для фактического использования продукции я бы рекомендовал не выпекать AMI и вместо этого устанавливать новейшего агента при запуске ваших экземпляров. (В ближайшее время нужно будет обновить руководство для использования этого метода.)
Вы можете настроить свои экземпляры для автоматической загрузки и запуска последней установки при загрузке. По сути, вы вставляете скрипт оболочки в качестве пользовательских данных при создании группы автоматического масштабирования.
Например, я тестировал следующий скрипт на Amazon Linux (взятый из Set Up a New Amazon EC2 Instance to Work with AWS CodeDeploy):
#!/bin/bash
yum -y update
yum install -y aws-cli
cd /home/ec2-user
aws s3 cp s3://aws-codedeploy-us-east-1/latest/install . --region us-east-1
chmod +x ./install
./install auto
Вы должны быть в состоянии вставить это в качестве user data
при создании группы Auto Scaling. Для автоматического масштабирования вы устанавливаете это при создании конфигурации запуска в разделе сведений конфигурации -> расширенные детали.
Чтобы настроить группу развертывания и установить целевую версию:
- Создать или изменить группу развертывания включить группу Auto Scaling. (Примечание: для этого необходимо создать группу автоматического масштабирования.)
- Убедитесь, что в группе автоматического масштабирования есть не менее 1 экземпляра.
- Разверните комплект артефактов, который вы хотите автоматически развернуть в группу развертывания.
- Предполагая, что шаг 3 был успешным, группа развертывания теперь будет иметь набор пакетов, поскольку это целевая ревизия. Для автоматического развертывания это становится известной хорошей версией для развертывания.
Новые экземпляры, которые запускаются с помощью автоматического масштабирования в этой группе автоматического масштабирования, будут иметь целевую ревизию группы развертывания, автоматически развернутой для них. Исправления из неудавшихся ручных развертываний автоматически не будут развернуты автоматически.
Как эта стратегия развертывания работает при развертывании новой версии приложения? Например, скажем, я пишу сценарий пользовательских данных, который вытаскивает «последнюю» версию упакованного приложения из S3. Теперь, когда я запускаю задание сборки (например, через Travis-CI) для развертывания моего приложения, оно будет упаковывать и загружать приложение на S3, а затем я хочу, чтобы каждый экземпляр в группе был выключен и заменен (предпочтительно, один). Как это можно достичь? – Josh
У этого должны быть свои собственные вопросы: как я могу инициировать развертывание в CodeDeploy из TravisCI? Как выполнить сине-зеленое развертывание с помощью CodeDeploy? В комментариях было бы немного длиннее. –
Я создал новый вопрос здесь, если вы хотите ответить;) http://stackoverflow.com/questions/32635428/what-is-a-good-way-to-deploy-a-distributed-application- используя-codedeploy-и-CI – Josh