Lanzar un servidor de aplicaciones EC2

AWSBeginner
Practicar Ahora

Introducción

Tu equipo necesita un servidor para una pequeña aplicación de informes. En este laboratorio lanzarás una instancia Amazon EC2, te conectarás por SSH, cambiarás el saludo de la aplicación y probarás su respuesta en AWS View. Después terminarás la instancia y confirmarás su estado final.

Debes conocer los comandos básicos del terminal y la función de una VPC, una subred y un grupo de seguridad. El entorno proporciona una red, una imagen Ubuntu, un par de claves SSH y el software de la aplicación. Crearás y configurarás la instancia de la aplicación.

Relación con la certificación

Este laboratorio practica operaciones programáticas de AWS y la elección de EC2 como servicio de computación, relacionadas con las tareas 3.1 y 3.3 de los objetivos del dominio 3 de AWS Certified Cloud Practitioner CLF-C02. También distinguirás una imagen, un tipo de instancia y una instancia en ejecución.

Lanzar la instancia de la aplicación

En este paso inspeccionarás una imagen preparada y lanzarás una instancia EC2 en la red proporcionada.

Una instancia EC2 es un servidor virtual. Una Amazon Machine Image (AMI) proporciona su sistema operativo y software inicial. Un tipo de instancia especifica una combinación de capacidad de cómputo y memoria. Elegirás t3.micro, un tipo pequeño de uso general, para esta aplicación introductoria.

Empieza en el directorio del proyecto:

cd /home/labex/project

El archivo launch.env contiene los identificadores de la imagen, la subred y el grupo de seguridad preparados. Inspecciónalo para ver los recursos que usarás:

cat launch.env

Los valores son ID de recursos y serán distintos entre entornos. Cárgalos en tu shell actual con source, que lee las asignaciones de variables del archivo:

source launch.env

Inspecciona la AMI. La opción --image-ids selecciona la imagen y --query limita los campos mostrados:

aws ec2 \
  describe-images \
  --image-ids "$AMI_ID" \
  --query 'Images[].{Image:ImageId,Name:Name,Architecture:Architecture}'

Busca el nombre de imagen report-server-ubuntu-2204 y la arquitectura x86_64. Esta imagen contiene Ubuntu y la aplicación de informes, para que puedas concentrarte en lanzar y operar el servidor.

La subred determina la ubicación de la instancia en la red. El grupo de seguridad proporcionado permite SSH en el puerto 22 y solicitudes a la aplicación en el puerto 8081 desde la red de acceso del laboratorio. El par de claves report-key proporciona la clave pública instalada en la instancia; su clave privada está en el directorio del proyecto para la conexión SSH.

Lanza una instancia con los recursos preparados. --count 1 crea un servidor y la etiqueta le da el nombre reconocible report-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 \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=report-server}]'

La respuesta contiene el ID de la nueva instancia y su estado inicial. Guarda el ID en una variable de shell para los siguientes comandos. La sintaxis $(...) ejecuta el comando entre paréntesis y guarda su salida; --output text devuelve el ID en texto plano:

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

Inspecciona el estado y las direcciones de la instancia:

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

Confirma el estado running y la presencia de direcciones IPv4 privada y pública. Si todavía aparece pending, espera un momento y repite el comando de inspección. La dirección privada identifica el servidor dentro de su VPC; la pública es el destino que usarás para conectarte a través de la red de acceso del laboratorio.

Conectarse y configurar la aplicación

En este paso te conectarás a la instancia por SSH, cambiarás el saludo de la aplicación de informes y probarás la respuesta en AWS View.

Obtén la dirección IPv4 pública de la instancia y guárdala en otra variable de shell:

PUBLIC_IP=$(aws ec2 \
  describe-instances \
  --instance-ids "$INSTANCE_ID" \
  --query 'Reservations[0].Instances[0].PublicIpAddress' \
  --output text)

SSH crea una conexión de terminal cifrada al servidor. Las imágenes Ubuntu usan el usuario ubuntu. El archivo ssh_config proporcionado selecciona tu clave privada y la ruta de conexión del laboratorio; -F indica a SSH que lea ese archivo de configuración:

ssh -F ssh_config ubuntu@"$PUBLIC_IP"

Tu terminal está ahora dentro de la instancia de la aplicación. Confirma el usuario conectado:

whoami

La salida debe ser ubuntu. Esto distingue la instancia de la aplicación del terminal de LabEx, cuyo usuario es labex.

La aplicación proporcionada lee su saludo desde /etc/report-app/config.json. Actualizar este archivo del sistema requiere privilegios de administrador. sudo tee escribe el siguiente texto en el archivo y el here-document entre los marcadores JSON proporciona ese texto:

sudo tee /etc/report-app/config.json <<'JSON'
{
  "message": "Hello from EC2"
}
JSON

La aplicación vuelve a leer esta configuración en cada solicitud. Usa curl para consultar su endpoint de salud a través de la dirección de loopback de la instancia:

curl -sS http://127.0.0.1:8081/health

La respuesta JSON debe identificar el servicio Report server e incluir "message": "Hello from EC2". Esto demuestra que la aplicación responde dentro de la instancia con tu configuración.

Sal de la sesión SSH para volver al terminal de LabEx:

exit

Abre AWS View y pulsa Refresh resources. Busca report-server en la tabla de instancias. Confirma el estado running y compara su dirección IPv4 pública con la devuelta por la CLI.

En Application requests, selecciona la instancia en ejecución y pulsa Check application. Confirma una respuesta HTTP 200 que contenga Hello from EC2. Esta solicitud usa la dirección pública actual de la instancia y prueba la aplicación a través de la red, además de la comprobación dentro del servidor.

AWS View muestra report-server en ejecución y la respuesta de la aplicación configurada

Ejemplo de comprobación: la aplicación devuelve HTTP 200 con Hello from EC2. Tus ID de recursos y direcciones serán distintos.

Terminar tu servidor

En este paso terminarás la instancia de la aplicación y confirmarás que ya no esté en ejecución.

La terminación elimina permanentemente la instancia. Usa el ID guardado para seleccionar solo tu servidor de aplicación:

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

La respuesta muestra los estados anterior y actual. AWS CLI también proporciona un waiter, que consulta un recurso hasta que alcance el estado indicado. Espera a que termine la terminación:

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

El waiter termina sin salida cuando se cumple la condición. Inspecciona el estado final:

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

Confirma terminated. El registro de una instancia puede seguir visible después de terminarla; esto no significa que el servidor siga en ejecución.

Pulsa Refresh resources en AWS View. La instancia debe mostrar terminated y ya no estar disponible como destino de aplicación en ejecución. Conserva la red y el par de claves preparados.

Resumen

Has lanzado una instancia EC2 con una AMI, un tipo de instancia, recursos de red y un par de claves SSH. Te has conectado al servidor, configurado su aplicación de informes y verificado la respuesta en AWS View. Finalmente, has terminado la instancia y confirmado su estado final.