Среда AWS ElasticBeanstalk переходит в режим «тяжелый» каждый раз, когда я запускаю ‘eb deploy’

#amazon-elastic-beanstalk

#amazon-elastic-beanstalk

Вопрос:

У меня есть проект React git, который я развернул через Docker в среде ElasticBeanstalk. При первом запуске eb deploy я не испытываю никаких ошибок, и он правильно развертывается в среде ElasticBeanstalk. Но когда я меняю исходный код, если я пытаюсь развернуть его в той же среде, я получаю сообщение об ошибке.

Это то, что я запускаю:

  git add *
 git commit -am "My First Commit"
 docker build -t new-docker-version .
 eb create react-env
  

Затем, после создания среды, я изменяю исходный код

  git add *
 git commit -am "Changed Source Code"
 docker rmi new-docker-version
 docker build -t new-docker-version .
 eb deploy
  

«Развертывание» выполняется примерно в течение 10 минут, прежде чем перейти в «тяжелое» состояние из-за:

Incorrect application version "app-f43da-200915_151515" (deployment 4). Expected version "app-7295-200915_141954" (deployment 1).

Как я могу развернуть обновленную версию моего исходного кода в той же среде через eb cli?

Комментарии:

1. Возможно, в вашем коде есть что-то, что мешает вам развернуть приложение на том же beanstalk. Что отображается в журналах активности eb?

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

3. При проверке внутри eb-engine. войти единственная ошибка, которую я вижу, это: [ОШИБКА] Произошла ошибка во время выполнения команды [app-deploy] — [Запустить контейнер Docker]. Прекратите выполнение команды. Ошибка: сбой StartProcess: не удалось запустить процесс «eb-docker-log»: команда / bin / sh -c systemctl запускает eb-docker-log.service с ошибкой статус выхода 1

Ответ №1:

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

Чтобы она работала идеально, среду Elastic Beanstalk следует запускать не с панели консоли, а из командной строки. Первым шагом является создание папки .elasticbeanstalk в корне проекта и создание в ней файла config.yml , который выглядит следующим образом:

 branch-defaults:
  production:
    environment: my-prod
  staging:
    environment: my-dev
global:
  application_name: my_application_name
  branch: null
  default_ec2_keyname: my_key_pair
  default_platform: Docker running on 64bit Amazon Linux
  default_region: my_default_region
  include_git_submodules: true
  instance_profile: null
  platform_name: null
  platform_version: null
  profile: null
  repository: null
  sc: git
  workspace_type: Application
  

После этого вернитесь в корень проекта и запустите:

 eb init
eb create my-dev
  

С этого момента каждое вносимое изменение может быть просто перенесено в среду с помощью запуска eb deploy .

###############################################

Второе решение, которое я нахожу более «промышленно точным», — это использование AWS CodePipeline.

Это среднее руководство, которому я следовал. Как только CodePipeline будет подключен к текущей ветви репозитория проекта git (и как только будут выполнены все описанные выше шаги, касающиеся файла config.yml в папке .elasticbeanstalk ), изменения будут видны непосредственно в среде ELB просто после каждого нажатия git.