<h2>O Que Todo Dev Deve Saber sobre EBS e EFS</h2>
<p>A escolha entre armazenamento em bloco (EBS) e arquivo (EFS) é uma das decisões mais críticas ao arquitetar soluções na AWS. Ambas são soluções robustas, mas servem propósitos fundamentalmente diferentes. EBS (Elastic Block Storage) funciona como um disco rígido tradicional anexado a uma instância EC2, enquanto EFS (Elastic File System) é um sistema de arquivos compartilhado acessível por múltiplas instâncias simultaneamente. Entender essas diferenças não é apenas teórico — impacta diretamente performance, custo e escalabilidade de suas aplicações.</p>
<h3>Quando Usar EBS</h3>
<p>EBS é ideal para aplicações que precisam de armazenamento de alta performance dedicado a uma única instância. Cada volume EBS é anexado a uma instância EC2 e funciona como um disco persistente. Use EBS quando trabalha com bancos de dados (RDS, MySQL em EC2), aplicações que exigem IOPS previsível ou quando a instância é o ponto único de acesso ao dado. Os volumes podem ser encriptados, ter snapshots automáticos e redimensionados sem downtime (em muitos casos).</p>
<p><strong>Exemplo prático — Configurando e montando um volume EBS:</strong></p>
<pre><code class="language-bash">#!/bin/bash
1. Criar volume EBS (via CLI)
aws ec2 create-volume --size 100 --availability-zone us-east-1a --volume-type gp3
2. Anexar à instância (substitua os IDs)
aws ec2 attach-volume --volume-id vol-1234567 --instance-id i-1234567 --device /dev/sdf
3. Dentro da instância EC2, formatar e montar
sudo mkfs -t ext4 /dev/nvme1n1
sudo mkdir -p /data
sudo mount /dev/nvme1n1 /data
sudo chmod 777 /data
4. Para montar automaticamente ao boot, adicione ao /etc/fstab
echo "/dev/nvme1n1 /data ext4 defaults,nofail 0 2" | sudo tee -a /etc/fstab</code></pre>
<h3>Quando Usar EFS</h3>
<p>EFS é um sistema de arquivos gerenciado que permite compartilhamento entre múltiplas instâncias EC2 em diferentes zonas de disponibilidade. É ideal para aplicações que precisam de acesso compartilhado (servidores web em Auto Scaling Groups, processamento distribuído, CI/CD pipelines). EFS cresce automaticamente conforme você escreve dados — não precisa pré-alocar espaço como em EBS.</p>
<p><strong>Exemplo prático — Configurando EFS com Terraform:</strong></p>
<pre><code class="language-hcl"># Criar o sistema de arquivos EFS
resource "aws_efs_file_system" "app_efs" {
performance_mode = "generalPurpose"
throughput_mode = "bursting"
encrypted = true
tags = {
Name = "app-efs"
}
}
Criar mount targets em múltiplas AZs
resource "aws_efs_mount_target" "efs_mount_az1" {
file_system_id = aws_efs_file_system.app_efs.id
subnet_id = aws_subnet.private_az1.id
security_groups = [aws_security_group.efs_sg.id]
}
Montar em uma instância EC2
resource "aws_instance" "web_server" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t3.micro"
subnet_id = aws_subnet.private_az1.id
user_data = base64encode(<<-EOF
#!/bin/bash
sudo apt-get update
sudo apt-get install -y nfs-common
sudo mkdir -p /mnt/efs
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 \
${aws_efs_file_system.app_efs.dns_name}:/ /mnt/efs
EOF
)
}</code></pre>
<h3>Comparação Prática: EBS vs EFS</h3>
<div class="table-wrap"><table><thead><tr><th>Aspecto</th><th>EBS</th><th>EFS</th></tr></thead><tbody><tr><td><strong>Acesso</strong></td><td>Uma instância</td><td>Múltiplas instâncias</td></tr><tr><td><strong>Performance</strong></td><td>Previsível (IOPS fixo)</td><td>Escalável automaticamente</td></tr><tr><td><strong>Preço</strong></td><td>Paga pelo tamanho alocado</td><td>Paga pelo uso real</td></tr><tr><td><strong>Use case</strong></td><td>BD, aplicações single-server</td><td>Compartilhamento, Auto Scaling</td></tr><tr><td><strong>Crescimento</strong></td><td>Manual</td><td>Automático</td></tr></tbody></table></div>
<p>Um caso real: você está rodando um WordPress em Auto Scaling Group. Com EBS, cada nova instância teria seu próprio storage — impossível compartilhar arquivos de upload. Com EFS, todas as instâncias veem os mesmos arquivos. Outro exemplo: um banco de dados PostgreSQL em uma única instância ec2 deve usar EBS (mais rápido e previsível) em vez de EFS.</p>
<h3>Otimização e Boas Práticas</h3>
<p>Para EBS, use volumes gp3 (melhor custo-benefício que gp2) e implemente snapshots para backup automatizado. Monitore IOPS e throughput com CloudWatch. Para EFS, prefira modo de throughput provisioned apenas se realmente precisar — bursting é mais econômico para cargas variáveis. Use IAM policies para controlar acesso e sempre encryte ambos em produção.</p>
<p><strong>Script Python para monitorar EBS:</strong></p>
<pre><code class="language-python">import boto3
from datetime import datetime, timedelta
ec2 = boto3.client('ec2', region_name='us-east-1')
cloudwatch = boto3.client('cloudwatch', region_name='us-east-1')
Listar volumes EBS
volumes = ec2.describe_volumes()['Volumes']
for vol in volumes:
vol_id = vol['VolumeId']
Obter métricas de IOPS
response = cloudwatch.get_metric_statistics(
Namespace='AWS/EBS',
MetricName='VolumeReadOps',
Dimensions=[{'Name': 'VolumeId', 'Value': vol_id}],
StartTime=datetime.utcnow() - timedelta(hours=1),
EndTime=datetime.utcnow(),
Period=300,
Statistics=['Average', 'Maximum']
)
print(f"Volume {vol_id}: {response['Datapoints']}")</code></pre>
<h2>Conclusão</h2>
<p><strong>Três pontos-chave:</strong> (1) EBS é seu disco rígido — use para performance garantida e dados que pertencem a uma instância específica; (2) EFS é seu servidor de arquivos compartilhado — use quando múltiplas instâncias precisam acessar os mesmos dados; (3) Custe a escolha: EFS é mais caro por GB, mas elimina complexidade de sincronização e é ideal para arquiteturas escaláveis. Na dúvida, protótipo com EFS em desenvolvimento e avalie custo/performance antes de produção.</p>
<h2>Referências</h2>
<ul>
<li><a href="https://docs.aws.amazon.com/ebs/" target="_blank" rel="noopener noreferrer">AWS EBS Documentation</a></li>
<li><a href="https://docs.aws.amazon.com/efs/" target="_blank" rel="noopener noreferrer">AWS EFS User Guide</a></li>
<li><a href="https://aws.amazon.com/storageservices/" target="_blank" rel="noopener noreferrer">AWS Storage Classes Comparison</a></li>
<li><a href="https://docs.aws.amazon.com/wellarchitected/latest/userguide/storage_reqs.html" target="_blank" rel="noopener noreferrer">Well-Architected Framework: Storage</a></li>
<li><a href="https://linuxacademy.com" target="_blank" rel="noopener noreferrer">Linux Academy: EBS vs EFS Deep Dive</a></li>
</ul>