Могу ли я использовать код AWS Deploy для вытягивания кода приложения при автомасштабировании?

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

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

Ответы

Ответ 1

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

  • Группа автоматического масштабирования, которая запускает экземпляры с установленным и запущенным последним хост-агентом.
  • Код Разверните группу развертывания, настроенную для развертывания в этой группе автоматического масштабирования (в качестве группы автоматического масштабирования не по тегам).
  • Целевая версия для автоматического развертывания в новых экземплярах. Если целевой ревизии нет, Code Deploy увидит запуск экземпляра, но ничего не будет внедрять.

Вот учебник, который вы можете использовать для начала работы: Учебное пособие: использование AWS CodeDeploy для развертывания приложения в группе автоматического масштабирования. В этом учебном пособии вы пройдете через выемку AMI с установленным агентом и настройте группу развертывания для развертывания вашего кода в новых экземплярах.

Если вы выпекаете AMI с предварительно установленным агентом, вам нужно будет регулярно обновлять это изображение с помощью релизов агентов. Как только агент будет установлен, он обновится, но автоматическое масштабирование может привести к сбою запуска вашего экземпляра, если версия агента больше не поддерживается Code Deploy. Для фактического использования продукции я бы рекомендовал не выпекать AMI и вместо этого устанавливать новейшего агента при запуске ваших экземпляров. (Учебник должен быть обновлен, чтобы использовать этот метод в ближайшее время.)

Вы можете настроить свои экземпляры для автоматической загрузки и запуска последней установки при загрузке. По существу, вы вставляете оболочку script в качестве пользовательских данных при создании группы автоматического масштабирования.

Например, я протестировал следующее script на Amazon Linux (взято из Настройка нового экземпляра EC2 Amazon для работы с 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 экземпляр.
  • Разверните набор артефактов, который вы хотите автоматически развернуть в группу развертывания.
  • Предполагая, что шаг 3 был успешным, группа развертывания теперь будет иметь этот набор пакетов в качестве целевой версии. Для автоматического развертывания это становится известной хорошей версией для развертывания.

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