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.