Snapshots EBS
O que é um Snapshot?
Um snapshot é uma cópia pontual (point-in-time) de um volume EBS. É o principal mecanismo de backup para EBS.
┌─────────────────────────────────────────────────────────────┐
│ SNAPSHOT EBS │
├─────────────────────────────────────────────────────────────┤
│ │
│ Volume EBS Snapshot │
│ (100 GB) (no S3) │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ █████████████ │ ─────────► │ ░░░░░░░░░░░░░ │ │
│ │ █████████████ │ create- │ Cópia dos │ │
│ │ █████████████ │ snapshot │ dados │ │
│ │ ░░░░░░░░░░░░░ │ │ (comprimido) │ │
│ └─────────────────┘ └─────────────────┘ │
│ Usado: 60 GB Armazenado: ~60 GB │
│ Espaço livre: 40 GB (dados reais) │
│ │
│ Características: │
│ • Armazenado no S3 (gerenciado pela AWS) │
│ • Incremental após o primeiro │
│ • Pode ser copiado entre regiões │
│ • Base para criar volumes ou AMI │
│ │
└─────────────────────────────────────────────────────────────┘
Snapshots Incrementais
┌─────────────────────────────────────────────────────────────┐
│ SNAPSHOTS INCREMENTAIS │
├─────────────────────────────────────────────────────────────┤
│ │
│ Primeiro snapshot: COMPLETO │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Volume: 100 GB │ │
│ │ Dados: 60 GB │ │
│ │ │ │
│ │ Snapshot 1: 60 GB copiados │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ Próximos snapshots: INCREMENTAIS │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Desde o Snapshot 1: │ │
│ │ • 5 GB de dados foram alterados │ │
│ │ • 2 GB de novos dados │ │
│ │ │ │
│ │ Snapshot 2: apenas 7 GB copiados! │ │
│ │ (não 60 GB completo) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ Vantagens: │
│ ✅ Mais rápido │
│ ✅ Menos armazenamento │
│ ✅ Mais econômico │
│ │
│ Exclusão: Se você excluir o Snapshot 1, │
│ o Snapshot 2 continua funcional (a AWS gerencia as dependências) │
│ │
└─────────────────────────────────────────────────────────────┘
Criar um Snapshot
Via Console
1. EC2 → Elastic Block Store → Volumes
2. Selecionar o volume
3. Actions → Create snapshot
4. Description: "backup-antes-atualizacao"
5. Adicionar tags (recomendado)
6. Create snapshot
Via CLI
# Criar um snapshot
aws ec2 create-snapshot \
--volume-id vol-0123456789abcdef0 \
--description "Backup diário - 2024-12-18" \
--tag-specifications 'ResourceType=snapshot,Tags=[{Key=Name,Value=daily-backup},{Key=Environment,Value=prod}]'
# Ver os snapshots
aws ec2 describe-snapshots \
--owner-ids self \
--query 'Snapshots[*].[SnapshotId,VolumeId,State,StartTime,Description]' \
--output table
Restaurar de um Snapshot
Criar um Novo Volume
# Criar um volume a partir de um snapshot
aws ec2 create-volume \
--snapshot-id snap-0123456789abcdef0 \
--availability-zone us-east-1a \
--volume-type gp3 \
--tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=restored-volume}]'
Restaurar em outra AZ/Região
┌─────────────────────────────────────────────────────────────┐
│ RESTAURAÇÃO CROSS-AZ / CROSS-REGION │
├─────────────────────────────────────────────────────────────┤
│ │
│ Volume us-east-1a ──► Snapshot ──► Volume us-east-1b │
│ │ │
│ │ (copiar snapshot) │
│ ▼ │
│ Snapshot ──► Volume eu-west-1a │
│ (eu-west-1) │
│ │
│ # Copiar um snapshot para outra região │
│ aws ec2 copy-snapshot \ │
│ --source-region us-east-1 \ │
│ --source-snapshot-id snap-xxx \ │
│ --region eu-west-1 \ │
│ --description "DR copy" │
│ │
└─────────────────────────────────────────────────────────────┘
Boas Práticas de Backup
Estratégia de Retenção
┌─────────────────────────────────────────────────────────────┐
│ ESTRATÉGIA DE RETENÇÃO │
├─────────────────────────────────────────────────────────────┤
│ │
│ Exemplo: Estratégia "Grandfather-Father-Son" │
│ │
│ Diário (Son): │
│ • Snapshot toda noite │
│ • Manter 7 dias │
│ │
│ Semanal (Father): │
│ • Snapshot todo domingo │
│ • Manter 4 semanas │
│ │
│ Mensal (Grandfather): │
│ • Snapshot no 1º dia do mês │
│ • Manter 12 meses │
│ │
│ Resultado: │
│ • 7 + 4 + 12 = 23 snapshots no máximo │
│ • Cobertura de um ano │
│ • Custo controlado │
│ │
└─────────────────────────────────────────────────────────────┘
Automação com AWS Backup
┌─────────────────────────────────────────────────────────────┐
│ AWS BACKUP │
├─────────────────────────────────────────────────────────────┤
│ │
│ Serviço AWS para automatizar backups │
│ │
│ Configuração: │
│ 1. Criar um Backup Plan │
│ 2. Definir as regras (frequência, retenção) │
│ 3. Atribuir os recursos (volumes, por tags) │
│ 4. AWS cria automaticamente os snapshots │
│ │
│ Vantagens: │
│ ✅ Sem script para manter │
│ ✅ Gestão centralizada │
│ ✅ Compliance e relatórios │
│ ✅ Cross-region automático │
│ │
│ Alternativa: Data Lifecycle Manager (DLM) │
│ Mais simples, mas com menos funcionalidades │
│ │
└─────────────────────────────────────────────────────────────┘
Custo dos Snapshots
┌─────────────────────────────────────────────────────────────┐
│ CUSTO DOS SNAPSHOTS │
├─────────────────────────────────────────────────────────────┤
│ │
│ Preço: ~$0.05 por GB-mês │
│ │
│ Exemplo: │
│ • Volume 100 GB │
│ • 60 GB de dados reais │
│ • 7 snapshots (1 semana diário) │
│ │
│ Primeiro snapshot: 60 GB │
│ Seguintes: ~5 GB cada (incremental) │
│ Total armazenado: 60 + (6 × 5) = 90 GB │
│ │
│ Custo mensal: 90 × $0.05 = $4.50 │
│ │
│ ⚠️ Snapshots esquecidos geram custo! │
│ Audite regularmente e exclua os desnecessários │
│ │
└─────────────────────────────────────────────────────────────┘
Snapshot vs AMI
┌─────────────────────────────────────────────────────────────┐
│ SNAPSHOT vs AMI │
├─────────────────────────────────────────────────────────────┤
│ │
│ SNAPSHOT AMI │
│ ──────── ─── │
│ • Backup de UM volume • Imagem completa │
│ • Apenas dados • SO + Config + Dados │
│ • Para restaurar dados • Para lançar instâncias │
│ • Nível de bloco • Nível de instância │
│ │
│ Relação: │
│ AMI = Metadados + Snapshots dos volumes │
│ │
│ ┌────────────────────────────────────────┐ │
│ │ AMI │ │
│ │ ┌──────────────────────────────────┐ │ │
│ │ │ Metadados (nome, arch, etc.) │ │ │
│ │ └──────────────────────────────────┘ │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ Snapshot │ │ Snapshot │ │ │
│ │ │ Root volume │ │ Data volume │ │ │
│ │ └──────────────┘ └──────────────┘ │ │
│ └────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Comandos Úteis
# Listar todos os snapshots
aws ec2 describe-snapshots --owner-ids self
# Excluir um snapshot
aws ec2 delete-snapshot --snapshot-id snap-xxx
# Copiar para outra região
aws ec2 copy-snapshot \
--source-region us-east-1 \
--source-snapshot-id snap-xxx \
--region eu-west-1
# Compartilhar um snapshot com outra conta
aws ec2 modify-snapshot-attribute \
--snapshot-id snap-xxx \
--attribute createVolumePermission \
--operation-type add \
--user-ids 123456789012
# Encontrar snapshots órfãos (sem volume de origem)
aws ec2 describe-snapshots \
--owner-ids self \
--query 'Snapshots[?!VolumeId]'
Quiz de Validação
- O que é um snapshot incremental?
- Onde os snapshots são armazenados?
- É possível criar um volume em uma AZ diferente a partir de um snapshot?
- Qual a relação entre AMI e snapshot?
- Como automatizar os snapshots?
Próxima seção: Lab: Armazenamento EBS