EC2 — Servidores na Nuvem
Aula 2 de 8
Amazon EC2
EC2 (Elastic Compute Cloud) fornece servidores virtuais sob demanda. Você paga pelo que usa (segundo/fração).
Tipos de Instância
| Família | Uso | Exemplo |
|---|---|---|
| t (Burstable) | Geral, dev/test | t3.medium |
| m (General) | Balanceado CPU/memória | m6i.large |
| c (Compute) | CPU intensiva | c6g.xlarge (Graviton ARM) |
| r (RAM) | Memória intensiva | r6g.2xlarge |
| i (I/O) | Armazenamento intensivo | i3.large (NVMe) |
| p (GPU) | ML/renderização | p4d.24xlarge |
Lab: Lançar EC2 via CLI
# 1. Obter AMI mais recente
aws ec2 describe-images \
--owners 099720109477 \
--filters "Name=name,Values=ubuntu/images/hvm-ssd-gp3/ubuntu-24.04-amd64-server-*" \
--query "Images | sort_by(@, &CreationDate) | [-1].ImageId"
# 2. Criar security group
aws ec2 create-security-group \
--group-name web-sg \
--description "HTTP and SSH access"
aws ec2 authorize-security-group-ingress \
--group-name web-sg \
--protocol tcp --port 22 --cidr "SEU.IP.AQUI/32"
aws ec2 authorize-security-group-ingress \
--group-name web-sg \
--protocol tcp --port 80 --cidr "0.0.0.0/0"
# 3. Criar key pair
aws ec2 create-key-pair --key-name minha-chave \
--query "KeyMaterial" --output text > minha-chave.pem
chmod 400 minha-chave.pem
# 4. Launch
aws ec2 run-instances \
--image-id ami-xxxxxxxx \
--instance-type t3.micro \
--key-name minha-chave \
--security-groups web-sg \
--user-data file://setup.sh
User Data Script
#!/bin/bash
# setup.sh — executa no boot da instância
apt update && apt install -y nginx
systemctl enable --now nginx
echo "<h1>EC2 em $(hostname -f)</h1>" > /var/www/html/index.html
Security Groups vs NACL
| Aspecto | Security Group | NACL (Network ACL) |
|---|---|---|
| Escopo | Instance-level | Subnet-level |
| Regras | Allow only | Allow + Deny |
| Stateful | Sim | Não |
| Avaliação | Todas regras | Ordem numérica |
| Padrão | Deny all inbound | Allow all |
# SG: regras stateful (resposta automática permitida)
# NACL: stateless (precisa regra de retorno explícita)
Elastic IP vs Load Balancer
# Elastic IP (IP fixo)
aws ec2 allocate-address --domain vpc
aws ec2 associate-address \
--instance-id i-123456 \
--allocation-id eipalloc-xxx
# Application Load Balancer (recomendado)
aws elbv2 create-load-balancer \
--name meu-alb \
--subnets subnet-xxx subnet-yyy \
--security-groups sg-xxx
aws elbv2 create-target-group \
--name meu-tg \
--protocol HTTP --port 80 \
--vpc-id vpc-xxx \
--health-check-path /health
Spot Instances (90% desconto)
# Spot com CloudFormation
aws ec2 request-spot-instances \
--spot-price "0.05" \
--instance-count 3 \
--launch-specification file://spot-spec.json
# Spot Fleet — gerencia automaticamente
aws ec2 request-spot-fleet \
--spot-fleet-request-config file://fleet-config.json
Prefira ALB a Elastic IP para produção. Use Spot para workloads tolerantes a falha (90% de desconto). AMIs do AWS Marketplace têm licenciamento incluso.