M04·03Serviços principais da AWS

CAPÍTULO 03

Serviços principais da AWS

EC2, S3, RDS, Load Balancer e IAM — o feijão com arroz que você vai usar todo dia num backend escalável.

Por Thiago Souza15 min de leituraAtualizado em 2026-05

A AWS tem mais de 200 serviços. Você não precisa saber todos. Para um backend escalável, esses 5 são o feijão com arroz que você vai usar todo dia.

EC2 — Elastic Compute Cloud

EC2 é uma máquina virtual na nuvem. É o serviço mais antigo e fundamental da AWS. Você escolhe sistema operacional, tamanho, disco, região, e em 90 segundos tem um servidor Linux ou Windows rodando, com IP público, pronto para receber SSH.

EC2 é como alugar um computador remotamente. Você escolhe "quero um Linux com 4 GB de RAM e 2 CPUs", paga por hora de uso e acessa via SSH como se fosse seu PC.

Tipos de instância

A AWS oferece famílias de instâncias para diferentes cargas:

FamíliaOtimizada paraExemplo de uso
t3, t4gUso geral burstable (barato)API pequena, ambiente de dev
m5, m6iUso geral balanceadoAplicação web típica
c5, c6iComputação (CPU)Processamento de imagem, ML inference
r5, r6iMemória (RAM)Cache, bancos in-memory
g4, p4GPUTreinamento de IA, vídeo

Cada tipo tem tamanhos: nano, micro, small, medium, large, xlarge, 2xlarge... Quanto maior, mais cara, mais potente.

Para começar, use t3.micro ou t3.small. São baratas (a t3.micro é gratuita no Free Tier por 12 meses) e atendem a maioria dos cenários de aprendizado. Em produção, prefira a família M (uso geral) e vá para C ou R apenas se identificar gargalo de CPU ou memória.

Modelos de cobrança

  • On-Demand: paga por segundo de uso, sem compromisso. Ideal para cargas imprevisíveis ou aprendizado.
  • Reserved Instances: você se compromete por 1 ou 3 anos. Desconto de até 72%.
  • Savings Plans: compromisso de gasto/hora por 1 ou 3 anos. Mais flexível que Reserved.
  • Spot: você usa capacidade ociosa da AWS, com até 90% de desconto, mas a AWS pode tomar de volta com 2 minutos de aviso. Ótimo para batch e jobs de processamento.

Exemplo prático — Subindo uma EC2

bash
# Subir uma EC2 t3.micro Ubuntu via AWS CLI
aws ec2 run-instances \
  --image-id ami-0c7217cdde317cfec \
  --instance-type t3.micro \
  --key-name minha-chave \
  --security-group-ids sg-0abc123 \
  --subnet-id subnet-0xyz789 \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=api-prod}]'

Após subir, você conecta via SSH e instala o que quiser:

bash
ssh -i my-key.pem ubuntu@ec2-54-23-x-x.compute.amazonaws.com
 
# Sobe o binário Go (compilado localmente e enviado via scp)
chmod +x /opt/api && /opt/api

S3 — Simple Storage Service

S3 é o armazenamento de objetos da AWS. Pense nele como um "Google Drive" infinito e absurdamente confiável para sua aplicação usar via API.

S3 é como um armário de arquivos infinito. Cada "gaveta" é um bucket (precisa ter nome único no mundo inteiro). Cada arquivo dentro é um objeto, identificado por uma chave (caminho). Você não se preocupa com disco lotando, RAID, backup. A AWS cuida de tudo e replica automaticamente em pelo menos 3 AZs.

Para que serve o S3?

  • Armazenar uploads de usuários (fotos, vídeos, PDFs)
  • Hospedar sites estáticos (HTML, CSS, JS)
  • Backup de banco de dados
  • Data lake para análise (Athena, Redshift Spectrum)
  • Logs de aplicação para auditoria
  • Distribuição de arquivos (em conjunto com CloudFront)

Classes de armazenamento

Nem todo arquivo precisa estar instantaneamente disponível. O S3 oferece classes para otimizar custo:

ClasseCaso de usoCusto aprox/GB/mês
StandardAcesso frequente$0,023
Intelligent-TieringPadrão desconhecido$0,023 + taxa
Standard-IAAcesso pouco frequente$0,0125
Glacier InstantArquivamento, acesso ms$0,004
Glacier Deep ArchiveArquivamento longo prazo$0,00099

Exemplo prático — Upload via SDK Go

go
// Go - usando AWS SDK v2
cfg, _ := config.LoadDefaultConfig(ctx,
    config.WithRegion("sa-east-1"),
)
s3Client := s3.NewFromConfig(cfg)
 
file, _ := os.Open("/tmp/avatar.jpg")
defer file.Close()
 
_, err := s3Client.PutObject(ctx, &s3.PutObjectInput{
    Bucket:      aws.String("meu-app-uploads"),
    Key:         aws.String("users/42/avatar.jpg"),
    ContentType: aws.String("image/jpeg"),
    Body:        file,
})
Nunca deixe um bucket S3 público por engano. Em 2017, milhares de empresas vazaram dados de clientes assim. A AWS hoje bloqueia por padrão — só libere se você REALMENTE souber o que está fazendo. Para servir arquivos públicos, use o CloudFront (CDN) na frente do S3 com bucket privado e Origin Access Identity.

