Administrar el ciclo de vida y las direcciones de instancias

AWSBeginner
Practicar Ahora

Introducción

Tu equipo quiere detener un servidor de informes durante el mantenimiento y volver a iniciarlo con una dirección pública predecible. Operarás una instancia EC2, compararás sus estados detenido y en ejecución, asociarás una Elastic IP y comprobarás la aplicación tras otro ciclo de parada e inicio.

Ya debes conocer el lanzamiento de EC2, SSH y User Data. Este entorno nuevo proporciona su propia imagen, red, par de claves y script de inicio. Tú lanzarás y operarás el servidor.

Relación con la certificación

Las operaciones de instancias y el direccionamiento público apoyan los conceptos de computación y redes de las tareas 3.3 y 3.5 de los objetivos del dominio 3 de AWS Certified Cloud Practitioner CLF-C02.

Lanzar el servidor de mantenimiento

En este paso lanzarás el servidor de aplicación e inspeccionarás su estado inicial y sus direcciones.

Empieza en el directorio del proyecto:

cd /home/labex/project

Carga los ID de la imagen, la subred y el grupo de seguridad proporcionados:

source launch.env

El script de inicio proporcionado configura el saludo de la aplicación de informes. Inspecciónalo antes de usarlo:

cat lifecycle-user-data.sh

Busca el mensaje Lifecycle server. Como en el laboratorio anterior, --user-data file://... lee el script Bash y lo proporciona a la instancia al lanzarla. Crea un servidor llamado lifecycle-server:

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 \
  --user-data file://lifecycle-user-data.sh \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=lifecycle-server}]'

Guarda el ID de la instancia mediante una consulta de su etiqueta de nombre para las siguientes operaciones:

INSTANCE_ID=$(aws ec2 \
  describe-instances \
  --filters Name=tag:Name,Values=lifecycle-server \
  --query 'Reservations[0].Instances[0].InstanceId' \
  --output text)

Inspecciona su estado y sus direcciones de red:

aws ec2 \
  describe-instances \
  --instance-ids "$INSTANCE_ID" \
  --query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,PrivateIPv4:PrivateIpAddress,PublicIPv4:PublicIpAddress}'

Confirma running; si todavía aparece pending, espera un momento y repite la consulta. Observa las direcciones IPv4 privada y pública de la salida. Las compararás después del mantenimiento.

Abre AWS View y pulsa Refresh resources. Selecciona lifecycle-server en Application requests y pulsa Check application. Confirma HTTP 200 y Lifecycle server antes de cambiar el estado de la instancia.

Detener el servidor para el mantenimiento

En este paso detendrás la instancia y confirmarás que no puede atender solicitudes de la aplicación.

Una instancia stopped está apagada y puede iniciarse de nuevo. Una instancia terminated se ha eliminado permanentemente. En una instancia respaldada por EBS, detenerla conserva el volumen raíz; la aplicación no está disponible mientras la instancia está detenida. La guía oficial del ciclo de vida de instancias explica estas diferencias.

Detén tu instancia de aplicación:

aws ec2 \
  stop-instances \
  --instance-ids "$INSTANCE_ID"

Espera a stopped. El waiter consulta periódicamente el estado y termina sin salida cuando se cumple la condición:

aws ec2 \
  wait instance-stopped \
  --instance-ids "$INSTANCE_ID"

Vuelve a inspeccionar el estado y las direcciones:

aws ec2 \
  describe-instances \
  --instance-ids "$INSTANCE_ID" \
  --query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,PrivateIPv4:PrivateIpAddress,PublicIPv4:PublicIpAddress}'

Confirma stopped. La dirección IPv4 privada permanece, mientras que la dirección IPv4 pública asignada automáticamente se libera. Necesitarás la dirección pública actual después de volver a iniciar la instancia.

Actualiza AWS View. Confirma stopped y que la instancia ya no esté disponible en el selector de aplicaciones en ejecución. El servidor no está disponible durante el mantenimiento, aunque permanezcan el registro de la instancia y su almacenamiento raíz.

Conservar una dirección pública con una Elastic IP

En este paso iniciarás el servidor, asociarás una Elastic IP y comprobarás que su endpoint público permanezca asociado tras otro ciclo de parada e inicio.

Inicia la instancia existente:

aws ec2 \
  start-instances \
  --instance-ids "$INSTANCE_ID"

