Se vuoi pianificare l'esecuzione delle funzioni in orari specifici, utilizza
l'handler onSchedule
fornito da firebase-functions/v2/scheduler
.
Queste funzioni utilizzano Cloud Scheduler per richiamare la logica della funzione nei momenti o negli intervalli che definisci.
Prima di iniziare
Per utilizzare questa soluzione nel progetto Firebase, il progetto deve far parte del piano tariffario Blaze. Se non è già presente nel piano Blaze, aggiorna il piano tariffario.
Anche se la fatturazione è obbligatoria, il costo complessivo è comunque gestibile, dato che ogni job Cloud Scheduler costa 0, 10 $al mese ed è previsto un limite di tre job per Account Google, senza costi aggiuntivi. Utilizza il Calcolatore prezzi di Blaze per generare una stima dei costi in base all'utilizzo previsto.
L'API Cloud Scheduler deve essere abilitata per il tuo progetto. Dovrebbe essere già abilitato per la maggior parte dei progetti Firebase. Puoi verificarlo nella console Google Cloud.
Scrivere una funzione pianificata
In Cloud Functions for Firebase, la logica di pianificazione risiede nel codice delle funzioni, senza requisiti speciali in fase di deployment. Ad esempio, per ripulire gli account utente inattivi una volta al giorno, puoi scrivere una funzione iniziando con le seguenti istruzioni di importazione:
Node.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;
Python
# 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()
Dopodiché puoi usare onSchedule
per avviare un'attività Cloud Scheduler:
Node.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");
});
Python
# 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()
La sintassi Unix Crontab e App Engine sono supportate da Cloud Scheduler. Ad esempio, per utilizzare Crontab, procedi nel seguente modo:
Node.js
exports.scheduledFunctionCrontab = onSchedule("5 11 * * *", async (event) => {
// ...
});
Python
@scheduler_fn.on_schedule(schedule="5 11 * * *")
Esegui il deployment di una funzione pianificata
Quando esegui il deployment di una funzione pianificata, vengono creati automaticamente un job dello scheduler e una funzione HTTP. La CLI Firebase ripete il nome della funzione e puoi visualizzare il job e la funzione nella console Google Cloud. L'argomento viene denominato in base alla seguente convenzione:
firebase-schedule-function_name-region
Ad esempio:
firebase-schedule-accountcleanup-us-east1.
All'ora pianificata, l'account di servizio Compute predefinito richiama la funzione HTTP associata. Ciò significa che solo il Cloud Scheduler job associato ha l'autorizzazione per eseguire la funzione.