Ir al contenido
use-cases / snapshot-before-migration / hero
CASO DE USO / SNAPSHOT ANTES DE LA MIGRACIÓN

Haz un snapshot del contenedor justo antes de la migración nocturna

Añade una entrada hoody-cron que dispare cinco minutos antes del job de migración de las 03:00. Hace curl a la URL de snapshots y etiqueta el artefacto como punto de rollback. Si la migración falla, restauras en 30 segundos con un único PATCH.

use-cases / snapshot-before-migration / mechanism

Dos URLs, un hábito antes de dormir

El servicio de cron programa un curl. El servicio de snapshots se encarga de congelar. Ninguno sabe nada del job de migración que corre cinco minutos después, y esa es justo la idea.

POST cron/entries
scheduler
# registrar el job de snapshot recurrente (configuración única)
curl -X POST \
  cron.containers.hoody.com/users/root/entries \
  -H "Content-Type: application/json" \
  -d '{
    "schedule": "55 2 * * *",
    "command": "curl -X POST $SNAP_URL -d '{\"alias\":\"rollback-point\"}'",
    "comment": "pre-migration snapshot"
  }'
DISPARA
POST containers/[id]/snapshots
freezer
# lo que la entrada de cron hace curl cada noche a las 02:55 UTC
curl -X POST \
  api.hoody.com/api/v1/containers/$ID/snapshots \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"alias": "rollback-point", "expiry": 7}'

# respuesta del servicio de snapshots
200 OK · snap-2026-05-04 created in 8s

La entrada de cron es una fila en una tabla Postgres en algún sitio dentro de Hoody. La URL de snapshots escribe un blob direccionado por contenido al backend de almacenamiento del contenedor. Ambos son duraderos, ambos están versionados, y ninguno requiere un proceso de larga duración en tu portátil.

use-cases / snapshot-before-migration / anatomy

Anatomía de anoche

Cuatro momentos, cuatro URLs y un hueco de cinco minutos entre la red de seguridad y el cambio. La migración termina antes de que suene el primer despertador de casi nadie.

0102:55:00ZCron disparaschedule: 55 2 * * *
0202:55:08ZSnapshot aterrizaalias rollback-point
0303:00:00ZMigración correALTER TABLE invoices
0403:01:42ZAuditoría cierrasnapshot retenido 7d

Si el paso 03 falla, el rollback es `PATCH /snapshots/snap-2026-05-04` y vuelves a 02:55:08Z. La línea de tiempo de auditoría de arriba son los mismos datos, servidos como JSON.

use-cases / snapshot-before-migration / powers

Lo que esta forma desbloquea

No el snapshot en sí. La forma: un backup que existe antes del cambio, direccionado por una URL, con un nombre que incluye la fecha de hoy.

01 / SEGURIDAD

El backup precede al cambio, exactamente cinco minutos

La mayoría de los post-mortems de incidencias empiezan con "se nos olvidó hacer un backup". Cuando el backup es una entrada de cron, no se puede olvidar. El snapshot de las 02:55 es la primera frase del runbook, escrita por adelantado.

02 / VELOCIDAD

El rollback es un PATCH, no un runbook de 40 pasos

Restaurar snap-2026-05-04 es una sola llamada HTTP contra api.hoody.com. El contenedor vuelve a su estado de 02:55:08Z en menos de 30 segundos. Sin ticket, sin escalado a la guardia, sin "¿quién tiene la consola de AWS?".

03 / COSTE EN INACTIVIDAD

Si la migración va bien, el snapshot no cuesta nada

Los snapshots están direccionados por contenido y se almacenan como deltas. Un delta de 412 MB sobre un disco base sin cambios es lo que pagas, y solo durante la ventana de retención de 7 días. Las migraciones exitosas casi no dejan huella.

use-cases / snapshot-before-migration / rollback

El rollback, antes vs después

Cómo era el runbook, y en qué se colapsa cuando el snapshot lleva el nombre de la fecha de hoy y es direccionable como una URL.

RUNBOOK ANTIGUO9 pasos manuales, 20-40 minutos, 1-2 humanos
  • 01
    Llamar al DBA de guardia, confirmar que la migración rompió producciónmediana: 4 minutos para acuse de recibo
  • 02
    Buscar el backup más reciente en la consola de AWSy rezar para que tenga menos de 24 horas
  • 03
    Levantar una instancia de restore y esperar a que esté online8-15 minutos en db.r6g.xlarge
  • 04
    Revertir el ALTER TABLE a mano con un script DOWN escrito a manosi es que existe el script DOWN, lo que normalmente no pasa
  • 05
    Reiniciar los servidores de aplicación, vaciar cachés, vigilar tasas de errory escribir el post-mortem
Tiempo medio de rollback, incidencias ops@acme 2024: 27 minutos
RUNBOOK NUEVO1 llamada HTTP, ~30 segundos, 0 humanos
# rollback de la migración de anochecurl -X PATCH api.hoody.com/api/v1/containers/$ID/snapshots/snap-2026-05-04# respuesta200 OK · contenedor revertido a snap-2026-05-04 en 28s
PATCH es idempotente y reversible

La nueva columna de la derecha no es una herramienta. Es una sola frase en un runbook. La frase no empieza con "primero, haz un backup" porque el backup ya existe.

use-cases / snapshot-before-migration / punchline

El plan de rollback es una URL que programaste para que existiera.

ANTES: una página de Notion que nadie leeDESPUÉS: una fila en cron y un blob en object storage
ANTESprimero, haz un backupla primera frase del runbook, ejecutada a mano a las 03:02 por un humano cansado
AHORAel backup ya existe, con el nombre de la fecha de hoy, tomado cinco minutos antes del cambiola primera frase del runbook, escrita por adelantado por una entrada de cron
Ver la API de snapshots
use-cases / snapshot-before-migration / replaces

Lo que esto reemplaza

El culto al cargo de los backups previos a migración. Programa el snapshot, duerme con la ventana de migración.

  • Snapshots manuales antes de migraciónDespertar a las 02:54 para pulsar el botón de backup
  • Ítems de checklist en el runbookPaso 1 de 14 en la página que nadie encuentra
  • Guardia en standby para rollbackPagar a un ingeniero por esperar a nada
  • pg_dump ad-hoc antes de los deploysEsperando que te acordaras y que terminara
  • Releases "vamos con cuidado"El optimismo que envía incidentes
  • Snapshots automáticos de AWS RDSVentana fija de 5 minutos, pagado por GB-día
use-cases / snapshot-before-migration / cta

El plan de rollback es una URL que programaste para que existiera.

use-cases / snapshot-before-migration / related

Lee los otros