#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. Таким образом, вышеупомянутое решение будет избыточным.