O que o erro ElasticBeanstalk “Versão do aplicativo está inutilizável e não pode ser usado com um ambiente” significa?

1

Estou tentando implantar um aplicativo .NET no ElasticBeanstalk usando as ferramentas AWS-cli.

Primeiro faça o upload e crie a versão usando:

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 

Isso funciona, então o próximo passo:

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

Isso às vezes sai com o código 255 e as saídas:

A client error (InvalidParameterValue) occurred when calling the UpdateEnvironment operation: Application version is unusable and cannot be used with an environment

O que é frustrante é que essas etapas exatas (executadas pelo meu servidor de integração contínua) às vezes funcionam, e se eu implantar essa versão usando o console da AWS, também funcionará. O zip que estou enviando não parece diferente, e na verdade, se eu reconstruir a partir da mesma revisão de fonte (usando uma compilação que anteriormente foi implantada com sucesso, o que lhe dá um novo número de versão), parece (normalmente) ser executado para este problema.

Não consigo encontrar nenhum detalhe sobre o significado desse erro, então, onde mais posso descobrir o que está acontecendo?

    
por gregmac 19.04.2016 / 06:01

1 resposta

2

O problema estava sendo causado por não esperar que a nova versão fosse "processada".

O comando create-application-version retornou:

  [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] }

Eu coloquei um atraso de 3 segundos, depois executei describe-application-versions e obtive

  [Exec]             "Status": "PROCESSED", 

(curiosamente, o DateUpdated não mudou)

Depois disso, o comando update-environment funciona bem e eu implantei várias versões sem problemas.

Uma correção apropriada seria continuar executando describe-application-versions até o Status!="Processing", e então tratar todos os casos de falha (status diferente de "Processing" ou "Processed", ou permanecer como "Processing" para sempre).

No meu caso, estou invocando isso de msbuild (onde loop e espera são muito difíceis), então estou feliz o suficiente com a solução alternativa de um atraso arbitrário e permitindo que o comando update-environment falhe se algo acontecer errado. Como a produção permanece intocada até que update-environment e o tempo real necessário para implantar (levando a esse comando) não sejam importantes, eu simplesmente não preciso passar por tanto esforço.

    
por 20.04.2016 / 16:17