EC2, S3, RDS, ALB e CloudFront na prática
Objetivos desta aula
- Escolher o compute adequado
- Publicar frontend estático com CDN
- Subir banco gerenciado com backup
Compute: EC2 dá controle total e é ótimo para aprender; ECS Fargate elimina gestão de servidor; Lambda serve carga por evento. Para o CloudShop, EC2 primeiro (para praticar Linux e Ansible) e depois Kubernetes, refletindo a trajetória real de muitas empresas.
Frontend estático não deve ficar em servidor: publique no S3 com bucket privado e sirva via CloudFront usando Origin Access Control, com HTTPS e cache adequado. Isso reduz custo, melhora latência e elimina uma superfície de ataque.
Banco em produção é serviço gerenciado: RDS com backup automatizado, retenção definida, criptografia em repouso, senha em Secrets Manager e — quando o SLA exigir — multi-AZ. Restaurar backup precisa ser testado, senão você tem apenas a esperança de ter backup.
1. EC2: escolher tipo e imagem
Famílias t (burst, dev), m (geral), c (CPU), r (memória). Sufixo g indica Graviton (ARM), geralmente 20% mais barato. Use Launch Templates e Auto Scaling Groups em vez de instâncias soltas.
2. S3: armazenamento de objetos
Bloqueie acesso público por padrão, ative criptografia e versionamento, e use lifecycle para mover dados antigos para classes mais baratas. Para servir arquivos ao público, use CloudFront com Origin Access Control.
3. RDS: banco gerenciado
A AWS cuida de patches, backups e failover (Multi-AZ). Você cuida de tamanho, parâmetros, índices e de nunca deixá-lo público. Teste o restore de snapshot periodicamente.
4. ALB: balanceador HTTP
Termina TLS com certificado do ACM, roteia por host/caminho para target groups e faz health check. Se o health check falhar, o alvo sai do rodízio.
5. CloudFront: CDN
Cache perto do usuário para o frontend Vue e imagens; reduz latência e custo de saída.
6. Checagem final
Você deve montar o caminho CloudFront → S3 (frontend) e ALB → EC2/ECS → RDS (API) e explicar a função de cada peça.
Na prática
Provisionamento essencial
bash
# EC2 com role, sem chave de acesso e sem IP publico
aws ec2 run-instances --image-id ami-0abcdef1234567890 --instance-type t3.micro \
--subnet-id "$PRIV" --security-group-ids "$SG_APP" \
--iam-instance-profile Name=cloudshop-api \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=cloudshop-api},{Key=env,Value=dev},{Key=owner,Value=equipe-plataforma}]'
# S3 privado e criptografado para o frontend
aws s3api create-bucket --bucket cloudshop-web-dev --region us-east-1
aws s3api put-public-access-block --bucket cloudshop-web-dev \
--public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true
aws s3api put-bucket-encryption --bucket cloudshop-web-dev \
--server-side-encryption-configuration '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"AES256"}}]}'
aws s3 sync ./dist s3://cloudshop-web-dev --delete
# RDS privado com backup de 7 dias
aws rds create-db-instance --db-instance-identifier cloudshop-dev \
--db-instance-class db.t4g.micro --engine postgres --allocated-storage 20 \
--master-username cloudshop --manage-master-user-password \
--vpc-security-group-ids "$SG_DB" --db-subnet-group-name cloudshop-private \
--backup-retention-period 7 --storage-encrypted --no-publicly-accessibleNota de segurança: --manage-master-user-password guarda a senha no Secrets Manager e evita senha em histórico de shell ou script.
Bucket seguro por padrão
bash
aws s3api create-bucket --bucket cloudshop-dev-images --region us-east-1
aws s3api put-public-access-block --bucket cloudshop-dev-images \
--public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true
aws s3api put-bucket-versioning --bucket cloudshop-dev-images --versioning-configuration Status=EnabledVerificar saúde dos alvos do ALB
bash
aws elbv2 describe-target-health --target-group-arn arn:aws:elasticloadbalancing:...:targetgroup/cloudshop-api/abc \
--query 'TargetHealthDescriptions[].[Target.Id,TargetHealth.State,TargetHealth.Reason]'
# i-0aa healthy / i-0bb unhealthy Target.ResponseCodeMismatch <- /health nao devolveu 200Por que isso importa
Este é o conjunto que aparece em quase toda vaga júnior/pleno de nuvem em português.
Erro comum
Deixar o bucket público 'para o site funcionar' em vez de usar CloudFront com OAC.
Dica de produção
Teste a restauração do backup do RDS em outro identificador antes de considerar o ambiente pronto.
Alerta de segurança
Snapshot de RDS compartilhado publicamente já causou vazamentos famosos. Verifique sempre a visibilidade.
Pergunta de entrevista
Quando escolher EC2, ECS Fargate ou Lambda?
Glossário
- OAC
- Origin Access Control: permite ao CloudFront ler um bucket privado.
- multi-AZ
- Replicação do banco em outra zona de disponibilidade para failover.
- Auto Scaling Group
- Grupo que mantém e ajusta o número de instâncias automaticamente.
- Multi-AZ
- Réplica em outra zona com failover automático.
- target group
- Conjunto de alvos para onde o ALB envia tráfego.
- ACM
- Serviço de certificados TLS gerenciados e renovados pela AWS.
Conexão com o CloudShop
Subir a infraestrutura de dev do CloudShop com frontend em CDN e banco privado.
Quiz da aula
1. Como servir um site estático do S3 com segurança?
2. Como servir um bucket privado ao público com segurança?
3. Alvo unhealthy com ResponseCodeMismatch significa:
Minhas anotações
Salvo automaticamente neste navegador.