#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.