Conceptos Fundamentales de EBS
¿Qué es Amazon EBS?
Amazon EBS (Elastic Block Store) es el servicio de almacenamiento en bloques de AWS. Proporciona volúmenes de almacenamiento persistente para las instancias EC2.
┌─────────────────────────────────────────────────────────────┐
│ AMAZON EBS │
├─────────────────────────────────────────────────────────────┤
│ │
│ "Discos duros virtuales para sus servidores en la nube" │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Instance EC2 │ │
│ │ │ │
│ │ ┌────────────────┐ ┌────────────────┐ │ │
│ │ │ Volume EBS │ │ Volume EBS │ │ │
│ │ │ (Root - OS) │ │ (Data) │ │ │
│ │ │ /dev/xvda │ │ /dev/xvdb │ │ │
│ │ │ 8 GB │ │ 100 GB │ │ │
│ │ └────────────────┘ └────────────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ Características: │
│ • Almacenamiento en bloques (como un disco duro) │
│ • Persistente (los datos se conservan tras apagado) │
│ • Adjuntable/Desmontable │
│ • Replicado dentro de la AZ │
│ • Cifrado disponible │
│ │
└─────────────────────────────────────────────────────────────┘
EBS vs Instance Store
┌─────────────────────────────────────────────────────────────┐
│ EBS vs INSTANCE STORE │
├─────────────────────────────────────────────────────────────┤
│ │
│ EBS (Elastic Block Store) INSTANCE STORE │
│ ───────────────────────── ───────────── │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Almacenamiento │ │ Almacenamiento │ │
│ │ RED │ │ LOCAL │ │
│ │ │ │ (en el host) │ │
│ │ Volumen │ │ Disco físico │ │
│ │ separado de la │ │ del servidor │ │
│ │ instancia │ │ │ │
│ └─────────────────┘ └─────────────────┘ │
│ │
│ ✅ Persistente ❌ Efímero │
│ ✅ Snapshots ❌ Sin backup │
│ ✅ Desmontable ❌ Fijo a la instancia │
│ ✅ Redimensionable ❌ Tamaño fijo │
│ │
│ ⚠️ Latencia de red ✅ Muy baja latencia │
│ 💰 Facturado ✅ Incluido (algunos tipos) │
│ │
│ CASOS DE USO: │
│ • Datos a conservar • Caché temporal │
│ • Bases de datos • Datos efímeros │
│ • Aplicaciones • Buffer/Swap │
│ │
└─────────────────────────────────────────────────────────────┘
Tipos de Volúmenes EBS
Visión General
┌─────────────────────────────────────────────────────────────┐
│ TIPOS DE VOLÚMENES EBS │
├─────────────────────────────────────────────────────────────┤
│ │
│ SSD (Solid State Drive) │
│ ├── gp3 (General Purpose SSD) ← RECOMENDADO │
│ ├── gp2 (General Purpose SSD - antiguo) │
│ ├── io1 (Provisioned IOPS SSD) │
│ └── io2 (Provisioned IOPS SSD - nueva gen) │
│ │
│ HDD (Hard Disk Drive) │
│ ├── st1 (Throughput Optimized HDD) │
│ └── sc1 (Cold HDD) │
│ │
│ Elección rápida: │
│ • Uso general, boot → gp3 │
│ • BDD alto rendimiento → io2 │
│ • Big Data, secuencial → st1 │
│ • Archivo, acceso raro → sc1 │
│ │
└─────────────────────────────────────────────────────────────┘
Comparación Detallada
| Tipo | IOPS Máx | Ancho de banda Máx | Tamaño | Precio/GB | Casos de Uso |
|---|---|---|---|---|---|
| gp3 | 16,000 | 1,000 MB/s | 1GB-16TB | $0.08 | Uso general |
| gp2 | 16,000 | 250 MB/s | 1GB-16TB | $0.10 | Legacy |
| io2 | 64,000 | 1,000 MB/s | 4GB-16TB | $0.125 + IOPS | BDD crítica |
| io1 | 64,000 | 1,000 MB/s | 4GB-16TB | $0.125 + IOPS | Legacy |
| st1 | 500 | 500 MB/s | 500GB-16TB | $0.045 | Big Data |
| sc1 | 250 | 250 MB/s | 500GB-16TB | $0.025 | Archivo |
gp3 vs gp2 (Lo Más Importante)
┌─────────────────────────────────────────────────────────────┐
│ gp3 vs gp2 │
├─────────────────────────────────────────────────────────────┤
│ │
│ gp2 (antiguo) gp3 (nuevo, preferido) │
│ ──────────── ───────────────────── │
│ │
│ IOPS ligados al tamaño IOPS configurables │
│ 3 IOPS/GB (mín 100) 3,000 IOPS base │
│ Máx 16,000 IOPS Hasta 16,000 IOPS │
│ │
│ Ancho de banda limitado Ancho de banda configurable │
│ 128-250 MB/s 125-1,000 MB/s │
│ │
│ $0.10/GB $0.08/GB (+IOPS si >3000) │
│ │
│ Ejemplo 100 GB: Ejemplo 100 GB: │
│ • 300 IOPS (3×100) • 3,000 IOPS (base) │
│ • 128 MB/s • 125 MB/s (extensible) │
│ • $10/mes • $8/mes │
│ │
│ ✅ ¡SIEMPRE preferir gp3 para nuevos volúmenes! │
│ │
└─────────────────────────────────────────────────────────────┘
Ciclo de Vida de un Volumen EBS
┌─────────────────────────────────────────────────────────────┐
│ CICLO DE VIDA EBS │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ │
│ │ Crear │ ← aws ec2 create-volume │
│ └────┬─────┘ │
│ │ │
│ ▼ │
│ ┌──────────┐ │
│ │Available │ ← Volumen creado, no adjuntado │
│ └────┬─────┘ │
│ │ attach-volume │
│ ▼ │
│ ┌──────────┐ │
│ │ In-use │ ← Adjuntado a una instancia │
│ └────┬─────┘ │
│ │ │
│ ┌────┴────┐ │
│ │ │ │
│ ▼ ▼ │
│ Snapshot Detach │
│ │ │ │
│ │ ▼ │
│ │ ┌──────────┐ │
│ │ │Available │ │
│ │ └────┬─────┘ │
│ │ │ delete-volume │
│ │ ▼ │
│ │ ┌──────────┐ │
│ │ │ Deleted │ │
│ │ └──────────┘ │
│ │ │
│ └──► Snapshot (para backup o nueva AZ) │
│ │
└─────────────────────────────────────────────────────────────┘
Volúmenes y AZ
┌─────────────────────────────────────────────────────────────┐
│ EBS Y ZONAS DE DISPONIBILIDAD │
├─────────────────────────────────────────────────────────────┤
│ │
│ ⚠️ ¡Un volumen EBS existe en UNA SOLA AZ! │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Región us-east-1 │ │
│ │ │ │
│ │ ┌───────────────┐ ┌───────────────┐ │ │
│ │ │ us-east-1a │ │ us-east-1b │ │ │
│ │ │ │ │ │ │ │
│ │ │ ┌─────────┐ │ │ ┌─────────┐ │ │ │
│ │ │ │ vol-aaa │ │ ❌ │ │ EC2 │ │ │ │
│ │ │ └─────────┘ │ ───► │ │ │ │ │ │
│ │ │ │ │ └─────────┘ │ │ │
│ │ └───────────────┘ └───────────────┘ │ │
│ │ │ │
│ │ ¡vol-aaa NO puede ser adjuntado a una instancia │ │
│ │ en us-east-1b! │ │
│ │ │ │
│ │ Solución: Crear un snapshot, luego recrear el │ │
│ │ volumen en la otra AZ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Operaciones Comunes
Adjuntar un Volumen
# 1. Crear el volumen (¡misma AZ que la instancia!)
aws ec2 create-volume \
--availability-zone us-east-1a \
--size 100 \
--volume-type gp3
# 2. Adjuntar a la instancia
aws ec2 attach-volume \
--volume-id vol-xxx \
--instance-id i-xxx \
--device /dev/sdf
# 3. En la instancia Linux, formatear y montar
# (Conectarse por SSH)
sudo mkfs -t ext4 /dev/xvdf
sudo mkdir /data
sudo mount /dev/xvdf /data
# 4. Para montaje permanente, editar /etc/fstab
echo '/dev/xvdf /data ext4 defaults,nofail 0 2' | sudo tee -a /etc/fstab
Desmontar un Volumen
# 1. En la instancia, desmontar correctamente
sudo umount /data
# 2. Desmontar vía AWS
aws ec2 detach-volume --volume-id vol-xxx
Redimensionar un Volumen
# 1. Modificar el tamaño (¡no es necesario desmontar!)
aws ec2 modify-volume \
--volume-id vol-xxx \
--size 200
# 2. En la instancia, extender el sistema de archivos
# Para ext4:
sudo growpart /dev/xvdf 1
sudo resize2fs /dev/xvdf1
# Para xfs:
sudo xfs_growfs /data
Delete on Termination
┌─────────────────────────────────────────────────────────────┐
│ DELETE ON TERMINATION │
├─────────────────────────────────────────────────────────────┤
│ │
│ Opción que determina si el volumen se elimina │
│ cuando la instancia es terminada. │
│ │
│ DeleteOnTermination = TRUE (por defecto para root) │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Instancia │ ── Terminate ──► │ Volumen │ │
│ │ terminada │ │ ELIMINADO │ │
│ └─────────────┘ └─────────────┘ │
│ │
│ DeleteOnTermination = FALSE (recomendado para data) │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Instancia │ ── Terminate ──► │ Volumen │ │
│ │ terminada │ │ CONSERVADO │ │
│ └─────────────┘ └─────────────┘ │
│ │
│ Recomendación: │
│ • Volumen root (OS): TRUE (recrear con la instancia) │
│ • Volúmenes de datos: FALSE (conservar los datos) │
│ │
└─────────────────────────────────────────────────────────────┘
Cifrado EBS
┌─────────────────────────────────────────────────────────────┐
│ CIFRADO EBS │
├─────────────────────────────────────────────────────────────┤
│ │
│ Cifrado en reposo con AWS KMS │
│ │
│ Qué está cifrado: │
│ ✅ Datos en el volumen │
│ ✅ Datos en tránsito (volumen ↔ instancia) │
│ ✅ Snapshots creados desde el volumen │
│ ✅ Volúmenes creados desde los snapshots │
│ │
│ Impacto en el rendimiento: MÍNIMO (< 5%) │
│ Costo: Gratis (KMS default key) o key personalizada │
│ │
│ Buena práctica: ¡SIEMPRE cifrar! │
│ │
│ # Crear un volumen cifrado │
│ aws ec2 create-volume \ │
│ --encrypted \ │
│ --kms-key-id alias/aws/ebs \ │
│ --availability-zone us-east-1a \ │
│ --size 100 │
│ │
└─────────────────────────────────────────────────────────────┘
Resumen
| Concepto | Descripción |
|---|---|
| EBS | Almacenamiento en bloques persistente para EC2 |
| gp3 | Tipo recomendado para uso general |
| io2 | Alto rendimiento (BDD) |
| st1/sc1 | HDD para grandes volúmenes, acceso secuencial |
| Snapshot | Backup incremental hacia S3 |
| AZ-bound | Volumen limitado a una sola AZ |
| Cifrado | Siempre activar, impacto mínimo |
Quiz de Validación
- ¿Cuál es la diferencia entre EBS e Instance Store?
- ¿Qué tipo de volumen para una base de datos crítica?
- ¿Se puede adjuntar un volumen de us-east-1a a una instancia en us-east-1b?
- ¿Cuál es la diferencia entre gp2 y gp3?
- ¿Qué es "Delete on Termination"?
Próxima sección: Snapshots