Antes que nada, toda la documentación oficial está en: https://firebase.google.com/docs/firestore/backups
Instalar la consola para Google Cloud
Para comenzar, se requiere tener instalada la consola de gcloud. En este link https://cloud.google.com/sdk/docs/install?hl=es-419 podrás descargar los instaladores y ver las instrucciones para la instalación. Una vez instalada, se podrán configurar los proyectos.
Configurar el proyecto en Google Cloud
Un proyecto de Google Cloud corresponde exactamente con un proyecto de Firebase. Normalmente, antes de configurar un proyecto, es necesario verificar qué proyectos están ya configurados, así:
❯ gcloud config configurations list
NAME IS_ACTIVE ACCOUNT PROJECT COMPUTE_DEFAULT_ZONE COMPUTE_DEFAULT_REGION
default False [email protected] un-proyecto
un-proyecto True [email protected] un-proyecto
otro-proyecto False [email protected] otro-proyecto
Se puede configurar un nuevo proyecto corriendo el siguiente comando:
❯ gcloud config configurations create nuevo-proyecto
Created [nuevo-proyecto].
Activated [nuevo-proyecto].
‘nuevo-proyecto’ corresponde al id del proyecto de firebase. Al crearse, se activará automáticamente. Se puede usar el comando anterior para verificar que efectivamente está activo:
❯ gcloud config configurations list
NAME IS_ACTIVE ACCOUNT PROJECT COMPUTE_DEFAULT_ZONE COMPUTE_DEFAULT_REGION
default False [email protected] un-proyecto
un-proyecto False [email protected] un-proyecto
otro-proyecto False [email protected] otro-proyecto
nuevo-proyecto True
Nótese que ‘nuevo-proyecto’ aparece con ‘True’ en la columna ‘IS_ACTIVE’. Esto quiere decir que las modificaciones que hagamos en la configuración se aplicarán a este proyecto que es el proyecto activo. A continuación asociaremos una cuenta, que corresponde al email asociado al proyecto de Firebase:
❯ gcloud config set account [email protected]
Updated property [core/account].
Adicionalmente, se debe configurar el ‘proyecto’, que corresponde al id del proyecto de Firebase:
❯ gcloud config set project nuevo-proyecto
WARNING: Your active project does not match the quota project in your local Application Default Credentials file. This might result in unexpected quota issues.
To update your Application Default Credentials quota project, use the `gcloud auth application-default set-quota-project` command.
Updated property [core/project].
Nótese que apareció un warning, que atenderemos más adelante. Por lo pronto la configuración va quedando así:
❯ gcloud config configurations list
NAME IS_ACTIVE ACCOUNT PROJECT COMPUTE_DEFAULT_ZONE COMPUTE_DEFAULT_REGION
default False [email protected] un-proyecto
un-proyecto False [email protected] un-proyecto
otro-proyecto False [email protected] otro-proyecto
nuevo-proyecto True [email protected] nuevo-proyecto
Para resolver el warning que salió anteriormente, ejecutar el comando:
❯ gcloud auth application-default set-quota-project
Configurar un Schedule que haga los backups de Firestore
A continuación configuraremos un schedule para que haga el backup de la base de datos ‘default’ del proyecto activo, una vez a la semana, cada domingo, con un periodo de retención de 4 semanas, con el siguiente comando:
❯ gcloud alpha firestore backups schedules create --database='(default)' --retention='4w' --recurrence='weekly' --day-of-week='SUN'
La configuración puede ajustarse de acuerdo con los requerimientos del proyecto (Ver la documentación oficial). Para verificar que el schedule quedó bien configurado correr el siguiente comando:
❯ gcloud alpha firestore backups schedules list --database='(default)'
---
createTime: '2024-03-19T22:43:36.722966Z'
name: projects/nuevo-proyecto/databases/(default)/backupSchedules/asdf654-asd5448-adf5-5665-adf56sdf46
retention: 2419200s
updateTime: '2024-03-19T22:43:36.722966Z'
weeklyRecurrence:
day: SUNDAY
Verificar que se estén generando los backups de Firestore
Una vez haya corrido el schedule y se hayan generado algunos backups, será posible verlos con este comando:
❯ gcloud alpha firestore backups list
---
database: projects/nuevo-proyecto/databases/(default)
databaseUid: asdf5adsf-fasd65-a6dfs-6a4fds-6gsd6f55s6
expireTime: '2024-04-21T22:27:37.228255Z'
name: projects/nuevo-proyecto/locations/nam5/backups/…
snapshotTime: '2024-03-24T22:27:37.205603Z'
state: READY
---
database: projects/nuevo-proyecto/databases/(default)
...
Seguramente será necesario hacer este mismo proceso en otro proyecto. Para activar un proyecto diferente (que ya esté creado), simplemente correr el siguiente comando con el nombre del proyecto que se quiere activar:
❯ gcloud config configurations activate otro-proyecto
Activated [otro-proyecto].
Para saber más acerca de como eliminar o agregar schedules o restablecer backups, ver la documentación oficial. Todos los comandos siguen esta misma estructura.