2014-11-13 1 views
16

Я хочу, чтобы автомасштабировать инфраструктуру, когда загрузка становится высокой. Я запускаю свою инфраструктуру по адресу AWS. У меня есть требование, когда мне нужно вытащить код приложения с Github, когда произойдет autoscaling. Поскольку код изменяется часто, мы не можем взять AMI и запустить экземпляр с этого AMI. Поэтому я хочу вывести последний код с repositories. AWS только запустила сервис под названием AWS CodeDeploy. Как я могу использовать эту службу для автоматизации процесса вытягивания кода при запуске экземпляров?Могу ли я использовать код AWS Развертывание для вытягивания кода приложения при автомасштабировании?

P.S. Я написал init script для автоматического присоединения EIP, белого списка этого IP-адреса в разных группах безопасности и поместить экземпляр под load-balancer, когда экземпляр загружает и отменяет все, когда экземпляр заканчивается при автомасштабировании.

ответ

24

CodeDeploy - отличное решение вашей проблемы. Если он настроен правильно, он может автоматически развертываться в новых экземплярах EC2, которые создаются с помощью автомасштаба. Чтобы получить эту работу, вам понадобятся три вещи:

  1. Группа автоматического масштабирования, которая запускает экземпляры с установленным и запущенным последним хост-агентом.
  2. Код Разверните группу развертывания, настроенную для развертывания в этой группе автоматического масштабирования (в качестве группы автоматического масштабирования не по тегам).
  3. Целевая версия для автоматического развертывания в новых экземплярах. Если целевой ревизии нет, 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. Для автоматического масштабирования вы устанавливаете это при создании конфигурации запуска в разделе сведений конфигурации -> расширенные детали.

Чтобы настроить группу развертывания и установить целевую версию:

  1. Создать или изменить группу развертывания включить группу Auto Scaling. (Примечание: для этого необходимо создать группу автоматического масштабирования.)
  2. Убедитесь, что в группе автоматического масштабирования есть не менее 1 экземпляра.
  3. Разверните комплект артефактов, который вы хотите автоматически развернуть в группу развертывания.
  4. Предполагая, что шаг 3 был успешным, группа развертывания теперь будет иметь набор пакетов, поскольку это целевая ревизия. Для автоматического развертывания это становится известной хорошей версией для развертывания.

Новые экземпляры, которые запускаются с помощью автоматического масштабирования в этой группе автоматического масштабирования, будут иметь целевую ревизию группы развертывания, автоматически развернутой для них. Исправления из неудавшихся ручных развертываний автоматически не будут развернуты автоматически.

+0

Как эта стратегия развертывания работает при развертывании новой версии приложения? Например, скажем, я пишу сценарий пользовательских данных, который вытаскивает «последнюю» версию упакованного приложения из S3. Теперь, когда я запускаю задание сборки (например, через Travis-CI) для развертывания моего приложения, оно будет упаковывать и загружать приложение на S3, а затем я хочу, чтобы каждый экземпляр в группе был выключен и заменен (предпочтительно, один). Как это можно достичь? – Josh

+0

У этого должны быть свои собственные вопросы: как я могу инициировать развертывание в CodeDeploy из TravisCI? Как выполнить сине-зеленое развертывание с помощью CodeDeploy? В комментариях было бы немного длиннее. –

+0

Я создал новый вопрос здесь, если вы хотите ответить;) http://stackoverflow.com/questions/32635428/what-is-a-good-way-to-deploy-a-distributed-application- используя-codedeploy-и-CI – Josh