AWS NodeJS App 07 – Publicação da aplicação no AWS Elastic Beanstalk

O AWS Elastic Beanstalk é um serviço para publicação de aplicações no formato PAAS (Plataforma como serviço). Para fazer a publicação basta empacotar o código fonte em um formato .zip, e inserir um arquivo contendo as configurações da publicação da aplicação.
Maiores detalhes sobre a publicação de aplicações no AWS EB no link: https://docs.aws.amazon.com/pt_br/elasticbeanstalk/latest/dg/create_deploy_nodejs.container.html
Para iniciar vamos alterar o código fonte para incluir uma nova pasta com o nome .ebextensions
Dentro desta pasta vamos criar um arquivo de configuração com o nome node-settings.config

Esse arquivo configura qual o ponto de start da aplicação, e alguns diretórios especiais. Mais configurações importantes podem ser feitas nele
option_settings:
aws:elasticbeanstalk:container:nodejs:
NodeCommand: "npm start"
ProxyServer: apache
GzipCompression: true
aws:elasticbeanstalk:container:nodejs:staticfiles:
/public/images: staticimages
Agora vamos fazer o download do código fonte do projeto, para isso clique no botão file -> Download Project.

Descompacte a pasta e navegue até o diretório da aplicação conforme a imagem abaixo:

Remova os diretórios:
.git
node_modules
Em seguida selecione todos os arquivos e pasta do projeto conforme a imagem abaixo, clique com o botão direito e selecione Enviar para -> pasta compactada. E informe o nome do arquivo como: shoppingfaegaws.zip

Ao abrir esse novo arquivo .zip gerado observe que o projeto e principalmente o arquivo package.json e a pasta .ebextensions estão na raiz do arquivo zipado. Isso é importante para que o deploy no AWS EB seja feito com sucesso.

Acesse o console da AWS e navegue até o Elastic Beanstalk. Clique no botão Get Started.

Na próxima tela informe o nome da aplicação: shoppingfaegaws e selecione a opção upload your code. Clique no botão Upload.

Na próxima tela clique no botão escolher arquivo e informe o arquivo shoppingfaegaws.zip que foi gerado no passo anterior. Confirme no botão upload.

Retornando na tela anterior, selecione a plataforma Node.js, e clique no botão Configure more options.

Nesta tela você pode configurar o ambiente de execução da aplicação, permissões de segurança. Vamos manter a opção low cost selecionada e os demais parâmetros como padrão. No final desta página clique no botão create app.

Quando o processo de implantação da estrutura for concluído, o EB irá apresentar a seguinte tela com a URL para acessar a aplicação.

Utilize a URL para acessar a aplicação, você vai observar que a aplicação parece saudável para o AWS EB mas ao acessar ocorre um erro.

Vamos investigar o problema, volte para o menu do AWS EB selecione a opção Logs, e selecione Request Logs -> Last 100 lines. Clique em download dos logs.

Observe que no início do log temos o motivo do erro, nossa aplicação agora esta publicada na AWS, e não tem permissão de acessar o AWS DynamoDB nem o AWS S3. Então devemos modificar a ROLE aws-elasticbeanstalk-ec2-role para dar permissão de acesso.

Para isso retorne ao console AWS e entre no IAM, procure pela role: aws-elasticbeanstalk-ec2-role

Clique na role para fazer sua edição, em seguida clique no botão attach polices.

Apenas para simplificar o processo, e facilitar o teste, vamos vincular a role AmazonS3FullAccess e DynamoDBFullAccess. IMPORTANTE: em ambiente de produção essas polices não devem ser atribuídas a aplicação. Novas polices mais restritivas devem ser utilizadas. Marque as duas, e clique no botão Attach policy.


Agora basta aguardar alguns instantes, e tentar acessar a aplicação novamente pela URL provida pelo AWS EB.
