{
 "subtemas": [],
 "tarjetas": [
  {
   "sub": "DevOps y CI/CD",
   "q": "Cloud Build: pipeline básico en cloudbuild.yaml",
   "a": "steps: [ {name: gcr.io/cloud-builders/docker, args: [build, -t, $LOCATION-docker.pkg.dev/$PROJECT_ID/repo/app:$SHORT_SHA, .]} , {name: docker, args: [push, ...]} ]\nimages, substitutions ($PROJECT_ID, $SHORT_SHA, $_VARS custom), availableSecrets para tokens.\ngcloud builds submit --config cloudbuild.yaml .\nTrigger desde GitHub: push a main → build → deploy.",
   "nivel": "intermedio",
   "clave": true
  },
  {
   "sub": "DevOps y CI/CD",
   "q": "Triggers de Cloud Build: por branch, tag, PR y manual",
   "a": "Push a branch (main→deploy stage), push a tag (v*→prod), Pull Request (solo build/test), manual (deploy one-off).\nFiltros por ruta incluidos/excluded files (solo build si cambia /api).\nService account del build con permisos mínimos (deploy a Run, nada más).\nAprobaciones (approvals) antes de desplegar a prod.",
   "nivel": "intermedio",
   "clave": true
  },
  {
   "sub": "DevOps y CI/CD",
   "q": "Secretos en Cloud Build (sin exponerlos en logs)",
   "a": "availableSecrets: secretManager: [versionName: projects/p/secrets/npm-token/versions/latest] + step env: NPM_TOKEN=secretManager:npm-token.\nEl valor no aparece en logs (enmascarado).\nCredenciales de deploy: la SA del build con roles mínimos, impersonation en lugar de keys.\nNunca COPY secrets en la imagen.",
   "nivel": "intermedio",
   "clave": true
  },
  {
   "sub": "DevOps y CI/CD",
   "q": "CD a Cloud Run: build → deploy → smoke test",
   "a": "Step 1 docker build/push; step 2 gcloud run deploy svc --image ... --region --quiet; step 3 curl smoke test al URL de la revisión tagged; si falla → rollback traffic a revisión anterior.\nAlternativa declarativa: Cloud Deploy (pipeline dev→stage→prod con approvals y rollbacks unificados para Run/GKE).\nTodo como código en el repo del servicio.",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "DevOps y CI/CD",
   "q": "Estrategia de branching y deploy por entornos en GCP",
   "a": "Trunk-based + feature flags: main siempre desplegable → dev automático; stage con tag/merge; prod con release tag + aprobación.\nEntornos = proyectos GCP distintos (misma receta Terraform) — nunca carpetas en el mismo proyecto.\nPromoción de la MISMA imagen entre entornos (solo cambia config) — no re-builds por entorno.",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "DevOps y CI/CD",
   "q": "Terraform en GCP: estructura de proyecto típica",
   "a": "modules: network (VPC/subnets/NAT), project-factory (proyecto + APIs + budgets), run-service (deploy app), data (SQL + backup).\nEnvironments: dev.tfvars / prod.tfvars sobre el mismo módulo.\nRemote state en GCS + lock. CI: plan en PR (comentario del plan), apply manual o auto en merge para dev.\nVersion pinning de providers.",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "DevOps y CI/CD",
   "q": "GitOps con GKE: ArgoCD/Config Sync",
   "a": "Git = fuente de verdad del estado del clúster: ArgoCD sincroniza manifiestos/Helm desde repo, diff visible, rollback = git revert.\nConfig Sync (Anthos): sincroniza configs/namespaces/policies a nivel org.\nSeparación: repo de app (código) vs repo de despliegue (manifiestos) — CI actualiza el segundo, CD sincroniza.\nBeneficio: auditoría y recuperación total del clúster desde git.",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "DevOps y CI/CD",
   "q": "Cloud Deploy: progresión gestionada dev→prod",
   "a": "Pipeline declarativo: targets (dev, stage, prod), strategy (standard o canary con % por fases), approvals en prod, rollbacks de 1 click.\nRenderiza skaffold profiles (config por target) y despliega a Run/GKE.\nHistorial de releases y estados centralizado — para equipos sin plataforma propia de CD.",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "DevOps y CI/CD",
   "q": "Pipelines de imágenes seguras: scan → sign → deploy",
   "a": "Cloud Build → Artifact Registry con on-push vulnerability scanning (Critical/High bloquea) → attestación firmada (Binary Authorization) → solo imágenes firmadas despliegan en GKE/Run.\nSBOM generado (syft) adjunto; provenance SLSA de la build.\nBase images minimal (distroless/chainguard) reducen CVEs de raíz.",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "DevOps y CI/CD",
   "q": "Private pools de Cloud Build: builds en tu VPC",
   "a": "Worker pool dedicado dentro de tu VPC: acceso a recursos privados (Cloud SQL de test, Memorystore, repos internos) sin exponerlos.\nControl de máquina (tipo, disco) y de egress.\nCosto por tiempo de worker; usar solo para builds que requieren red privada — el resto en el pool compartido.",
   "nivel": "avanzado",
   "clave": true
  },
  {
   "sub": "DevOps y CI/CD",
   "q": "Feature flags en pipeline de GCP: decoupling deploy/release",
   "a": "Deploy frecuente + flag apagado = código en prod invisible al usuario.\nGestión: Unleash self-hosted en GKE / LaunchDarkly / Firebase Remote Config (móvil) / properties en Firestore.\nKill switch para apagar feature problemática sin rollback.\nHigiene: dueño + fecha de expiración por flag (los flags eternos son deuda).",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "Observabilidad y SRE",
   "q": "Cloud Logging: consultas y sinks que debes dominar",
   "a": "Queries: resource.type=\"cloud_run_revision\" severity>=ERROR textPayload:\"timeout\"; guardar queries.\nSinks: enrutamiento a BigQuery (analítica), GCS (archivo barato), Pub/Sub (alertas custom/SIEM).\nExclusion sinks: bajar costo descartando logs ruidosos en el origen.\nLog-based metrics: contar ocurrencias de un patrón → métrica + alerta.",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "Observabilidad y SRE",
   "q": "Cloud Monitoring: uptime, alertas y políticas",
   "a": "Uptime checks: sonda externa cada N min desde varias regiones (URL, grupos).\nAlert policies: condición sobre métrica (error rate > 5% en 5m) → notificación (email, SMS, Slack, Pub/Sub, PagerDuty).\nThrottling/aggregation: ventanas, alineadores (mean, count), 'for X minutes' para evitar ruido.\nIncidentes con timeline y ack.",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "Observabilidad y SRE",
   "q": "SLOs en Cloud Monitoring: del concepto al setup",
   "a": "SLI: métrica de servicio percibida (disponibilidad = % requests 5xx-free; latencia = % requests < 300ms).\nSLO: objetivo en ventana (99.9% / 30 días rolling). Error budget = 100% - SLO.\nMonitoring: crear SLO sobre service → burn rate alerts (rápido 14.4x/1h y lento 6x/6h).\nAterrizaje: pausa de releases cuando el budget está agotado (política de equipo).",
   "nivel": "avanzado",
   "clave": false
  },
  {
   "sub": "Observabilidad y SRE",
   "q": "Cloud Trace y Profiler: diagnóstico de latencia y CPU",
   "a": "Trace: waterfall de una request entre servicios (spans por llamada/SQL) — localizar el 300ms escondido; sampling configurable.\nProfiler (continuous): CPU/heap muestreado en producción sin overhead — flame graphs reales de hotspots.\nAmbos casi gratis de instrumentar con Cloud Ops agents/client libs (Java: auto-instrumentación Micrometer Tracing).",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "Observabilidad y SRE",
   "q": "Error Reporting: el dashboard de excepciones",
   "a": "Agrupa stack traces idénticos de logs (Cloud Run/GKE/Functions escriben con formato estándar) → conteo, usuarios afectados, primera/última vez.\nAlerta sobre nuevo error group (fade-in).\nPara Java: loguear Throwable con severity=ERROR y el agente lo agrupa.\nRutina: revisar grupos nuevos en cada deploy.",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "Observabilidad y SRE",
   "q": "Alertas que no despiertan a nadie en vano: higiene",
   "a": "Alertar sobre SÍNTOMAS que afectan usuarios (SLO burn, error rate), no causas triviales (CPU alta transitoria).\nVentanas de estabilización (for 5 min), thresholds basados en p95, escalamiento jerárquico, runbook link en cada alerta.\nRevisar alertas disparadas al mes: <50% accionables = refinar.\nEl objetivo: cada página = acción clara o se elimina.",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "Observabilidad y SRE",
   "q": "Golden signals: qué monitorear en TODO servicio",
   "a": "Latency (p50/p95/p99 por endpoint), Traffic (req/s), Errors (4xx/5xx rate), Saturation (CPU, memoria, conexiones pool, profundidad de colas).\nPor servicio: 4 dashboards que responden 'está sano?'.\nDependencias: latencia y tasa de error de llamadas externas (son tus cuellos más frecuentes).",
   "nivel": "intermedio",
   "clave": true
  },
  {
   "sub": "gcloud y herramientas",
   "q": "Comandos gcloud del día a día (chuleta)",
   "a": "gcloud config set project/set compute/region.\nrun: gcloud run deploy svc --image img --region us-central1; run services update-traffic.\ncompute: instances create/list, ssh NAME --tunnel-through-iap.\nsql: connect INSTANCE --user=root; sql backups create.\niam: auth list, auth login --update-adc; projects get-iam-policy.\n--format/--filter/--quiet para scripts.",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "gcloud y herramientas",
   "q": "gsutil vs gcloud storage: la sucesión",
   "a": "gsutil (legado) → gcloud storage (reemplazo moderno): cp -r, rsync (delta), ls -l gs://bucket/prefijo**, mv, rm -a (todas las versiones), sign-url generate.\nPatrones con wildcards y --recursive; --billing-project para requests en nombre de otro proyecto.\nPara pipelines: client libs o Storage Transfer, no shell.",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "gcloud y herramientas",
   "q": "Logs y debugging desde CLI",
   "a": "gcloud logging read 'resource.type=cloud_run_revision AND severity>=ERROR' --limit 20 --format json.\ngcloud run services logs read svc --region ... (tail -f).\ngcloud compute instances get-serial-port-output (boot failures).\nStreaming en console (Log Router live tail) para deploys en caliente.",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "gcloud y herramientas",
   "q": "IAM desde CLI: inspección y simulación",
   "a": "gcloud projects get-iam-policy PROJECT --format=json.\nget-ancestors-iam-policy (quién me da este permiso).\nPolicy Troubleshooter (console o API): '¿por qué no puedo X?' — evalúa el binding real (condiciones incluidas).\nRecommender IAM: permisos no usados en 90 días → sugerencia de roles más ajustados.",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "gcloud y herramientas",
   "q": "Cloud Code / Cloud Workstations: desarrollo en el cloud",
   "a": "Cloud Code (extensión IDE): deploy/debug de Cloud Run y GKE desde VSCode/IntelliJ, skaffold integrado.\nCloud Workstations: entornos dev gestionados en la nube (CPU/RAM configurables, preinstalado, efímeros) — onboarding en minutos, código nunca en laptops.\nEmulators locales: pubsub-emulator, datastore, bigquery (bq beta emulators) para tests sin GCP real.",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "gcloud y herramientas",
   "q": "Costos por CLI y presupuesto programático",
   "a": "gcloud billing accounts list; budgets create con --billing-account --budget-amount --threshold-rule.\nBigQuery billing export queries para reportes custom por label.\nAPI Cloud Billing Catalog para estimar precios en tooling.\nAlerta 100% + acción: función que apaga entornos dev de noche (scheduler + script) — ahorro automático.",
   "nivel": "intermedio",
   "clave": false
  },
  {
   "sub": "gcloud y herramientas",
   "q": "Cloud Asset Inventory: saber qué tienes corriendo",
   "a": "Inventario de TODOS los recursos de la org en un punto del tiempo + histórico de cambios (feed a BigQuery/PubSub).\nQueries tipo: 'todas las VMs con IP pública', 'buckets sin CMEK', 'SAs con keys'.\nBase de compliance continua y de limpieza de recursos zombis.\ngcloud asset search-all-resources --asset-types=...",
   "nivel": "intermedio",
   "clave": false
  }
 ]
}