Rodolfo Pilas
bloger podcaster devops sysadmin profesor father
Gestión de infraestructura como código (IaC)
Taller de Clase
Definición:
Gestionar infraestructura usando archivos de configuración en lugar de procesos manuales.
Ventajas de IaC:
Estructura básica de un template:
Enfoque:
CloudFormation es declarativo: describes el estado final deseado y AWS se encarga de implementarlo.
Un mismo stack, varias versiones en Git.
Al terminar, eliminaremos los recursos.
Con comandos por recurso
Indicamos operaciones, recogemos sus IDs y organizamos la secuencia.
Con CloudFormation
Describimos recursos, propiedades y relaciones en un template.
CloudFormation organiza las operaciones necesarias.
AWS CLI también permite desplegar templates.
Template
Archivo YAML o JSON que describe la infraestructura.
Stack
Despliegue concreto del template, con sus parámetros, recursos y estado.
Un mismo template puede originar varios stacks.
En este taller actualizamos siempre el mismo.
Esquema de sus secciones:
AWSTemplateFormatVersion: '2010-09-09'
Description: Una aplicacion web
Parameters:
# Valores de entrada
Resources:
# Recursos y propiedades
Outputs:
# Valores para usar el entorno
Resources es la única sección obligatoria.
SubnetId: !Ref PublicSubnetA
SecurityGroupIds:
- !Ref InstanceSecurityGroup
KeyName: !Ref LabKeyPair
Ref obtiene el identificador definido por el tipo.
GetAtt obtiene un atributo, como la IP o la AZ.
Server1 es un ID lógico. AWS asigna el ID físico.
La red está escrita en el template inicial.
Seguiremos sus referencias antes de desplegar.
UserData:
Fn::Base64: |
#!/bin/bash
dnf install -y nginx
systemctl enable --now nginx
El template user-data también crea la página y /health.
CloudFormation declara la infraestructura.
UserData ejecuta comandos dentro de EC2.
25 minutos
Abrí la consigna en Webasignatura:
veamos cómo EC2 se vincula con la red.
Events: operaciones y causas de error.
Resources: recursos e IDs físicos.
Outputs: direcciones e información de acceso.
CREATE_COMPLETE confirma la creación del stack.
La prueba HTTP confirma que nuestra web responde.
El change set muestra el impacto previsto:
También indica posibles reemplazos.
Primero revisamos. Después ejecutamos.
EIP reserva una dirección pública.
EIPAssociation la vincula con una instancia.
AllocationId: !GetAtt Server1EIP.AllocationId
InstanceId: !Ref Server1
La dirección se conserva mientras mantenemos la asignación.
15 minutos
Abrí la consigna en Webasignatura:
compararemos la IP y el ID de Server1.
Server1: PublicSubnetA, en AZ1.
Server2: PublicSubnetB, en AZ2.
Ambos usan la misma AMI y tipo de instancia.
La subred determina la AZ de cada servidor.
Dos subredes distintas pueden pertenecer a una misma AZ.
20 minutos
Abrí la consigna en Webasignatura:
Server1 debe conservar su ID físico.
LoadBalancer
Ofrece una entrada pública mediante DNS.
Listener
Recibe HTTP en el puerto 80 y define la acción.
TargetGroup
Agrupa destinos y comprueba su salud.
Usamos la acción predeterminada del Listener.
ALB, puerto 80: ingreso desde Internet.
EC2, puerto 80: ingreso desde el SG del ALB.
EC2, puerto 22: ingreso desde nuestra IP /32.
Las instancias conservan IP pública para esta práctica.
HTTP directo a EC2 debe quedar bloqueado.
El TargetGroup consulta /health en cada instancia.
Esperamos dos destinos en estado healthy.
La URL del ALB debe devolver nuestra aplicación.
Haremos varias solicitudes para observar ambos servidores.
Usa RR pero no esperamos una alternancia exacta.
35 minutos
Abrí la consigna en Webasignatura
Evidencia: dos targets healthy, web por ALB y bloqueo directo.
git diff permite revisar el cambio en el archivo.
El commit conserva una versión y su motivo.
El historial permite comparar y recuperar versiones.
Registramos también región, AMI y parámetros de reproducción.
GitLab o CodeCommit pueden alojar ese historial.
Agregamos un tag a Server1, guardamos y desplegamos.
git revert --no-edit HEAD
Git revierte el último commit.
AWS conserva el tag hasta que apliquemos otra actualización.
Un nuevo change set permite revisar esa reversión.
15 minutos
Abrí la consigna final en Webasignatura.
Al volver: explicaremos cuándo cambió el archivo y cuándo cambió AWS.
CloudFormation procesa los recursos del stack según sus dependencias.
Retain puede conservar recursos.
DELETE_FAILED requiere revisar Events.
Cuenta, permisos, AMI y repositorio son prerrequisitos.
Buscamos eliminar todos los recursos de nuestra aplicación.
20 minutos
Entrega: YAML, historial, bitácora y evidencia del borrado.
El docente mostrará cómo recrear el entorno desde Git.
¿Cómo se relacionan EC2, red, EIP y ALB?
¿Qué impacto anticipa un change set?
¿Qué conserva Git y qué aplica CloudFormation?
¿Qué eliminamos al borrar el stack?
El código conserva la arquitectura después de eliminar sus recursos.
https://creativecommons.org/licenses/by/4.0/deed.es
By Rodolfo Pilas