Saltar al contenido
aprendeaws.dev

Módulo 14 · Multinube: AWS y Google Cloud/Lección 94

Diseño multinube AWS + Google Cloud: patrones, portabilidad y runbook

Nube primaria y secundaria, un patrón por componente, matriz de portabilidad, la secuencia de failover entre proveedores, el failback y los errores más comunes.

⏱ 18 min

Al terminar podrás

  • →Elegir nube primaria y secundaria y un patrón por componente
  • →Construir una matriz de portabilidad con costo de salida
  • →Escribir la secuencia de failover y failback entre proveedores
  • →Explicar qué dependencias aceptar y cuáles evitar

Servicios de Google Cloud

  • Google Kubernetes Engine
  • Cloud Run
  • Cloud SQL
  • Cloud Storage
  • Cloud Load Balancing
  • Cloud DNS
  • Cloud Monitoring

Esta lección junta todo en un diseño: una plataforma SaaS con web y APIs, microservicios en contenedores, procesos transaccionales y asíncronos, una base relacional y almacenamiento de documentos, operando 7x24, con recuperación ante la falla de un proveedor completo. No hay una sola respuesta correcta; hay decisiones explícitas, con su costo y su prueba.

Nube primaria y secundaria

Antes de dibujar, decide cuál es la primaria. Los criterios, en orden de peso habitual:

  • Habilidades del equipo: la nube que tu equipo opera mejor a las 3 de la mañana.
  • Servicios administrados que de verdad usas: si dependes de un servicio que solo existe en un proveedor, ese proveedor es primario para esa capacidad.
  • Gravedad de los datos: donde viven hoy los terabytes, y donde están los sistemas que los consumen.
  • Contratos: compromisos de gasto, descuentos y requisitos regulatorios de salida.
  • Regiones cercanas a tus usuarios y a sus leyes de residencia de datos.

En América Latina, las regiones de cada proveedor son:

CriterioAWSGoogle Cloud
Brasilsa-east-1, São Paulo, 3 zonas de disponibilidadsouthamerica-east1, Osasco (São Paulo), 3 zonas
Méxicomx-central-1, Querétaro, 3 zonas (región opt-in)northamerica-south1, Querétaro, 3 zonas
ChileSin región; hay una Local Zone en Santiagosouthamerica-west1, Santiago, 3 zonas

Un dilema de diseño: emparejar regiones en la misma área metropolitana (São Paulo con São Paulo, Querétaro con Querétaro) da poca latencia y un retraso de replicación bajo, pero comparte riesgos físicos y regulatorios de la ciudad. Emparejar ciudades distintas reduce ese riesgo compartido a cambio de más retraso. El proveedor protege de fallas del proveedor; la distancia protege de fallas de la geografía. Decide cuál de los dos te preocupa más.

Tres dominios de falla, un patrón por nivel

Dominio de fallaPatrón y dónde se resuelve
Componente: un pod, una instancia, un procesoRéplicas, chequeos de salud, reintentos con backoff, circuit breakersDentro de la misma zona y la misma nube. Automático, en segundos
Zona o regiónMulti-AZ, clústeres regionales de EKS y GKE, réplicas entre regiones del mismo proveedorDentro del proveedor. Zona: automático. Región: decisión con runbook
ProveedorDatos replicados en la otra nube, cómputo en espera, tráfico redirigible desde afueraEntre nubes. Siempre con decisión humana y runbook ensayado

Cada nivel resuelve sus propias fallas. Si un pod que se cae termina en un failover entre proveedores, el diseño está mal escalonado. Las bases están en multirregión y multinube.

Un patrón por componente

Ejemplo con AWS como primaria. Los estados de la secundaria son: activa (atiende tráfico), tibia (desplegada a escala mínima), piloto encendido (datos al día, cómputo definido pero apagado) y solo respaldo.

