<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>AWS Route 53 ARC – Terraform :: Español</title>
    <link>https://aws-route53-tf-labs.example.com/index.html</link>
    <description>AWS Route 53 ARC con Terraform Detección de Caídas y Failover Automático ¿Qué construimos? En este workshop aprenderás a construir una solución de alta disponibilidad para un sitio web estático usando servicios nativos de AWS. El objetivo no es recuperación ante desastres: es que el sistema detecte solo cuando el sitio principal cae, notifique a los equipos correspondientes vía SNS → Email / SMS, redirija el tráfico a una página de mantenimiento, y tenga un mecanismo para volver al sitio primario cuando esté recuperado basado 100% en Terraform. Cada lab despliega un módulo independiente con estado propio (terraform apply / terraform destroy por separado).</description>
    <generator>Hugo</generator>
    <language>es-ES</language>
    <atom:link href="https://aws-route53-tf-labs.example.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Lab 0: Prerrequisitos</title>
      <link>https://aws-route53-tf-labs.example.com/00_prerequisitos/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://aws-route53-tf-labs.example.com/00_prerequisitos/index.html</guid>
      <description>Lab 0: Prerrequisitos ¿Dónde correr este workshop? Este workshop es una experiencia volátil diseñada para empezar y concluir en el día. Por este motivo, el estado de Terraform se guarda localmente en archivos terraform.tfstate en el directorio de cada módulo, sin requerir buckets S3 ni almacenamiento remoto.&#xA;Aviso ¡Cuidado con los archivos terraform.tfstate y AWS CloudShell!&#xA;Si trabajás en AWS CloudShell, tené en cuenta que el almacenamiento es temporal y la sesión puede resetearse. Si la sesión expira o se reinicia, los archivos terraform.tfstate se perderán. Sin ellos, Terraform ya no sabrá qué recursos existen en AWS y no podrás hacer plan, apply ni destroy automáticamente, teniendo que borrarlos manualmente desde la consola.&#xA;Nunca borres los archivos terraform.tfstate ni las carpetas del workshop mientras tengas recursos desplegados.</description>
    </item>
    <item>
      <title>Lab 1: Sitio Web Primario</title>
      <link>https://aws-route53-tf-labs.example.com/01_sitio_primario/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://aws-route53-tf-labs.example.com/01_sitio_primario/index.html</guid>
      <description>Lab 1: Sitio Web Primario (EC2 + ALB) Estructura del módulo 01_primary/ ├── main.tf VPC (nueva u default), EC2, ALB ├── variables.tf Inputs del módulo ├── outputs.tf Exports para módulos siguientes └── userdata.sh Script de bootstrap nginx Paso 1: Variables de entorno y Verificación de VPC source ~/route53-arc-tf/global.env cd ~/route53-arc-tf/01_primary Antes de continuar, podés comprobar qué modo de VPC está activo y verificar si tu cuenta posee una VPC Default:</description>
    </item>
    <item>
      <title>Lab 2: Sitio Secundario (Fallback)</title>
      <link>https://aws-route53-tf-labs.example.com/02_sitio_secundario/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://aws-route53-tf-labs.example.com/02_sitio_secundario/index.html</guid>
      <description>Lab 2: Sitio Secundario – S3 + CloudFront Estructura del módulo 02_secondary/ ├── main.tf S3 bucket, OAC, CloudFront distribution ├── variables.tf └── outputs.tf Paso 1: Setup source ~/route53-arc-tf/global.env cd ~/route53-arc-tf/02_secondary Paso 2: Crear los archivos 1. variables.tf ¿Para qué sirve este archivo?&#xA;Define las variables de entrada para el módulo del sitio de contingencia (región de AWS y tag identificador del workshop).&#xA;cat &gt; variables.tf &lt;&lt; &#39;EOF&#39; variable &#34;aws_region&#34; { type = string default = &#34;us-east-1&#34; } variable &#34;project_tag&#34; { type = string default = &#34;route53-arc&#34; } EOF 2. main.tf ¿Para qué sirve este archivo?&#xA;Declara la arquitectura del sitio secundario de respuesta ante desastres:</description>
    </item>
    <item>
      <title>Lab 3: Route 53 Health Checks &#43; ARC</title>
      <link>https://aws-route53-tf-labs.example.com/03_route53_arc/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://aws-route53-tf-labs.example.com/03_route53_arc/index.html</guid>
      <description>Lab 3: Route 53 Health Checks + ARC Routing Controls Estructura del módulo 03_arc/ ├── main.tf ARC Cluster, Routing Controls, Health Checks, DNS ├── variables.tf └── outputs.tf Los outputs de los labs anteriores se leen via terraform_remote_state.&#xA;Paso 1: Setup source ~/route53-arc-tf/global.env cd ~/route53-arc-tf/03_arc Dominio: opcional # Sin dominio (modo demo) export USE_DOMAIN=&#34;false&#34; # Con dominio real en Route 53 # export USE_DOMAIN=&#34;true&#34; # export DOMAIN_NAME=&#34;tudominio.com&#34; # export APP_SUBDOMAIN=&#34;app&#34; # export HOSTED_ZONE_ID=&#34;Z1234ABCDEF&#34; Paso 2: Crear los archivos 1. variables.tf ¿Para qué sirve este archivo?&#xA;Define los parámetros de entrada del orquestador de ARC (región, modo demo o dominio real, nombre de dominio, subdominio e ID de la Hosted Zone en Route 53).</description>
    </item>
    <item>
      <title>Lab 4: SNS &#43; Lambda Failover</title>
      <link>https://aws-route53-tf-labs.example.com/04_notificaciones_sns/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://aws-route53-tf-labs.example.com/04_notificaciones_sns/index.html</guid>
      <description>Lab 4: SNS + Lambda Failover Estructura del módulo 04_automation/ ├── main.tf ├── variables.tf ├── outputs.tf └── lambda/ └── handler.py Paso 1: Setup source ~/route53-arc-tf/global.env cd ~/route53-arc-tf/04_automation mkdir -p lambda # EDITÁ con tu email real export NOTIFICATION_EMAIL=&#34;tu-email@ejemplo.com&#34; # export NOTIFICATION_PHONE=&#34;+54911XXXXXXXX&#34; # opcional Paso 2: Código Lambda lambda/handler.py ¿Para qué sirve este archivo?&#xA;Es el código de la función Python que ejecutará la conmutación automática de tráfico (failover). Cuando se activa por una notificación de alerta SNS:</description>
    </item>
    <item>
      <title>Lab 5: Simulación de Incidente</title>
      <link>https://aws-route53-tf-labs.example.com/05_automatizacion_lambda/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://aws-route53-tf-labs.example.com/05_automatizacion_lambda/index.html</guid>
      <description>Lab 5: Simulación de Incidente No hay código Terraform nuevo en este lab — simulamos la caída utilizando la AWS CLI, obteniendo los parámetros necesarios a partir de los outputs exportados por los módulos de Terraform.&#xA;Paso 1: Cargar variables desde el estado Terraform source ~/route53-arc-tf/global.env # Outputs del Lab 3 (ARC) cd ~/route53-arc-tf/03_arc export PRIMARY_RC_ARN=$(terraform output -raw primary_rc_arn) export SECONDARY_RC_ARN=$(terraform output -raw secondary_rc_arn) export CLUSTER_ENDPOINT=$(terraform output -json arc_cluster_endpoints \ | python3 -c &#34;import json,sys; print(json.load(sys.stdin)[0][&#39;Endpoint&#39;])&#34;) # Outputs del Lab 1 (EC2) cd ~/route53-arc-tf/01_primary export EC2_ID=$(terraform output -raw ec2_instance_id) export PRIMARY_ALB_DNS=$(terraform output -raw alb_dns_name) # Outputs del Lab 4 (Automation) cd ~/route53-arc-tf/04_automation export ALARM_NAME=$(terraform output -raw alarm_name) export LAMBDA_NAME=$(terraform output -raw lambda_name) echo &#34;=== Estado inicial ===&#34; echo &#34;ALB DNS: $PRIMARY_ALB_DNS&#34; echo &#34;EC2 ID: $EC2_ID&#34; echo &#34;Alarm: $ALARM_NAME&#34; # Verificar Routing Controls echo &#34;&#34; aws route53-recovery-cluster get-routing-control-state \ --routing-control-arn $PRIMARY_RC_ARN \ --endpoint-url $CLUSTER_ENDPOINT --region $AWS_REGION \ --query &#39;RoutingControlState&#39; --output text | xargs -I{} echo &#34;Primario: {}&#34; aws route53-recovery-cluster get-routing-control-state \ --routing-control-arn $SECONDARY_RC_ARN \ --endpoint-url $CLUSTER_ENDPOINT --region $AWS_REGION \ --query &#39;RoutingControlState&#39; --output text | xargs -I{} echo &#34;Secundario: {}&#34; Simulación A: Forzar alarma CloudWatch (inmediato) echo &#34;=== SIMULACIÓN A: Forzando alarma CloudWatch ===&#34; echo &#34;Hora: $(date)&#34; aws cloudwatch set-alarm-state \ --alarm-name $ALARM_NAME \ --state-value ALARM \ --state-reason &#34;Simulación de incidente – AWS Workshop Terraform Workshop&#34; \ --region $AWS_REGION echo &#34;⏳ Esperando que Lambda reaccione...&#34; sleep 15 # Verificar resultado echo &#34;&#34; echo &#34;--- Routing Controls post-failover ---&#34; aws route53-recovery-cluster get-routing-control-state \ --routing-control-arn $PRIMARY_RC_ARN \ --endpoint-url $CLUSTER_ENDPOINT --region $AWS_REGION \ --query &#39;RoutingControlState&#39; --output text | xargs -I{} echo &#34;Primario: {} (esperado: Off)&#34; aws route53-recovery-cluster get-routing-control-state \ --routing-control-arn $SECONDARY_RC_ARN \ --endpoint-url $CLUSTER_ENDPOINT --region $AWS_REGION \ --query &#39;RoutingControlState&#39; --output text | xargs -I{} echo &#34;Secundario: {} (esperado: On)&#34; Ver logs de Lambda:</description>
    </item>
    <item>
      <title>Lab 6: Failback</title>
      <link>https://aws-route53-tf-labs.example.com/06_simulacion_incidente/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://aws-route53-tf-labs.example.com/06_simulacion_incidente/index.html</guid>
      <description>Lab 6: Failback – Volver al Sitio Primario El failback siempre es manual y deliberado: primero verificás que el primario esté sano, después cambiás los Routing Controls.&#xA;Paso 1: Cargar variables source ~/route53-arc-tf/global.env cd ~/route53-arc-tf/03_arc export PRIMARY_RC_ARN=$(terraform output -raw primary_rc_arn) export SECONDARY_RC_ARN=$(terraform output -raw secondary_rc_arn) export CLUSTER_ENDPOINT=$(terraform output -json arc_cluster_endpoints \ | python3 -c &#34;import json,sys; print(json.load(sys.stdin)[0][&#39;Endpoint&#39;])&#34;) cd ~/route53-arc-tf/01_primary export EC2_ID=$(terraform output -raw ec2_instance_id) export PRIMARY_ALB_DNS=$(terraform output -raw alb_dns_name) cd ~/route53-arc-tf/04_automation export ALARM_NAME=$(terraform output -raw alarm_name) echo &#34;ALB DNS: $PRIMARY_ALB_DNS&#34; Paso 2: Reparar el sitio primario (si usaste Simulación B) COMMAND_ID=$(aws ssm send-command \ --instance-ids $EC2_ID \ --document-name AWS-RunShellScript \ --parameters &#39;commands=[&#34;systemctl start nginx &amp;&amp; systemctl status nginx --no-pager | head -3&#34;]&#39; \ --region $AWS_REGION \ --query &#39;Command.CommandId&#39; --output text) sleep 10 aws ssm get-command-invocation \ --command-id $COMMAND_ID --instance-id $EC2_ID \ --region $AWS_REGION \ --query &#39;{Status: Status, Output: StandardOutputContent}&#39; --output json Paso 3: Verificar que el primario está sano Aviso No hagas el failback hasta confirmar que el ALB responde HTTP 200. Si volvés el tráfico antes, los usuarios seguirán viendo errores.</description>
    </item>
    <item>
      <title>Lab 7: Destroy</title>
      <link>https://aws-route53-tf-labs.example.com/07_limpieza/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://aws-route53-tf-labs.example.com/07_limpieza/index.html</guid>
      <description>Lab 7: Destroy – Eliminar todos los recursos Con Terraform la limpieza es directa: terraform destroy en cada módulo en orden inverso.&#xA;Aviso Ejecutá este lab al finalizar. Los recursos generan costos mientras existen.&#xA;Orden de destroy Los módulos tienen dependencias via terraform_remote_state local. El orden de eliminación es inverso al de creación:&#xA;4 → 3 → 2 → 1 Paso 1: Variables source ~/route53-arc-tf/global.env Paso 2: Destroy Lab 4 – SNS + Lambda cd ~/route53-arc-tf/04_automation terraform destroy \ -var=&#34;notification_email=dummy@example.com&#34; \ -auto-approve echo &#34;✅ Lab 4 destruido&#34; Paso 3: Destroy Lab 3 – ARC + Route 53 cd ~/route53-arc-tf/03_arc terraform destroy -auto-approve echo &#34;✅ Lab 3 destruido&#34; Información El destroy del ARC Cluster puede tardar 3-5 minutos — AWS lo desaprovisiona de múltiples regiones.</description>
    </item>
  </channel>
</rss>