Espera a running:

aws ec2 \
  wait instance-running \
  --instance-ids "$INSTANCE_ID"

Inspecciona sus direcciones:

aws ec2 \
  describe-instances \
  --instance-ids "$INSTANCE_ID" \
  --query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,PrivateIPv4:PrivateIpAddress,PublicIPv4:PublicIpAddress}'

El ID de instancia y la dirección IPv4 privada permanecen iguales. La dirección pública asignada automáticamente cambia tras detener e iniciar. Actualiza AWS View y comprueba la aplicación de nuevo; todavía debe devolver Lifecycle server.

Una Elastic IP es una dirección IPv4 pública asignada a tu cuenta hasta que la liberes. La asignación reserva la dirección; la asociación la conecta a una instancia o interfaz de red. Puede proporcionar una dirección estable tras detener e iniciar, como explica la guía oficial de Elastic IP.

Asigna una Elastic IP para uso en VPC y captura su ID de asignación:

ALLOCATION_ID=$(aws ec2 \
  allocate-address \
  --domain vpc \
  --query 'AllocationId' \
  --output text)

Asocia esa asignación a tu instancia. Guarda el ID de asociación devuelto para la limpieza:

ASSOCIATION_ID=$(aws ec2 \
  associate-address \
  --allocation-id "$ALLOCATION_ID" \
  --instance-id "$INSTANCE_ID" \
  --query 'AssociationId' \
  --output text)

Inspecciona la dirección y su instancia asociada:

aws ec2 \
  describe-addresses \
  --allocation-ids "$ALLOCATION_ID" \
  --query 'Addresses[].{PublicIPv4:PublicIp,Allocation:AllocationId,Instance:InstanceId}'

Anota la Elastic IP. Sustituye la dirección IPv4 pública asignada automáticamente a la instancia. Actualiza AWS View y comprueba la aplicación para confirmar que la nueva dirección llega al mismo servidor.

Ahora realiza otro ciclo de mantenimiento:

aws ec2 \
  stop-instances \
  --instance-ids "$INSTANCE_ID"
aws ec2 \
  wait instance-stopped \
  --instance-ids "$INSTANCE_ID"
aws ec2 \
  start-instances \
  --instance-ids "$INSTANCE_ID"
aws ec2 \
  wait instance-running \
  --instance-ids "$INSTANCE_ID"

Inspecciona la instancia una vez más:

aws ec2 \
  describe-instances \
  --instance-ids "$INSTANCE_ID" \
  --query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,PrivateIPv4:PrivateIpAddress,PublicIPv4:PublicIpAddress}'

Confirma que la dirección pública siga siendo la Elastic IP anotada. Actualiza AWS View y pulsa Check application. HTTP 200 con Lifecycle server confirma que el servidor atiende solicitudes a través de la dirección conservada después del mantenimiento.

Liberar la dirección y terminar el servidor

En este paso liberarás la dirección asignada y eliminarás permanentemente la instancia de la aplicación.

La desasociación elimina la conexión con la instancia. No libera la dirección de tu cuenta. Primero desasocia la asociación guardada:

aws ec2 \
  disassociate-address \
  --association-id "$ASSOCIATION_ID"

Después libera la asignación:

aws ec2 \
  release-address \
  --allocation-id "$ALLOCATION_ID"

Las direcciones IPv4 públicas asignadas siguen siendo recursos facturables en AWS, incluso cuando una instancia está detenida. Liberar una dirección que ya no necesitas forma parte de la limpieza de recursos.

Termina el servidor:

aws ec2 \
  terminate-instances \
  --instance-ids "$INSTANCE_ID"

Espera la terminación:

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. Enumera las asignaciones de Elastic IP restantes:

aws ec2 \
  describe-addresses \
  --query 'Addresses[].{Allocation:AllocationId,PublicIPv4:PublicIp}'

El resultado debe ser una lista vacía, []. Actualiza AWS View y confirma que el servidor ya no sea un destino en ejecución. Conserva la red y el par de claves preparados.

Resumen

Has detenido e iniciado un servidor de aplicaciones EC2, observado los cambios de dirección y asociado una Elastic IP. Has verificado el acceso a la aplicación mediante la dirección conservada después de otro ciclo de mantenimiento. Finalmente, has liberado la asignación y terminado el servidor, confirmando que ambos recursos quedaron limpios.