Назад | Перейти на главную страницу

Что означает ошибка ElasticBeanstalk «Версия приложения непригодна для использования и не может использоваться со средой»?

Я пытаюсь развернуть приложение .NET на ElasticBeanstalk с помощью инструментов AWS-cli.

Сначала загрузите, затем создайте версию, используя:

aws elasticbeanstalk create-application-version 
   --application-name "MyApp - DEV" 
   --version-label "0.1.165" 
   --source-bundle S3Bucket="xxx",S3Key="MyApp.0.1.165.zip" 
   --process 

Это работает, поэтому следующий шаг:

aws elasticbeanstalk update-environment 
  --environment-name "myapp-dev-env" 
  --version-label "0.1.165" 
  --application-name "MyApp - DEV" 

Иногда это заканчивается с кодом 255 и выводит:

Ошибка клиента (InvalidParameterValue) произошла при вызове операции UpdateEnvironment: версия приложения непригодна для использования и не может использоваться со средой

Расстраивает то, что эти точные шаги (выполняемые моим сервером непрерывной интеграции) иногда работают, и если я разверну эту версию с помощью консоли AWS, она также сработает. Загружаемый zip-архив ничем не отличается, и на самом деле, если я перестрою из той же исходной ревизии (с использованием сборки, которая ранее была успешно развернута, что дает ей новый номер версии), кажется, что (обычно) запускается в эту проблему.

Я не могу найти никаких подробностей о том, что означает эта ошибка, так где еще я могу посмотреть, что происходит?

Проблема была вызвана невыполнением ожидания "обработки" новой версии.

В create-application-version команда вернула:

  [Exec] {
  [Exec]     "ApplicationVersion": {
  [Exec]         "ApplicationName": "MyApp - DEV", 
  [Exec]         "Status": "PROCESSING", 
  [Exec]         "VersionLabel": "0.1.165", 
  [Exec]         "DateCreated": "2016-04-19T19:27:35.948Z", 
  [Exec]         "DateUpdated": "2016-04-19T19:27:35.948Z", 
  [Exec]         "SourceBundle": {
  [Exec]             "S3Bucket": "xxx", 
  [Exec]             "S3Key": "MyApp.0.1.165.zip"
  [Exec]         }
  [Exec]     }
  [Exec] }

Я сделал 3-секундную задержку, затем побежал describe-application-versions, и получил

  [Exec]             "Status": "PROCESSED", 

(интересно, что DateUpdated не менял)

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


Правильным решением было бы продолжить работу describe-application-versions до состояния! = «Обработка», а затем обработать все случаи сбоя (статус, отличный от «Обработка» или «Обработано», или навсегда останется «Обработка»).

В моем случае я вызываю это из msbuild (где цикл и ожидание очень сложны), поэтому я достаточно доволен обходным путем произвольной задержки и позволяю update-environment команда не сработает, если что-то пойдет не так. Потому что производство остается нетронутым до update-environment, и фактическое время, затраченное на развертывание (до выполнения этой команды), не имеет значения, мне просто не нужно прилагать столько усилий.