☁️ Projeto Final do Programa de Bolsas da Compass UOL | AWS e DevSecOps - Infraestrutura AWS para um eCommerce da Fast Engineering
- Bruno Silveira: https://github.com/brunohsilv
- Edilson Maria: https://github.com/EdilsonMaria
- Felipe Santos: https://github.com/Felipe53650
- Laura Capssa: https://github.com/laura-capssa
- Juan paulo: https://github.com/juanfricke
A Fast Engineering S/A é uma empresa de e-commerce que está crescendo rapidamente. Desde o início do ano, os acessos e compras estão aumentando em 20% a cada mês. A arquitetura on-premise atual, composta por servidores dedicados para aplicação, web server e banco de dados, não suporta mais a alta demanda de acessos e compras. Diante disso, a solução encontrada foi migrar o ambiente para a nuvem AWS, garantindo escalabilidade, segurança e alta disponibilidade para o e-commerce.
Atualmente, o ambiente on-premise consiste em:
- 1 servidor para Banco de Dados MySQL
- 1 servidor para aplicação (React)
- 1 servidor de Web Server, que também armazena arquivos estáticos como fotos e links.
A solução de migração envolve a implementação de uma arquitetura na AWS, projetada para garantir alta disponibilidade, escalabilidade e segurança.
-
Usuário acessa o site do e-commerce da Fast Engineering através do serviço AWS Route 53, que faz o roteamento do tráfego DNS.
-
AWS WAF é utilizado para garantir a segurança, protegendo contra ataques e acessos maliciosos.
-
O conteúdo estático (como fotos e links) será distribuído globalmente utilizando Amazon CloudFront para reduzir a latência e melhorar a experiência do usuário.
-
O tráfego chega a um Load Balancer (Aplication Load Balancer - ALB), que distribui as solicitações para os containers e microsserviços.
-
Aplicação em Containers gerenciados pelo EKS (Elastic Kubernetes Service) utilizando AWS Fargate.
- Pods rodando o front-end (React).
- Pods rodando um Web Server (Nginx)
- Pods rodando a conexão com DB conection
- Pods rodando a conexão com S3 e EFS conection
- Pods rodando coleta dos logs
-
O banco de dados será migrado para Amazon RDS (MySQL) com configuração de Multi-AZ, garantindo alta disponibilidade e backups automáticos.
-
AWS CodePipeline e AWS CodeDeploy serão usados para a entrega contínua (CI/CD) da aplicação, garantindo automatização e eficiência nas atualizações.
-
AWS CloudWatch será configurado para monitorar a saúde dos serviços e enviar alertas sobre qualquer anomalia.
-
O gerenciamento de permissões será feito com AWS IAM para garantir segurança e controle de acessos.
- Arquitetura da Fast Engineering na AWS
- Arquitetura interna do kubernetes
-
AWS Route 53: Serviço de gerenciamento de DNS que permite o roteamento de usuários para diferentes recursos da AWS com base em regras definidas, como a proximidade geográfica ou saúde do serviço.
-
AWS WAF (Web Application Firewall): de aplicação da web que protege contra ameaças comuns da internet, como injeção de SQL, cross-site scripting (XSS), e ataques DDoS.
-
Amazon CloudFront: Serviço de distribuição de conteúdo (CDN) que acelera a entrega de conteúdo estático ou dinâmico em todo o mundo, reduzindo a latência para os usuários finais.
-
Aplication Load Balancer (ALB): Balanceador de carga que distribui o tráfego entre diferentes instâncias ou containers, garantindo que o tráfego seja equilibrado e as falhas sejam redirecionadas para instâncias saudáveis.
-
Amazon EKS (Elastic Kubernetes Service): Serviço gerenciado de Kubernetes que orquestra containers, permitindo escalabilidade, automação e implantação rápida de aplicações em microsserviços.
-
AWS Fargate: Serviço de execução de containers serverless que elimina a necessidade de provisionar e gerenciar servidores. Com Fargate, os containers são executados sob demanda.
-
Amazon S3 (Simple Storage Service): Serviço de armazenamento escalável e seguro que permite armazenar arquivos estáticos, como imagens e vídeos, com alta durabilidade e acessibilidade.
-
Amazon EFS (Elastic File System): Sistema de arquivos compartilhado que permite que várias instâncias ou containers acessem o mesmo sistema de arquivos simultaneamente, ideal para cenários onde há compartilhamento de dados.
-
Amazon RDS (MySQL): Banco de dados relacional gerenciado que permite a configuração de alta disponibilidade (Multi-AZ) e backups automáticos para garantir redundância e recuperação rápida em caso de falhas.
-
AWS CodePipeline e AWS CodeDeploy: Serviços de integração contínua (CI) e entrega contínua (CD) que automatizam os processos de build, teste e deploy da aplicação.
-
AWS CloudWatch: Serviço de monitoramento que coleta e rastreia métricas, registros e eventos da AWS, enviando alertas e permitindo o acompanhamento da saúde e performance da infraestrutura.
-
AWS IAM (Identity and Access Management): Serviço de gerenciamento de identidades que permite definir permissões granulares para acessar e gerenciar recursos da AWS de forma segura.
- Conta AWS configurada
- AWS CLI instalado e configurado
- kubectl configurado para acessar seu cluster EKS
- IAM roles com permissões adequadas
- Docker instalado para construir as imagens
- Acesse o AWS Console, navegue até o CodeCommit e crie um novo repositório.
- Clone o repositório em sua máquina local:
git clone https://git-codecommit.REGION.amazonaws.com/v1/repos/NOME_DO_REPOSITORIO
- Navegue para o CodePipeline e crie um novo pipeline.
- Escolha o repositório CodeCommit criado anteriormente como fonte.
- Configure as fases de CodeBuild para construir o frontend e o backend e CodeDeploy para implantar as imagens no cluster EKS.
- Crie um buildspec.yml para definir as etapas de construção de cada componente.
- Use o eksctl para criar o cluster EKS com suporte a Fargate.
eksctl create cluster --name ecommerce-cluster --region us-east-1 --fargate
- Crie um profile Fargate para associar seus pods ao serviço Fargate.
eksctl create fargateprofile --cluster ecommerce-cluster --name ecommerce-app --namespace default
- Crie arquivos YAML para definir os serviços do Kubernetes (Deployment, Service, ConfigMap, etc.).
- Arquivo
deployment-backend.yamlpara o servidor web: - Para aplicar o deployment:
kubectl apply -f deployment-backend.yaml
- Acesse o console RDS e crie uma nova instância MySQL.
- Escolha a versão MySQL adequada.
- Configure as VPCs, subnets e segurança para permitir a comunicação com o EKS.
- Configure o endpoint do banco de dados no arquivo de configuração da aplicação.
- No seu arquivo de configuração ConfigMap ou diretamente no deployment:
- Crie um bucket no S3 para armazenar arquivos estáticos e imagens do e-commerce.
- No código da aplicação, use o SDK da AWS para interagir com o S3 e fazer upload/download dos arquivos.
- Crie um sistema de arquivos EFS no console da AWS.
- Configure um PersistentVolume e um PersistentVolumeClaim no Kubernetes:
- Habilite o envio de logs dos containers no EKS para o CloudWatch.
- Adicione a seguinte configuração nos deployments:
Após configurar todos os recursos acima, o pipeline de CI/CD garantirá que o código seja automaticamente construído, testado e implantado no cluster EKS. Cada alteração no repositório CodeCommit acionará o pipeline.
Estimativa de custo da nova arquitetura
-
Custo mensal: 2.016,31 USD
-
Custo total de 12 meses: 24.195,72 USD
A ser anexado.