RDS — Relational Database Service

RDS é banco de dados relacional gerenciado. Você escolhe o motor (PostgreSQL, MySQL, MariaDB, Oracle, SQL Server, Aurora) e a AWS cuida de:

  • Instalação e configuração
  • Backups automáticos diários (com retenção de até 35 dias)
  • Patches de segurança
  • Replicação multi-AZ (failover automático em ~60s)
  • Read replicas para escalar leitura
  • Snapshots e restauração point-in-time

RDS é como morar em um apartamento alugado com serviço de manutenção. Você mora lá (usa o banco), mas se o encanamento estourar (HD falhar), o síndico arruma sem você ter que se mexer. Você só paga o aluguel.

Quando usar RDS x Aurora x DynamoDB?

ServiçoTipoQuando usar
RDS Postgres/MySQLSQL gerenciadoAplicações típicas, até alguns TB
AuroraSQL otimizado AWSAlta carga, performance crítica, até 128TB
DynamoDBNoSQL key-valueEscala massiva, latência ms, schema flexível

Exemplo — Criando um RDS PostgreSQL

bash
aws rds create-db-instance \
  --db-instance-identifier minha-api-db \
  --db-instance-class db.t3.micro \
  --engine postgres \
  --engine-version 16.1 \
  --master-username admin \
  --master-user-password <SENHA_FORTE> \
  --allocated-storage 20 \
  --multi-az \
  --backup-retention-period 7 \
  --vpc-security-group-ids sg-0abc123
NUNCA exponha um RDS diretamente para a internet (Publicly Accessible = false). Coloque ele em uma subnet privada da VPC e libere acesso apenas para o Security Group das suas EC2/ECS. Senha do banco JAMAIS fica no código — use AWS Secrets Manager ou Parameter Store.

Load Balancer — ELB

Quando você tem mais de uma EC2 rodando a mesma aplicação (escalabilidade horizontal), precisa de algo que distribua o tráfego entre elas. Esse algo é o Load Balancer.

Imagine um banco com 5 caixas atendendo. O Load Balancer é o porteiro com a senha eletrônica: "Cliente 1, vá ao caixa 3. Cliente 2, vá ao caixa 1. Cliente 3, caixa 5..." Se um caixa fechar (instância caiu), o porteiro não manda mais cliente para lá. Ninguém fica sabendo do problema.

Tipos de Load Balancer na AWS

TipoCamada OSIQuando usar
ALB (Application LB)L7 — HTTP/HTTPSAPIs REST, microsserviços, roteamento por path/host
NLB (Network LB)L4 — TCP/UDPLatência ultra baixa, milhões de req/s, jogos, gRPC
GLB (Gateway LB)L3 — IPAplicar firewalls de terceiros (raro)

Para 99% dos backends web/API, você vai usar o ALB.

Recursos do ALB que você precisa conhecer

  • Health checks: o ALB verifica /health a cada X segundos. Instância que não responde sai do pool automaticamente.
  • Path-based routing: /api/* vai para o backend, /* vai para o frontend.
  • Host-based routing: api.empresa.com e admin.empresa.com no mesmo ALB.
  • SSL/TLS termination: o ALB descriptografa HTTPS, suas EC2 falam HTTP interno (mais simples).
  • Sticky sessions: amarra um cliente na mesma instância (use com moderação).

IAM — Identity and Access Management

IAM é o serviço que controla QUEM pode fazer O QUE em QUAIS recursos da AWS. Toda chamada de API na AWS passa pelo IAM. É, com toda certeza, o serviço que mais frustra iniciantes — e o que mais separa amador de pro.

IAM é o sistema de crachá + permissões da empresa: USUÁRIOS = pessoas (você, seu colega de time). GRUPOS = equipes (Devs, DBAs, Financeiro). ROLES = crachá temporário que pode ser emprestado ("hoje você é auditor por 1 hora"). POLICIES = as regras: "Quem tem este crachá pode entrar nas salas A e B, mas não na C".

Os 4 elementos do IAM

  • User: uma pessoa física com login na AWS. Pode ter senha + MFA + access keys.
  • Group: conjunto de usuários. Aplicar policy num grupo aplica em todos.
  • Role: identidade temporária assumida por serviços ou usuários. EC2 assume role para acessar S3 sem precisar de access key no código.
  • Policy: documento JSON que define permissões (Allow/Deny em quais ações e recursos).

Exemplo de Policy IAM

Permitir leitura apenas no bucket meu-app-uploads:

json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::meu-app-uploads",
        "arn:aws:s3:::meu-app-uploads/*"
      ]
    }
  ]
}
Princípio do menor privilégio: dê a uma identidade APENAS as permissões que ela precisa, e nada mais. Começar com AdministratorAccess e "refinar depois" é o caminho mais rápido para um vazamento de dados. Use o IAM Access Analyzer para detectar policies muito permissivas.
JAMAIS coloque access key (AKIAxxx) e secret key dentro do código, ou em arquivos .env commitados no Git. Bots varrem o GitHub público procurando credenciais AWS expostas e em segundos sobem 50 EC2.xlarge para minerar Bitcoin com a sua conta. Você vai pagar. EC2 → use IAM Role anexada à instância. Lambda → use a Execution Role. Local → use AWS SSO ou aws configure com perfil nomeado.