CriterioPrimaria (AWS)Secundaria (Google Cloud)EstadoQué se replica
Entrada y DNSDNS autoritativo fuera de las dos nubes, o Route 53 con zona secundaria en Cloud DNSEl mismo dominio, con registros que apuntan a GoogleActivaRegistros y chequeos de salud de los dos lados
CDN y WAFCloudFront y AWS WAFCloud CDN y Cloud ArmorTibiaReglas escritas como código y aplicadas a las dos
APIsALB o API GatewayCloud Load BalancingTibiaConfiguración, certificados y rutas
MicroserviciosEKSGKE regionalTibia, a escala mínimaImágenes en Artifact Registry, manifiestos por GitOps
Procesos asíncronosWorkers en EKS o ECSWorkers en GKE o Cloud RunPiloto encendidoNada en vivo: se reconstruyen desde la outbox
Base relacionalAurora PostgreSQLCloud SQL o AlloyDBTibiaReplicación lógica continua; latido para el RPO
Base documentalDynamoDBFirestorePiloto encendido o solo respaldoExportaciones periódicas o un flujo de cambios con escrituras idempotentes
Documentos y objetosS3Cloud StorageActiva como copiaTransferencias por eventos; bloqueo de retención en los dos lados
CachéElastiCacheMemorystoreVacíaNada: se calienta desde la base después del cambio
MensajeríaSQS, SNS, EventBridgePub/SubPiloto encendidoNada en vivo: outbox replicada y consumidores idempotentes
Secretos e identidadSecrets Manager e IAMSecret Manager e IAM de GoogleActivaSecretos creados y rotados en cada nube; inicio de sesión con un IdP externo
ObservabilidadCollectors OTel en AWSCollectors OTel en GoogleActivaTodo al backend neutral, fuera de las dos nubes

Matriz de portabilidad con costo de salida

Cada componente cae en una de tres canastas. Portable: se lleva con cambios de configuración. Con equivalente: hay un servicio parecido del otro lado, pero hay que traducir y probar. Dependencia elegida: aceptas el amarre porque te da algo que vale más que la salida. La versión general está en portabilidad y lock-in; aquí va el par concreto:

CriterioAWS → Google CloudCanastaImpacto de salida
Plataforma de ejecuciónEKS → GKECon equivalenteMedio: los manifiestos viajan; identidad, ingress y almacenamiento se reescriben
Registro de imágenesECR → Artifact RegistryPortableBajo: imágenes OCI, cambia la URL y la autenticación
Base relacionalAurora PostgreSQL → Cloud SQL o AlloyDBPortable si usas PostgreSQL estándarMedio: los datos se replican; las funciones propias de Aurora no existen allá
Base documentalDynamoDB → FirestoreDependencia elegidaAlto: otro modelo de datos, otra API y otras garantías de consistencia
Almacenamiento de objetosS3 → Cloud StorageCon equivalenteBajo en datos, medio en políticas, eventos y ciclo de vida
MensajeríaSQS, SNS, EventBridge → Pub/SubCon equivalenteMedio: semánticas distintas de orden, reintento y filtrado
CachéElastiCache → MemorystorePortableBajo: mismo protocolo; la caché no se migra, se calienta
RedVPC regional, Transit Gateway → VPC global, Cloud RouterCon equivalenteMedio: los conceptos existen, la configuración se rehace
Balanceo de cargaALB y NLB → Cloud Load BalancingCon equivalenteMedio: reglas, certificados y anotaciones propias
ObservabilidadCloudWatch y X-Ray → Cloud Monitoring y Cloud TracePortable si instrumentas con OpenTelemetryBajo en código, medio en paneles y alertas

Kubernetes solo no hace portable la solución

Un Deployment corre igual en EKS y en GKE. Lo que lo rodea, no:

  • Identidad del pod: EKS Pod Identity o IRSA hacia roles de IAM; en GKE, Workload Identity Federation for GKE hacia permisos de Google.
  • Entrada: anotaciones del AWS Load Balancer Controller contra clases de Gateway o Ingress de GKE.
  • Almacenamiento: StorageClass con el driver de EBS contra el de Persistent Disk.
  • Red: la VPC CNI da a cada pod una IP de la VPC; GKE usa rangos secundarios de la subred.
  • Lo de afuera: secretos, DNS, certificados y, sobre todo, los datos.

Kubernetes te da un lenguaje común para describir cargas. Mantén una base común de manifiestos y una capa delgada por proveedor (overlays de Kustomize o valores de Helm), y despliega a las dos con el mismo pipeline. El escalado de cada lado está en contenedores a escala y en cómputo en Google Cloud.

La secuencia de failover entre proveedores

