Skip to content

Instantly share code, notes, and snippets.

@gusdelact
Last active October 29, 2025 01:43
Show Gist options
  • Select an option

  • Save gusdelact/b32c878dc8f1acabef662e669a9e4a00 to your computer and use it in GitHub Desktop.

Select an option

Save gusdelact/b32c878dc8f1acabef662e669a9e4a00 to your computer and use it in GitHub Desktop.

🧩 Ejercicio: Aprovisionamiento de Arquitectura Modelo 1 Extendida

🎯 Objetivo

Desplegar una arquitectura en AWS con los siguientes componentes:

  • Frontend: Nginx sirviendo contenido estático (guess.html)
  • Backend: Aplicación Flask
  • Base de Datos: PostgreSQL en una instancia EC2
  • Infraestructura: Launch Templates, Auto Scaling Groups, Network Load Balancers (NLBs), Roles IAM y AWS Systems Manager Parameter Store

🪜 Instrucciones

1. Crear el parámetro en AWS Systems Manager

  1. En la consola de AWS, abre AWS Systems Manager → Parameter Store.

  2. Haz clic en Create parameter.

  3. Llena los siguientes campos:

    Campo Valor sugerido
    Name /app/modelo1/backendurlABC
    Type String
    Value http://127.0.0.
    Description URL del backend Flask
  4. Guarda el parámetro.
    Este parámetro será leído por las instancias del frontend cuando arranquen.


2. Modificar la plantilla CloudFormation

  1. Copia la plantilla YAML proporcionada por el profesor.
  2. Reemplaza todas las ocurrencias del sufijo ABC por tu clave ULSA.
    • Ejemplo:
      • arquitectura1frontendABC → arquitectura1frontendULSA001
      • arquitectura1backnlbABC → arquitectura1backnlbULSA001
  3. Guarda el archivo modificado con un nombre como:

3. Crear el Stack

  1. Abre AWS CloudFormation → Create Stack → With new resources (standard).
  2. Selecciona Upload a template file y carga tu archivo .yaml.
  3. Completa los parámetros requeridos:
Parámetro Ejemplo / Descripción
VpcId ID de la VPC existente
SubnetIds Lista de al menos 2 subnets (en distintas AZs)
FrontendAmiId AMI con Nginx preinstalado
BackendAmiId AMI con Flask preinstalado
DatabaseAmiId AMI con PostgreSQL
KeyName Par de llaves SSH existente
BackendParameterStore Nombre del parámetro creado (/app/modelo1/backendurlABC)
  1. Crea el stack y espera a que el estado cambie a CREATE_COMPLETE.

4. Validar la creación

  1. En CloudFormation → Stack Outputs, toma nota de:
  • FrontendNlbDnsName
  • BackendNlbDnsName
  1. Verifica en la consola:
  • EC2 → Load Balancers: los NLBs deben estar activos.
  • EC2 → Auto Scaling Groups: debe existir una instancia activa de frontend y backend.
  • EC2 → Instances: la instancia PostgreSQL debe estar en ejecución.

5. Actualizar el parámetro del backend

  1. Copia el valor de BackendNlbDnsName desde los Outputs del stack.

  2. Abre AWS Systems Manager → Parameter Store.

  3. Edita el parámetro /app/modelo1/backendurlABC.

  4. Sustituye su valor con el DNS del backend, por ejemplo:

  5. Guarda los cambios.


6. Regenerar las instancias del frontend

Después de actualizar el parámetro, las instancias del frontend deben reiniciarse para leer el nuevo valor.

Existen dos formas de hacerlo:

🔹 Opción A — Terminar manualmente la instancia EC2

  1. En la consola de AWS, entra a EC2 → Instances.
  2. Identifica la instancia asociada al Auto Scaling Group del frontend (por ejemplo arquitectura1frontasgULSA001).
  3. Selecciónala y elige Instance state → Terminate instance.
  4. El Auto Scaling Group creará automáticamente una nueva instancia del frontend, que leerá el valor actualizado del Parameter Store.

