Criando uma arquitetura escalável na AWS utilizando Cloudfront, CloudWatch, Elastic Beanstalk, Dynamodb - parte 2
Tags: aws, cloud, architecture, performance
Published: 2021-12-16 03:41:55

Ferramentas necessárias:
* [Conta na cloud AWS](https://aws.amazon.com/)

A [Amazon Web Services (AWS)](https://aws.amazon.com/) é a plataforma de nuvem escalável mais abrangente e amplamente adotada do mundo. A AWS oferece mais de 200 serviços totalmente caracterizados de data centers globalmente e muitas empresas tem migrado seus sistemas On Premise para a cloud da AWS e nesse post vamos abordar a criação de uma arquitetura escalável auto gerenciada pela AWS através do recurso ElasticBeanstalk para uma aplicação que tenha picos de acessos e continue mantendo sua performance.
Este post esta dividido em 4 partes para facilitar o conteúdo e abordagem dos recursos utilizados na AWS.
Antes de iniciarmos irei fazer uma breve descrição sobre os recursos que utilizaremos dentro da cloud AWS nesta segunda parte do post.
* Elastic Bean Stalk: E um serviço de fácil implantação e escalabilidade da aplicação, ele se encarrega automaticamente da implementação, desde o provisionamento de capacidade, o balanceamento de carga, a escalabilidade automática ate o monitoramento da saúde da aplicação.

Vamos criar uma nova aplicação utilizando o recurso do Elastic Beanstalk, para isso dentro do dashboard inicial da conta AWS pesquise pelo recurso `Elastic Beanstalk` e clique nele

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7jm1qf67cs75apo2uy3d.png)

Clique agora em Create Aplication na tela que abriu e abrira uma nova tela onde passaremos informações de nossa aplicação. Preencha os campos conforme as imagens abaixo
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5kv9wnu1hqhih2td4zf4.png)

No campo **Platform** preencha qual o tipo de linguagem sua aplicação foi codificada, a versão que será utilizada em **Platform Branch** e sempre escolha a versão recomendada em **Platform Version**
![platform](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ld2rr1xeeupk462ifp9r.png)

Na próxima aba Application Code vamos escolher a opção de fazer upload de nossa aplicação **Upload your code**, para este artigo irei utilizar uma aplicação que salva dentro de um S3 da AWS, caso queira seguir o mesmo passo utilize o link https://bootcamp-aws.s3.amazonaws.com/tcb-conf-app.zip, agora vamos adicionar mais configurações para nossa aplicação clicando no botao `configure more option`

![upload code](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lu3i43g6phc1y32ogfvr.png)

Em Presets selecionamos a opção `High Availability` que ira tornar nossa aplicação com alta disponibilidade
![presets](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b3gawaygpium885jc53r.png)
Na aba **Software** clique em edit e em `Environment Properties` define as variáveis ambientes necessárias para a aplicação rodar e clique em `save`
![V.A](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zi3e276igjmcvmgm1f8s.png)

Na aba **Instances** clique em edit e configure o `Root Volume Type` (podemos fazer analogia ao HD da instancia) da instancia onde a aplicação será armazenada, mantenha as outas configurações e clique em `save`
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jqo3f9bv9n3iek9e98ox.png)

No campo **Capacity** clique em edit e vamos configurar a quantidade de instancias que nossa aplicação necessita, na opção `Auto Scaling Group`, para esta aplicação vamos definir no mínimo 2 instancias (ou seja a aplicação ja ira subir com 2 instancias criadas para suportar a carga da aplicação) e no máximo 4 instancias (será adicionada mais instancias conforme a aplicação necessite para se manter disponível)
![Auto scaling](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5gpxbgh59ql6ir95z39q.png)
Na opção `Instance Types` selecione qual tipo de instancia sua aplicação utilizara.
![instance type](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e88qmj21ofjp9xgk7mbt.png)
Na aba `Scaling triggers` vamos configurar a métrica que será utilizado pelo Auto Scaling para subir mais uma instancia ou remover uma instancia conforme o uso da aplicação.
Nesta aplicação vamos utilizar a porcentagem de uso da Cpu das instancias utilizadas pela aplicação, passando de 60% o auto scaling subira automaticamente uma nova instancia para atender a demanda da aplicação e se a porcentagem for menor de 40% ele removera automaticamente uma instancia. Feito isso clique em `save`
![Scaling triggers](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/54z803a6w80yadxzz3cp.png)
Na aba **Security** define a seguinte configuração e clique em `save`
![security](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x3y5id952lrisuq5gk05.png)

Na aba **Network** clique em edit e na opção `Virtual private cloud` selecione a VPC que criamos na [parte 1 deste post](https://dev.to/2020nani/criando-uma-arquitetura-escalavel-na-aws-utilizando-cloudfront-cloudwatch-elastic-beanstalk-dynamodb-parte-1-5ckc) e configure as próximas opções conforme as imagens abaixo e clique em `save`.
![vpc](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4z2vwtgtd3pp5mlganvv.png)
![lb](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f5i915ocl0fosimdn6ur.png)
Obs: Na imagem abaixo a opção `Public IP address` esta selecionada, em ambiente de produção esta nao e uma boa pratica mas para facilitar os testes que serão realizados neste artigo a opção esta selecionada
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nae4lgmvkoy87v20r713.png)

Feito isso clique em `create app` e nossa aplicação será criada.

Se tudo ocorreu bem você aparecera na tela a aplicação rodando (health ok) e você poderá testar clicando no link indicado na imagem abaixo
![health aplication](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9tjuge4levb432sok9f6.png)

Podemos ver nossa aplicação no ar \o/\o/\o/

![aplicação](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/902cvhagqio2omsjtui8.png)
 
 

[Link parte 3](https://dev.to/2020nani/criando-uma-arquitetura-escalavel-na-aws-utilizando-cloudfront-cloudwatch-elastic-beanstalk-dynamodb-parte-3-3bfa)

Deixo aqui meus contatos:
[linkedin](https://www.linkedin.com/in/nanialmeida/)
[github](https://github.com/2020nani)