Criando uma arquitetura escalável na AWS utilizando Cloudfront, CloudWatch, Elastic Beanstalk, Dynamodb - parte 3
Tags: aws, cloud, architecture, performance
Published: 2021-12-22 02:52:33

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

Antes de iniciarmos irei fazer uma breve descrição sobre os recursos que utilizaremos dentro da cloud AWS nesta terceira parte do post.
* Cloudfront: Amazon CloudFront é um serviço web que acelera a distribuição de seu conteúdo web estático e dinâmico,como.html,.css,.js,arquivos de imagem,para seus usuários.O CloudFront entrega seu conteúdo por meio de uma rede mundial de datacenters chamada edge locations.Ao solicitar um conteúdo que você está veiculando com o CloudFront,o usuário é roteado para o ponto de presença com a menor latência (atraso de tempo) para que o conteúdo seja fornecido com o melhor desempenho possível
No post anterior subimos nossa aplicação e visualizamos a mesma em funcionamento, porem ao tentar cadastrar um e-mail recebemos um erro(conforme imagem abaixo), isso acontece porque nossas instancias EC2 não possuem permissão de acesso a nossa tabela criada no DynamoDb
![error](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1h0v3b0x2nqiaxyi6sl7.png)
Para resolver este problema vamos utilizar uma ferramenta chama `Role` do recurso `IAM` da AWS, que ira autorizar nossas instancias EC2 a acessarem a nossa tabela do DynamoDb.
Ainda dentro do recurso Elastic Beanstalk procure no menu esquerdo a aba **Configuration** e de um clique nele, ira abrir um menu a direita onde você deve procurar pela aba `security` e copiar o nome da role criada automaticamente quando geramos a aplicação
![role cluster](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/efxirrhm24knk1yv6s0f.png)
Va para o recurso `IAM` no console AWS e clique na aba `Roles` e cole o nome da role, ira aparecer a `Role` que nossas instancias Ec2 utiliza para liberar acesso à recursos da AWS
![role](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wjvcfnx2dheqx6rwx0bl.png)
Clique em cima da role e na pagina que ira aparecer procure e clique no botão `Attach policies` e ira chegar nesta pagina
![policies](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qzdwhv3nf6bqd2li1iex.png)
Nesta pagina na aba search digite DynamoDb que ira aparecer as politicas referentes ao dynamodb, selecione a politica `AmazonDynamoDBFullAccess`(que dara a nossa instancia Ec2 acesso total ao recurso DynamoDb) e clique em Attach policy
![policy](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mdejqfbmpnxi9i6s9mzb.png)
Feito isso corrigimos o erro e nossa aplicação ja esta podendo salvar emails de usuários dentro da tabela do dynamodb
![funciona](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mnsod8yac1ad0c2vole7.png)

E podemos ver o email do usuario salvo na tabela users do dynamo
![dynamo](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/doijjeam1rx8gl6itecp.png)

Agora vamos utilizar o recurso **CloudFront** da AWS para disponibilizar nossa aplicação na Web, na aba de pesquisa acima pesquise pelo recurso CloudFront e clique para acessa-lo
![CloudFront](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/11bbciavalezlz6ef2mu.png)
Feito isso clique no botão `Create a CloudFront distribution` para chegar nesta tela
![criar dominio](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/981kexhz84n8xskzetq9.png)
Na aba `Origin domain` selecione o load balancer de nossa aplicação, logo após configure o clouformation conforme as imagens abaixo
![cloud](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h6lllk18gs041sb9b3ub.png)
Name foi gerado automaticamente
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xy9r41rxd8d0gmajlgq6.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j9b23cayxk7hwazokfc3.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0bc95x5nb8qufo5y1753.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/klezf570p3efc8bnx8nt.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w8kikt8x4mqo886oyjg2.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jgs790f8gmpq1l5vdahe.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/00oj8vkb68jabk282gib.png)

Clique no botão `Create distribution` e sera criada a distribuição da aplicação no `ClouFront` e dentro desta distribuição, na aba `Distribution domain name` copie o link do domínio gerado para sua aplicação e cole no navegador
![name domain](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v27vokfw535ei1jr5tr7.png)
Se tudo estiver certo veremos nossa aplicação rodando em um domínio web \o/\o/\o/
![dominio web](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/34q4ejw9veiticu54jm9.png)
 
[Link parte 4](https://dev.to/2020nani/criando-uma-arquitetura-escalavel-na-aws-utilizando-cloudfront-cloudwatch-elastic-beanstalk-dynamodb-parte-4-3ji5)
     
Deixo aqui meus contatos:
[linkedin](https://www.linkedin.com/in/nanialmeida/)
[github](https://github.com/2020nani)