Cada paso deja evidencia. Sin evidencia no hay reconciliación ni postmortem honesto.

  1. 1

    Detectar · automático

    Chequeos sintéticos externos y SLO del backend neutral fallan desde varias ubicaciones. Evidencia: alertas con hora y recorridos afectados.
  2. 2

    Evaluar · humano con datos

    ¿Es todo el proveedor, una región o un servicio? ¿Cuánto lleva? Revisas AWS Health y el panel neutral. Evidencia: alcance escrito y retraso de replicación del momento.
  3. 3

    Decidir y declarar · humano

    La persona con autoridad aplica el criterio escrito, por ejemplo: «más de 30 minutos sin el recorrido de pago y sin fecha de recuperación». Evidencia: declaración con hora, quién y por qué.
  4. 4

    Proteger los datos y aislar · automático con aprobación

    Congelar escrituras, revocar credenciales de la base en AWS, escalar a cero los escritores, sacar los registros del primario. Evidencia: cada acción con hora y resultado.
  5. 5

    Promover · automático

    Registrar el último punto aplicado, cortar la suscripción, ajustar secuencias, abrir escrituras en Cloud SQL. Evidencia: LSN, último latido y RPO real.
  6. 6

    Redirigir el tráfico · automático

    Cambiar los registros en el DNS externo, escalar GKE y los workers, reproducir la outbox. Evidencia: tráfico creciente en Google y decreciente en AWS.
  7. 7

    Validar · automático y humano

    Transacciones sintéticas de punta a punta, conteos por tabla, colas que se vacían, pagos que pasan. Evidencia: resultados de las pruebas.
  8. 8

    Operar en la secundaria · humano

    Guardia en modo Google, cuotas vigiladas, comunicación a clientes, cambios congelados. Evidencia: SLO de la secundaria.
  9. 9

    Failback · proyecto planeado

    Base nueva en AWS suscrita a Cloud SQL, reconciliación, switchover en ventana. Evidencia: conteos y sumas de control iguales antes de cambiar.

Los criterios de declaración, los roles y los simulacros están en runbooks y simulacros.

Niveles de RTO y RPO ante la pérdida de un proveedor

Estos valores son un ejemplo. Los objetivos ante la pérdida de un proveedor suelen ser más holgados que ante la pérdida de una región, porque el evento es más raro y el cambio, más caro:

1 min

RPO del nivel 0: pagos y pedidos

1 h

RTO del nivel 0, con secundaria tibia

4 h

RTO del nivel 1: portal y APIs de clientes

24 h

RPO y RTO del nivel 3: reportes

Valores de ejemplo, no recomendaciones. Los tuyos salen del costo de cada hora caída o perdida.

CriterioNivel 0Nivel 1Nivel 2Nivel 3
EjemploPagos y pedidosPortal y APIs de clientesProcesos internosReportes y analítica
RPO entre proveedores1 minuto15 minutos4 horas24 horas
RTO entre proveedores1 hora4 horas24 horas3 días
Estado en la secundariaTibiaPiloto encendidoSolo respaldo con infraestructura como códigoSolo respaldo

Las piezas de este diseño están en conectar AWS y Google Cloud, replicar datos entre nubes y operación y resiliencia en Google Cloud. El cambio entre regiones dentro de AWS, en failover y failback.

Quiz

Pon a prueba lo que aprendiste

0 de 5 correctas · 5 sin responder

  1. 1.El equipo opera AWS con soltura, la base principal y la mayoría de los datos están en AWS y hay compromisos de gasto vigentes. Se pide sobrevivir a la pérdida de un proveedor. ¿Qué propones?

  2. 2.Un pod de pagos se reinicia por falta de memoria. ¿Qué nivel de defensa debe resolverlo?

  3. 3.Todo el cómputo está en EKS y GKE con los mismos manifiestos. Alguien afirma que la solución ya es portable. ¿Qué le respondes?

  4. 4.En el failover, el tráfico ya va a Google pero la base de AWS no fue aislada. Una hora después, AWS se recupera y los workers vuelven a escribir allí. ¿Qué paso se saltó?

  5. 5.En el primer simulacro entre nubes, GKE no escala porque la cuota de CPU de la región está en su valor por defecto. ¿Qué error común es?