Cloud & Infraestrutura

O que Todo Dev Deve Saber sobre EBS e EFS: Block Storage vs File Storage em Casos Reais

7 min de leitura

O que Todo Dev Deve Saber sobre EBS e EFS: Block Storage vs File Storage em Casos Reais

O Que Todo Dev Deve Saber sobre EBS e EFS 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. Quando Usar EBS 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

<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 &quot;/dev/nvme1n1 /data ext4 defaults,nofail 0 2&quot; | 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 &quot;aws_efs_file_system&quot; &quot;app_efs&quot; {

performance_mode = &quot;generalPurpose&quot;

throughput_mode = &quot;bursting&quot;

encrypted = true

tags = {

Name = &quot;app-efs&quot;

}

}

Criar mount targets em múltiplas AZs

resource &quot;aws_efs_mount_target&quot; &quot;efs_mount_az1&quot; {

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 &quot;aws_instance&quot; &quot;web_server&quot; {

ami = &quot;ami-0c55b159cbfafe1f0&quot;

instance_type = &quot;t3.micro&quot;

subnet_id = aws_subnet.private_az1.id

user_data = base64encode(&lt;&lt;-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(&#039;ec2&#039;, region_name=&#039;us-east-1&#039;)

cloudwatch = boto3.client(&#039;cloudwatch&#039;, region_name=&#039;us-east-1&#039;)

Listar volumes EBS

volumes = ec2.describe_volumes()[&#039;Volumes&#039;]

for vol in volumes:

vol_id = vol[&#039;VolumeId&#039;]

Obter métricas de IOPS

response = cloudwatch.get_metric_statistics(

Namespace=&#039;AWS/EBS&#039;,

MetricName=&#039;VolumeReadOps&#039;,

Dimensions=[{&#039;Name&#039;: &#039;VolumeId&#039;, &#039;Value&#039;: vol_id}],

StartTime=datetime.utcnow() - timedelta(hours=1),

EndTime=datetime.utcnow(),

Period=300,

Statistics=[&#039;Average&#039;, &#039;Maximum&#039;]

)

print(f&quot;Volume {vol_id}: {response[&#039;Datapoints&#039;]}&quot;)</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>

Comentários

Mais em Cloud & Infraestrutura

Guia Completo de Billing e Cost Explorer: Tags, Budgets e Alertas de Custo
Guia Completo de Billing e Cost Explorer: Tags, Budgets e Alertas de Custo

Introdução: Por que Gerenciar Custos na Cloud? Gerenciar custos em ambientes...

Boas Práticas de CloudFormation em Profundidade: Templates, Stacks e StackSets para Times Ágeis
Boas Práticas de CloudFormation em Profundidade: Templates, Stacks e StackSets para Times Ágeis

Fundamentos de CloudFormation para Automação de Infraestrutura CloudFormation...

Nginx na prática: instalação, configuração e servidor rodando
Nginx na prática: instalação, configuração e servidor rodando

O Nginx está instalado — agora configure. Estrutura de diretórios, virtual ho...