Servidor disponible solo los jueves de 10:30 a 12:30 y los viernes de 10:00 a 13:00 (hora de Madrid); fuera de ese horario está apagado. Fuera del horario, usa la documentación local del material que te descargaste (el README.md de cada carpeta).
G214 · CUNEF
Inicio / tema2

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 = CUNEF y actividad = 02.05-EFSCarpetaCompartida. Si algún día hay que borrar recursos a mano, se localizan todos de golpe con aws 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

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

  1. En el Security Group, quita la regla NFS (2049).
  2. 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).

  1. 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)

  1. En las dos máquinas: sudo rm ~/test ~/efs/test (512 MiB) y sudo umount ~/efs. Hazlo antes de tocar el Security Group o borrar el EFS: con el EFS montado y sin acceso, umount se bloquea.
  2. Termina las dos instancias.
  3. EFS → File systems → efs-compartido → Delete y escribe su ID (se borran también los mount targets).
  4. 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

Anterior: 02.04-EBSSnapshotDetachAmpliar.md · Siguiente: 02.06-laboratoriocafeteria