Конвейер AWS CD / CI с ASG и ELB (bitbucket)

#node.js #amazon-web-services #devops #bitbucket-pipelines #aws-code-deploy

#node.js #amazon-веб-сервисы #devops #bitbucket-конвейеры #aws-код-развертывание

Вопрос:

Я должен сначала сказать, что я относительно новичок в AWS, но нахожу его чрезвычайно полезным. Позвольте мне описать мой сценарий…

Что у меня есть на данный момент

  • Группа автоматического масштабирования (ASG)
  • Эластичный балансировщик нагрузки (ELB)
  • Конвейер CD / CI с использованием CodeDeploy и Bitbucket
  • Приложение Node / Express, обслуживающее пользовательский API в экземплярах EC2
  • VPC и подсети работают хорошо
  • AMI с кодом моего приложения

Мой вопрос

Когда ASG решает масштабировать новый экземпляр EC2, используя мой шаблон запуска и AMI, он будет использовать код приложения из AMI. Но если я в какой-то момент разверну до master, мой AMI не будет обновлен, но экземпляры в ASG будут обновлены. Каков наилучший метод обеспечения того, чтобы новые экземпляры, созданные ASG, выполняли последнюю версию кода (master)?

Мои первоначальные мысли

Я подумываю включить в конфигурацию запуска скрипт bash, который будет извлекать последний код из Bitbucket и выполнять любые следующие шаги, чтобы запустить мое приложение (например, «установка npm», «запуск npm» и т. Д. И т. Д.). Я уверен, что у кого-то есть более элегантное решение, и я хотел бы услышать несколько предложений.

Ответ №1:

Для всех, кто приходит к этому, я решил свою проблему. Изначально я был прав. Поле «пользовательские данные» в шаблоне запуска было хорошим местом для начальной загрузки моего приложения после запуска и запуска экземпляра. Он в основном клонируется из удаленного репозитория и выполняет все необходимые шаги для запуска приложения после этого.

Например, в конфигурации запуска для EC2

 #cloud-boothook
#!/bin/bash
git clone myremoterepo.git
cd myremoterepo
npm install
npm run start
  

Кроме того, если вы используете классический балансировщик нагрузки, CodeDeploy попытается запустить развертывание на основе вашего последнего репозитория кода в S3, когда ваш ASG масштабирует экземпляры EC2. Таким образом, вышеупомянутое решение будет избыточным.