Introducción
Tu aplicación de informes necesita un disco independiente para su archivo de informe. Crearás un volumen de Amazon EBS, lo adjuntarás a una instancia EC2, formatearás y montarás su sistema de archivos y servirás un informe desde ese volumen. Después desmontarás, separarás y eliminarás los recursos que hayas creado.
Debes conocer ya el lanzamiento de EC2 y SSH. Cada laboratorio empieza desde cero; este entorno proporciona su propia imagen de aplicación, red y par de claves.
Relación con la certificación
Este laboratorio practica la selección de almacenamiento de bloques para una carga de trabajo EC2 y apoya los conceptos de almacenamiento de la tarea 3.6 de los objetivos del dominio 3 de AWS Certified Cloud Practitioner CLF-C02.
Lanza el servidor de almacenamiento
En este paso, lanzarás la instancia de la aplicación e identificarás su zona de disponibilidad.
Empieza en tu espacio de trabajo y carga los identificadores de recursos proporcionados:
cd /home/labex/project
source launch.env
Lanza una instancia llamada storage-server. La imagen ya contiene una aplicación de informes; tu trabajo consiste en proporcionarle su volumen de datos:
aws ec2 \
run-instances \
--image-id "$AMI_ID" \
--instance-type t3.micro \
--subnet-id "$SUBNET_ID" \
--security-group-ids "$SECURITY_GROUP_ID" \
--key-name report-key \
--count 1 \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=storage-server}]'
Obtén el identificador de la instancia mediante su etiqueta de nombre:
INSTANCE_ID=$(aws ec2 \
describe-instances \
--filters Name=tag:Name,Values=storage-server \
--query 'Reservations[0].Instances[0].InstanceId' \
--output text)
Espera a que la instancia esté en ejecución:
aws ec2 \
wait instance-running \
--instance-ids "$INSTANCE_ID"
Una zona de disponibilidad es una ubicación aislada dentro de una región. Un volumen EBS se adjunta a una instancia de la misma zona de disponibilidad. Consulta la zona de la instancia en lugar de adivinarla:
AVAILABILITY_ZONE=$(aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[0].Instances[0].Placement.AvailabilityZone' \
--output text)
Inspecciona el estado y la zona:
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,Zone:Placement.AvailabilityZone}'
Confirma running. Abre AWS View, pulsa Refresh resources, selecciona storage-server y pulsa Check application. Confirma HTTP 200 antes de añadir almacenamiento.
Crea y adjunta el volumen de datos
En este paso, crearás un volumen de datos EBS independiente y lo adjuntarás al servidor en ejecución.
Amazon EBS proporciona almacenamiento de bloques para EC2. Un volumen es un recurso similar a un disco, mientras que un sistema de archivos organiza los archivos de ese disco. Adjuntar un volumen hace que su dispositivo de bloques esté disponible; no crea un sistema de archivos. La guía de volúmenes EBS describe la conexión y la persistencia de los volúmenes.
Crea un volumen SSD de uso general pequeño y vacío. gp3 selecciona el tipo de volumen, --size 1 solicita un GiB y la variable de zona lo sitúa junto a tu instancia. Guarda su identificador para las operaciones posteriores:
VOLUME_ID=$(aws ec2 \
create-volume \
--availability-zone "$AVAILABILITY_ZONE" \
--size 1 \
--volume-type gp3 \
--tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=report-data}]' \
--query 'VolumeId' \
--output text)
Espera a que el nuevo volumen esté disponible:
aws ec2 \
wait volume-available \
--volume-ids "$VOLUME_ID"
Adjúntalo con el nombre de dispositivo de la API /dev/sdf:
aws ec2 \
attach-volume \
--volume-id "$VOLUME_ID" \
--instance-id "$INSTANCE_ID" \
--device /dev/sdf
Espera a que termine la conexión:
aws ec2 \
wait volume-in-use \
--volume-ids "$VOLUME_ID"
Inspecciona el volumen y su conexión:
aws ec2 \
describe-volumes \
--volume-ids "$VOLUME_ID" \
--query 'Volumes[].{Volume:VolumeId,State:State,Zone:AvailabilityZone,Size:Size,Type:VolumeType,Attachments:Attachments}'
Confirma in-use, el tamaño 1, el tipo gp3 y una conexión a tu instancia. Actualiza AWS View e inspecciona la fila del volumen. El volumen raíz es independiente del nuevo volumen de datos.
Monta el volumen y sirve un informe
En este paso, inicializarás el volumen de datos vacío y pondrás un informe a disposición de la aplicación.
Consulta la dirección pública actual de la instancia:
PUBLIC_IP=$(aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[0].Instances[0].PublicIpAddress' \
--output text)
Conéctate con la configuración SSH proporcionada:
ssh -F ssh_config ubuntu@"$PUBLIC_IP"
Dentro de la instancia, inspecciona el dispositivo recién adjuntado. Su nombre en Linux en este laboratorio es /dev/xvdf; los nombres de dispositivo pueden diferir del nombre de conexión de la API. Otras imágenes EC2 pueden mostrar nombres NVMe, por lo que debes identificar un disco antes de operar sobre él. La guía oficial de preparación de volúmenes en Linux explica esta diferencia.
lsblk -f /dev/xvdf
Confirma que el dispositivo no tenga tipo de sistema de archivos. Crea un sistema de archivos ext4 únicamente en este volumen de datos recién creado y vacío. Formatear un volumen con datos existentes los borraría:
sudo mkfs.ext4 /dev/xvdf
Un punto de montaje es el directorio a través del cual accedes a un sistema de archivos. Monta el nuevo sistema de archivos en el directorio preparado para la aplicación de informes:
sudo mount /dev/xvdf /srv/reports
Confirma el dispositivo de origen, el sistema de archivos y el punto de montaje:
findmnt /srv/reports
Busca /dev/xvdf, ext4 y /srv/reports. Crea un informe CSV con datos sintéticos. sudo tee escribe en el sistema de archivos propiedad del administrador; el documento incrustado entre comillas conserva las dos líneas:
sudo tee /srv/reports/report.csv <<'CSV'
period,total
Q1,320
CSV
Vuelve a leer el archivo:
cat /srv/reports/report.csv
Vuelve al terminal de LabEx:
exit
En AWS View, selecciona storage-server y pulsa Read volume report. Confirma HTTP 200 y el texto CSV period,total y Q1,320. Esta respuesta demuestra que la aplicación puede leer el archivo del volumen montado.
El montaje de este laboratorio es manual. Un reinicio no restaura automáticamente un montaje manual; en producción normalmente se configura el UUID del sistema de archivos en /etc/fstab después de probar la entrada.
Desmonta, separa y elimina
En este paso, eliminarás el volumen de datos y la instancia de la aplicación en un orden controlado.
Primero vuelve a conectarte a la instancia de la aplicación:
ssh -F ssh_config ubuntu@"$PUBLIC_IP"
Desmonta el sistema de archivos antes de separar su disco. Esto detiene el acceso al sistema de archivos y vacía las escrituras pendientes:
sudo umount /srv/reports
Confirma que ya no esté montado:
findmnt /srv/reports
Un directorio sin montar no produce salida y findmnt devuelve un estado de salida distinto de cero; aquí es lo esperado. Vuelve al terminal de LabEx:
exit
Separa únicamente tu volumen de datos:
aws ec2 \
detach-volume \
--volume-id "$VOLUME_ID" \
--instance-id "$INSTANCE_ID" \
--device /dev/sdf
Espera a que el volumen vuelva a estar disponible:
aws ec2 \
wait volume-available \
--volume-ids "$VOLUME_ID"
Elimina el volumen separado. Esto elimina sus datos de forma permanente, así que conserva los archivos importantes o una copia de seguridad antes de eliminar un volumen de producción:
aws ec2 \
delete-volume \
--volume-id "$VOLUME_ID"
Termina la instancia de la aplicación:
aws ec2 \
terminate-instances \
--instance-ids "$INSTANCE_ID"
Espera a que termine:
aws ec2 \
wait instance-terminated \
--instance-ids "$INSTANCE_ID"
Inspecciona el estado final de la instancia:
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name}'
Confirma terminated y después enumera los volúmenes restantes:
aws ec2 \
describe-volumes \
--query 'Volumes[].{Volume:VolumeId,State:State}'
Espera []: eliminaste explícitamente tu volumen de datos y el volumen raíz de esta instancia se eliminó al terminarla. Actualiza AWS View y confirma que el servidor ya no sea un destino en ejecución y que la lista de volúmenes esté vacía. Conserva la red y el par de claves preparados.
Resumen
Creaste un volumen de datos EBS en la misma zona de disponibilidad que una instancia EC2, lo adjuntaste, formateaste un sistema de archivos vacío y lo montaste para la aplicación. Verificaste una respuesta real del informe y después desmontaste, separaste y eliminaste el volumen antes de terminar el servidor.



