Si desea programar funciones para que se ejecuten en momentos específicos, use el controlador onSchedule
proporcionado por firebase-functions/v2/scheduler
. Estas funciones utilizan Cloud Scheduler para invocar la lógica de funciones en los momentos o intervalos que usted defina.
Antes de que empieces
Para utilizar esta solución en su proyecto de Firebase, su proyecto debe estar en el plan de precios de Blaze. Si aún no está en el plan Blaze, actualice su plan de precios .
Aunque se requiere facturación, puede esperar que el costo general sea manejable, ya que cada trabajo de Cloud Scheduler cuesta $0,10 (USD) por mes y hay una asignación de tres trabajos por cuenta de Google, sin cargo. Utilice la calculadora de precios de Blaze para generar una estimación de costos basada en su uso proyectado.
La API de Cloud Scheduler debe estar habilitada para su proyecto. Ya debería estar habilitado para la mayoría de los proyectos de Firebase; Puedes verificarlo en la consola de Google Cloud Platform .
Escribir una función programada
En Cloud Functions para Firebase, la lógica de programación reside en su código de funciones, sin requisitos especiales de tiempo de implementación. Por ejemplo, para limpiar cuentas de usuarios inactivos una vez al día, podría escribir una función que comience con las siguientes declaraciones de importación:
Nodo.js
// The Cloud Functions for Firebase SDK to set up triggers and logging.
const {onSchedule} = require("firebase-functions/v2/scheduler");
const {logger} = require("firebase-functions");
// The Firebase Admin SDK to delete inactive users.
const admin = require("firebase-admin");
admin.initializeApp();
// The es6-promise-pool to limit the concurrency of promises.
const PromisePool = require("es6-promise-pool").default;
// Maximum concurrent account deletions.
const MAX_CONCURRENT = 3;
Pitón
# The Cloud Functions for Firebase SDK to set up triggers and logging.
from firebase_functions import scheduler_fn
# The Firebase Admin SDK to delete users.
import firebase_admin
from firebase_admin import auth
firebase_admin.initialize_app()
Luego, podrías usar onSchedule
para iniciar una tarea de Cloud Scheduler:
Nodo.js
// 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");
});
Pitón
# Run once a day at midnight, to clean up inactive users.
# Manually run the task here https://console.cloud.google.com/cloudscheduler
@scheduler_fn.on_schedule(schedule="every day 00:00")
def accountcleanup(event: scheduler_fn.ScheduledEvent) -> None:
"""Delete users who've been inactive for 30 days or more."""
user_page: auth.ListUsersPage | None = auth.list_users()
while user_page is not None:
inactive_uids = [
user.uid for user in user_page.users if is_inactive(user, timedelta(days=30))
]
auth.delete_users(inactive_uids)
user_page = user_page.get_next_page()
Tanto la sintaxis de Unix Crontab como la de App Engine son compatibles con Cloud Scheduler. Por ejemplo, para usar Crontab, haga algo como esto:
Nodo.js
exports.scheduledFunctionCrontab = onSchedule("5 11 * * *", async (event) => {
// ...
});
Pitón
@scheduler_fn.on_schedule(schedule="5 11 * * *")
Implementar una función programada
Cuando implementa una función programada, se crean automáticamente un trabajo del programador y una función HTTP. Firebase CLI repite el nombre de la función y puedes ver el trabajo y la función en GCP Console . El tema se nombra según la siguiente convención:
firebase-schedule- function_name - region
Por ejemplo:
firebase-schedule-accountcleanup-us-east1.
A la hora programada, la cuenta del servicio informático predeterminado invoca la función HTTP asociada. Esto significa que solo el trabajo de Cloud Scheduler asociado tiene permiso para ejecutar la función.