🔹 Opción B — Ajustar el Auto Scaling Group

  1. Entra a EC2 → Auto Scaling Groups.
  2. Selecciona el grupo arquitectura1frontasgULSA001.
  3. Haz clic en Edit.
  4. Cambia los valores:
  • Desired capacity = 0
  • Minimum capacity = 0
  1. Guarda los cambios y espera a que las instancias se terminen.
  2. Luego vuelve a editar y cambia:
  • Desired capacity = 1
  • Minimum capacity = 1
  1. Guarda nuevamente.
  • Esto lanzará una nueva instancia del frontend con la configuración actualizada.

7. Validar la actualización

  1. Espera a que la nueva instancia del frontend esté en estado Healthy dentro del Target Group.
  2. Abre el DNS del Frontend NLB (FrontendNlbDnsName) en tu navegador.
  3. Verifica que:
  • El sitio cargue correctamente.
  • El frontend se comunique con el backend Flask.

8. Limpieza (opcional)

Cuando termines el ejercicio:

  • Elimina el stack desde CloudFormation → Delete Stack.
  • Borra el parámetro /backend/url en AWS Systems Manager → Parameter Store.

🧠 Resumen visual del flujo

flowchart TD
A[Crear parámetro /backend/url en SSM] --> B[Modificar plantilla con clave ULSA]
B --> C[Crear Stack en CloudFormation]
C --> D[Obtener DNS del Backend NLB]
D --> E[Actualizar valor del parámetro en SSM]
E --> F[Terminar instancia frontend o escalar ASG a 0]
F --> G[ASG lanza nueva instancia con parámetro actualizado]
G --> H[Frontend se comunica correctamente con el Backend]

5. Guarda los cambios.

---

### 6. Regenerar las instancias del frontend

Después de actualizar el parámetro, las instancias del frontend deben reiniciarse para leer el nuevo valor.

Existen **dos formas** de hacerlo:

#### 🔹 Opción A — Terminar manualmente la instancia EC2
1. En la consola de AWS, entra a **EC2 → Instances**.  
2. Identifica la instancia asociada al Auto Scaling Group del frontend (por ejemplo `arquitectura1frontasgULSA001`).  
3. Selecciónala y elige **Instance state → Terminate instance**.  
4. El Auto Scaling Group creará automáticamente una nueva instancia del frontend, que leerá el valor actualizado del Parameter Store.

#### 🔹 Opción B — Ajustar el Auto Scaling Group
1. Entra a **EC2 → Auto Scaling Groups**.  
2. Selecciona el grupo `arquitectura1frontasgULSA001`.  
3. Haz clic en **Edit**.  
4. Cambia los valores:
- **Desired capacity** = `0`  
- **Minimum capacity** = `0`  
5. Guarda los cambios y espera a que las instancias se terminen.  
6. Luego vuelve a editar y cambia:
- **Desired capacity** = `1`  
- **Minimum capacity** = `1`  
7. Guarda nuevamente.  
- Esto lanzará una nueva instancia del frontend con la configuración actualizada.

---

### 7. Validar la actualización

1. Espera a que la nueva instancia del frontend esté en estado **Healthy** dentro del Target Group.  
2. Abre el **DNS del Frontend NLB** (`FrontendNlbDnsName`) en tu navegador.  
3. Verifica que:
- El sitio cargue correctamente.  
- El frontend se comunique con el backend Flask.

---

### 8. Limpieza (opcional)

Cuando termines el ejercicio:

- Elimina el stack desde **CloudFormation → Delete Stack**.  
- Borra el parámetro `/backend/url` en **AWS Systems Manager → Parameter Store**.

---

## 🧠 Resumen visual del flujo

```mermaid
flowchart TD
A[Crear parámetro /backend/url en SSM] --> B[Modificar plantilla con clave ULSA]
B --> C[Crear Stack en CloudFormation]
C --> D[Obtener DNS del Backend NLB]
D --> E[Actualizar valor del parámetro en SSM]
E --> F[Terminar instancia frontend o escalar ASG a 0]
F --> G[ASG lanza nueva instancia con parámetro actualizado]
G --> H[Frontend se comunica correctamente con el Backend]
Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment