Programa funciones

Si quieres programar funciones que se ejecuten en momentos específicos, usa el subpaquete firebase-functions/v2/scheduler. El método onSchedule crea un tema de Pub/Sub y utiliza Cloud Scheduler para activar eventos en el tema, lo que garantiza que la función se ejecute según la programación que quieres.

Antes de comenzar

Para usar esta solución en tu proyecto de Firebase, este debe tener el plan de precios Blaze. Si aún no lo tienes, actualiza tu plan de precios.

Aunque la facturación es obligatoria, el costo general del plan es controlable, ya que cada trabajo de Cloud Scheduler tiene un valor mensual de $0.10 y cada Cuenta de Google puede tener hasta tres trabajos sin cargo. Usa la calculadora de precios de Blaze para obtener una estimación de los costos en función del uso proyectado.

Las API de Pub/Sub y Cloud Scheduler deben estar habilitadas en tu proyecto. Ya deberían estar habilitadas para la mayoría de los proyectos de Firebase. Confírmalo en la consola de Google Cloud Platform.

Escribe una función programada

En Cloud Functions para Firebase, la lógica de la programación reside en el código de tus funciones, sin requisitos especiales de tiempo de implementación. Para crear una función programada, usa onSchedule a fin de iniciar una tarea de Cloud Scheduler. Por ejemplo, para limpiar cuentas de usuario inactivas una vez al día, puedes usar algo como lo siguiente:

// Run once a day at midnight, to clean up the users
// Manually run the task here https://console.cloud.google.com/cloudscheduler
exports.accountcleanup = onSchedule("every day 00:00", async (event) => {
  // Fetch all user details.
  const inactiveUsers = await getInactiveUsers();

  // Use a pool so that we delete maximum `MAX_CONCURRENT` users in parallel.
  const promisePool = new PromisePool(
      () => deleteInactiveUser(inactiveUsers),
      MAX_CONCURRENT,
  );
  await promisePool.start();

  logger.log("User cleanup finished");
});

Las sintaxis de Unix Crontab y de App Engine son compatibles con Cloud Scheduler. Por ejemplo, si quieres usar Crontab para seleccionar la zona horaria específica en la que deseas ejecutar una función programada, haz algo similar a lo siguiente:

exports.scheduledFunctionCrontab = functions.pubsub.schedule('5 11 * * *')
  .timeZone('America/New_York') // Users can choose timezone - default is UTC
  .onRun((context) => {
  console.log('This will be run every day at 11:05 AM Eastern!');
  return null;
});

El valor de timeZone debe ser el nombre de una zona horaria de la base de datos tz. Consulta la referencia de Cloud Scheduler para obtener más información sobre las propiedades compatibles.

Implementa una función programada

Cuando implementas una función programada, se crean automáticamente el trabajo de Scheduler relacionado y el tema de Pub/Sub. Firebase CLI repite el nombre del tema, y puedes visualizar ambos elementos en GCP Console. Se asigna un nombre al tema según esta convención:

firebase-scheduled-function_name-region

Por ejemplo:

firebase-scheduled-scheduledFunctionCrontab-us-east1.