Peculiaridades do arquivo Zip ao implantar um aplicativo Node.js no AWS Elastic Beanstalk

Ontem, minha equipe estava tentando fazer um protótipo simples do Node.js rodar no Elastic Beanstalk. Encontramos alguns pequenos problemas que não estão exatamente descritos na documentação. No painel do Elastic Beanstalk, há um upload de formulário onde você pode fazer upload de um arquivo zip do seu aplicativo:Cenário

Tentei simplesmente baixar um arquivo zip do meu repositório github e enviá-lo para a AWS. Esperei a implantação do aplicativo e ele falhou. Verificando os logs de instantâneo (que você pode fazer diretamente do painel do aplicativo no AWS), percebi que ele estava procurando por package.json em /var/app/current/package.json.

Eu sshed no servidor e descobri que o arquivo zip estava sendo descompactado em / var / app / current, mas também criando um nível de diretório extra lá, por exemplo, / var / app / current / github repo dir /.

A correção era simplesmente criar um arquivo zip que seria descompactado diretamente no diretório de destino sem criar um nível de pasta extra. Eu acredito que o processo de implantação do Elastic Beanstalk pode entender diretórios aninhados com aplicativos rails, mas o mesmo não parece ser o caso com aplicativos Node. Em qualquer caso, ele espera encontrar o package.json diretamente no diretório “atual” – suponho que você possa configurar o package.json com diretivas para localizar os próprios arquivos js em uma estrutura de diretório a partir daí com uma estrutura de aninhamento arbitrária.

Além disso, verifique seu package.json com um script lint. Estava faltando o campo de versão no meu, o que o invalidava. Você pode encontrar facilmente um aplicativo da web relevante, como este .