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:
| Criterio | AWS | Google Cloud |
|---|---|---|
| Brasil | sa-east-1, São Paulo, 3 zonas de disponibilidad | southamerica-east1, Osasco (São Paulo), 3 zonas |
| México | mx-central-1, Querétaro, 3 zonas (región opt-in) | northamerica-south1, Querétaro, 3 zonas |
| Chile | Sin región; hay una Local Zone en Santiago | southamerica-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
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.
| Criterio | Primaria (AWS) | Secundaria (Google Cloud) | Estado | Qué se replica |
|---|---|---|---|---|
| Entrada y DNS | DNS autoritativo fuera de las dos nubes, o Route 53 con zona secundaria en Cloud DNS | El mismo dominio, con registros que apuntan a Google | Activa | Registros y chequeos de salud de los dos lados |
| CDN y WAF | CloudFront y AWS WAF | Cloud CDN y Cloud Armor | Tibia | Reglas escritas como código y aplicadas a las dos |
| APIs | ALB o API Gateway | Cloud Load Balancing | Tibia | Configuración, certificados y rutas |
| Microservicios | EKS | GKE regional | Tibia, a escala mínima | Imágenes en Artifact Registry, manifiestos por GitOps |
| Procesos asíncronos | Workers en EKS o ECS | Workers en GKE o Cloud Run | Piloto encendido | Nada en vivo: se reconstruyen desde la outbox |
| Base relacional | Aurora PostgreSQL | Cloud SQL o AlloyDB | Tibia | Replicación lógica continua; latido para el RPO |
| Base documental | DynamoDB | Firestore | Piloto encendido o solo respaldo | Exportaciones periódicas o un flujo de cambios con escrituras idempotentes |
| Documentos y objetos | S3 | Cloud Storage | Activa como copia | Transferencias por eventos; bloqueo de retención en los dos lados |
| Caché | ElastiCache | Memorystore | Vacía | Nada: se calienta desde la base después del cambio |
| Mensajería | SQS, SNS, EventBridge | Pub/Sub | Piloto encendido | Nada en vivo: outbox replicada y consumidores idempotentes |
| Secretos e identidad | Secrets Manager e IAM | Secret Manager e IAM de Google | Activa | Secretos creados y rotados en cada nube; inicio de sesión con un IdP externo |
| Observabilidad | Collectors OTel en AWS | Collectors OTel en Google | Activa | Todo 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:
| Criterio | AWS → Google Cloud | Canasta | Impacto de salida |
|---|---|---|---|
| Plataforma de ejecución | EKS → GKE | Con equivalente | Medio: los manifiestos viajan; identidad, ingress y almacenamiento se reescriben |
| Registro de imágenes | ECR → Artifact Registry | Portable | Bajo: imágenes OCI, cambia la URL y la autenticación |
| Base relacional | Aurora PostgreSQL → Cloud SQL o AlloyDB | Portable si usas PostgreSQL estándar | Medio: los datos se replican; las funciones propias de Aurora no existen allá |
| Base documental | DynamoDB → Firestore | Dependencia elegida | Alto: otro modelo de datos, otra API y otras garantías de consistencia |
| Almacenamiento de objetos | S3 → Cloud Storage | Con equivalente | Bajo en datos, medio en políticas, eventos y ciclo de vida |
| Mensajería | SQS, SNS, EventBridge → Pub/Sub | Con equivalente | Medio: semánticas distintas de orden, reintento y filtrado |
| Caché | ElastiCache → Memorystore | Portable | Bajo: mismo protocolo; la caché no se migra, se calienta |
| Red | VPC regional, Transit Gateway → VPC global, Cloud Router | Con equivalente | Medio: los conceptos existen, la configuración se rehace |
| Balanceo de carga | ALB y NLB → Cloud Load Balancing | Con equivalente | Medio: reglas, certificados y anotaciones propias |
| Observabilidad | CloudWatch y X-Ray → Cloud Monitoring y Cloud Trace | Portable si instrumentas con OpenTelemetry | Bajo 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:
StorageClasscon 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
Detectar · automático
Chequeos sintéticos externos y SLO del backend neutral fallan desde varias ubicaciones. Evidencia: alertas con hora y recorridos afectados. - 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
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
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
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
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
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
Operar en la secundaria · humano
Guardia en modo Google, cuotas vigiladas, comunicación a clientes, cambios congelados. Evidencia: SLO de la secundaria. - 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.
| Criterio | Nivel 0 | Nivel 1 | Nivel 2 | Nivel 3 |
|---|---|---|---|---|
| Ejemplo | Pagos y pedidos | Portal y APIs de clientes | Procesos internos | Reportes y analítica |
| RPO entre proveedores | 1 minuto | 15 minutos | 4 horas | 24 horas |
| RTO entre proveedores | 1 hora | 4 horas | 24 horas | 3 días |
| Estado en la secundaria | Tibia | Piloto encendido | Solo respaldo con infraestructura como código | Solo 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.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.Un pod de pagos se reinicia por falta de memoria. ¿Qué nivel de defensa debe resolverlo?
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.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.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?