Tema 2 · 5 · Almacenamiento de archivos (EFS): una carpeta compartida por dos máquinas
Presentación del Tema 2: «Laboratorio almacenamiento de archivos» (1 y 2) y «Laboratorio de archivos · paso a paso». Duración: unos 45 minutos. Coste: céntimos si borras todo el mismo día (el EFS y las instancias siguen facturando mientras existan).
Etiquetas de lo que creas. Todo recurso que crees a mano (máquina, volumen, bucket, base de datos, tabla, función...) ponle estas etiquetas, al crearlo (apartado Tags / Etiquetas) o después desde su pestaña de etiquetas:
curso=G214,universidad=CUNEFyactividad=02.05-EFSCarpetaCompartida. Si algún día hay que borrar recursos a mano, se localizan todos de golpe conaws resourcegroupstaggingapi get-resources --region eu-north-1 --tag-filters Key=actividad,Values=02.05-EFSCarpetaCompartida. Más detalle (cómo etiquetar con la CLI, cómo buscar y qué hacer en una emergencia): README principal, sección «Etiquetas».
Qué vas a hacer
Crear un sistema de archivos compartido (EFS), montarlo en dos máquinas a la vez y comprobar lo que con EBS era imposible: lo que escribe una máquina lo ve la otra al instante. Después pruebas permisos, mides el rendimiento frente al disco raíz y ves qué pasa cuando el cortafuegos corta el acceso.
VM 1 (t3.small) VM 2 (t3.small)
~/efs ◄──────── EFS (efs-compartido) ────────► ~/efs
puerto 2049 (NFS), Security Group propio
Esta carpeta no tiene ficheros. Guía con capturas: Anexo - Tema 2 - Guías de creación de recursos.docx (apartado Almacenamiento de archivos).
Qué se crea en AWS
| Recurso | Detalle |
|---|---|
| 2 instancias EC2 | vm-efs (renómbralas 1 y 2), Amazon Linux 2023, t3.small |
| Security Group | SSH (22) solo desde tu IP y NFS (2049) con origen el propio grupo |
| Sistema de archivos EFS | efs-compartido, con los mount targets en ese mismo Security Group |
Antes de empezar
- [ ] Cuenta de AWS y región eu-north-1.
- [ ] Sabes entrar en una máquina Linux (botón Connect o
ssh):01.01-CrearYConectarVM.md. Con el SSH solo desde My IP el botón Connect no conecta: añade una segunda regla SSH con origen la lista de prefijoscom.amazonaws.eu-north-1.ec2-instance-connect(o usasshcon la llave). - [ ] Qué es un Security Group (Anexo Tema 2, apartado Security Groups).
Paso a paso
Paso 1 · Crea las dos instancias
EC2 → Launch instance: nombre vm-efs, AMI Amazon Linux 2023, tipo t3.small, par de claves existente o nuevo, VPC y subred por defecto. En Network settings crea un Security Group nuevo con SSH desde My IP (no Anywhere) y anota su nombre (la consola lo llama launch-wizard-N). En el resumen, sube el número de instancias a 2 y Launch. Renombra las dos máquinas como 1 y 2 para distinguirlas (lápiz junto al nombre).
Paso 2 · Abre el puerto NFS en el Security Group
EC2 → Network & Security → Security Groups → el grupo de tus máquinas → Inbound rules → Edit inbound rules → Add rule: tipo NFS (TCP 2049) y, en Source, Custom y selecciona el propio grupo (sg-…). Guarda.
| Tipo | Protocolo | Origen |
|---|---|---|
| NFS | TCP 2049 | Custom: el propio grupo (sg-…) |
| SSH | TCP 22 | My IP (tu IP, /32) |
Nunca 0.0.0.0/0 («Anywhere»): abriría el puerto a todo Internet.
Qué verás: en Inbound rules dos reglas, ninguna con 0.0.0.0/0.
Paso 3 · Crea el EFS
Amazon EFS → Create file system → nombre efs-compartido, VPC por defecto (la misma que las instancias) → Create. Espera unos minutos hasta que los mount targets estén Available. Aunque aparezca disponible, el nombre DNS puede tardar hasta 5-7 minutos en resolverse: si al montar sale Failed to resolve, espera y repite.
Paso 4 · Cambia el Security Group de los mount targets
EFS → efs-compartido → pestaña Network → Manage: en cada mount target quita el grupo default y pon el mismo Security Group de las dos instancias → Save. Sin esto el tráfico NFS no llega al EFS.
Qué verás: en Network, todos los mount targets con tu Security Group.
Paso 5 · Instala el cliente y monta (en las DOS máquinas)
Conéctate a cada máquina y, desde tu carpeta personal:
cd ~
mkdir -p efs
sudo dnf install -y amazon-efs-utils
Después, en la consola: EFS → efs-compartido → Attach → copia el comando Using the EFS mount helper (Mount via DNS) y pégalo. Es de esta forma, con tu ID de EFS:
sudo mount -t efs -o tls fs-0123456789abcdef0:/ efs
df -h | grep efs
El comando termina en efs, una ruta relativa: ejecútalo desde ~ para que monte la carpeta que acabas de crear. Monta con el tipo efs, no con nfs a mano: el cliente resuelve el DNS y negocia el cifrado en tránsito.
Qué verás: df -h | grep efs muestra 127.0.0.1:/ 8.0E 0 8.0E 0% /home/ec2-user/efs (EFS no tiene tamaño fijo; 8,0E es normal). No sigas hasta ver esa línea.
Si falla al instante con Failed to resolve "fs-...efs...": el ID está mal copiado o el EFS es reciente (espera hasta 5-7 minutos y repite). Si se queda colgado (Mount attempt 1/3 failed due to timeout): es el puerto 2049 del Security Group o los mount targets con otro grupo; Ctrl+C no siempre lo corta: corrige el grupo desde otra pestaña y se libera solo.
Paso 6 · Escribe en una máquina y lee en la otra
# VM 1
echo "prueba" | sudo tee ~/efs/fichero.txt
# VM 2
ls -l ~/efs
cat ~/efs/fichero.txt
Qué verás: en la VM 2 aparece fichero.txt con prueba. Esta es la prueba que cierra el tema: con EBS esto era imposible (un disco solo lo ve una máquina).
Paso 7 · Permisos
sudo chown ec2-user:ec2-user ~/efs # la raíz del EFS es de root; esto lo cambia (basta en una VM: es compartido)
mkdir ~/efs/carpeta && chmod 750 ~/efs/carpeta
ls -ld ~/efs/carpeta # desde las DOS máquinas
Qué verás: los mismos permisos y propietario en las dos. EFS guarda el uid/gid numérico (ec2-user es el 1000 en las dos máquinas).
Paso 8 · Mide el rendimiento
Mide en ~, no en /tmp (en Amazon Linux 2023 /tmp está en memoria):
sudo dd if=/dev/zero of=~/efs/test bs=1M count=512 oflag=direct
sudo dd if=/dev/zero of=~/test bs=1M count=512 oflag=direct
Qué verás: el EFS ronda los 35-40 MB/s y el disco raíz unos 170 MB/s (cifras de las pruebas; las tuyas variarán). El EFS es más lento pero compartido.
Paso 9 · Corta el acceso y mira qué pasa
- En el Security Group, quita la regla NFS (2049).
- Ejecuta:
timeout 20 ls ~/efs; echo $?
Qué verás: 124: la orden se cuelga (no da error, espera). No desmontes con la regla quitada (umount se bloquearía).
- Restaura la regla y repite: responde al instante.
Errores frecuentes
| Qué ves | Causa | Solución |
|---|---|---|
Failed to resolve "fs-...efs..." al montar |
ID mal copiado, o EFS recién creado (DNS tarda hasta 5-7 minutos) | Comprueba el ID en EFS → File systems; espera y repite el Attach |
mount se queda colgado / timeout after 15 sec |
Puerto 2049 cerrado o mount targets con el grupo default |
Regla NFS con origen el propio grupo y mount targets con ese grupo (paso 4) |
Permission denied al escribir sin sudo |
La raíz del EFS es de root | sudo chown ec2-user:ec2-user ~/efs |
df muestra 0 usado aunque hayas escrito |
EFS no refleja lo escrito en df |
Para el consumo real, mira Monitoring en la consola de EFS |
| Botón Connect no conecta | SSH solo desde My IP | Regla SSH con la lista de prefijos com.amazonaws.eu-north-1.ec2-instance-connect, o usa ssh con la llave |
Limpieza (en este orden)
- En las dos máquinas:
sudo rm ~/test ~/efs/test(512 MiB) ysudo umount ~/efs. Hazlo antes de tocar el Security Group o borrar el EFS: con el EFS montado y sin acceso,umountse bloquea. - Termina las dos instancias.
- EFS → File systems →
efs-compartido→ Delete y escribe su ID (se borran también los mount targets). - Borra el Security Group (si da error de dependencia, espera un par de minutos a que desaparezcan los mount targets y reintenta) y el par de claves.
Cómo sabes que has terminado
- [ ]
df -hmuestra127.0.0.1:/ 8.0Een las dos máquinas. - [ ] Un fichero creado en la VM 1 se ve en la VM 2.
- [ ] Viste
124con la regla 2049 quitada y respuesta inmediata al restaurarla. - [ ] Sabes explicar por qué el EFS es más lento que el disco raíz y qué ventaja tiene (es compartido).
- [ ] Todo borrado: instancias, EFS, Security Group.
Anterior: 02.04-EBSSnapshotDetachAmpliar.md · Siguiente: 02.06-laboratoriocafeteria