Wenn Sie Funktionen so planen möchten, dass sie zu bestimmten Zeiten ausgeführt werden, verwenden Sie den von firebase-functions/v2/scheduler
bereitgestellten onSchedule
-Handler.
Diese Funktionen verwenden Cloud Scheduler, um die Funktionslogik zu den von Ihnen festgelegten Zeiten oder Intervallen aufzurufen.
Hinweis
Damit Sie diese Lösung in Ihrem Firebase-Projekt verwenden können, muss Ihr Projekt den Blaze-Preisplan haben. Wenn er noch nicht im Tarif „Blaze“ enthalten ist, führen Sie ein Upgrade Ihres Preismodells durch.
Obwohl die Abrechnung erforderlich ist, können Sie davon ausgehen, dass die Gesamtkosten überschaubar sind, da jeder Cloud Scheduler-Job 0, 10 $pro Monat kostet und drei Jobs pro Google-Konto kostenlos sind. Sie können mithilfe des Preisrechners von Blaze eine Kostenschätzung für Ihre voraussichtliche Nutzung erstellen.
Die Cloud Scheduler API muss für Ihr Projekt aktiviert sein. Für die meisten Firebase-Projekte sollte sie bereits aktiviert sein. Sie können das in der Google Cloud Console prüfen.
Geplante Funktion schreiben
In Cloud Functions for Firebase befindet sich die Planungslogik im Code Ihrer Funktionen, ohne besondere Anforderungen an die Bereitstellungszeit. Wenn Sie beispielsweise inaktive Nutzerkonten einmal täglich bereinigen möchten, können Sie eine Funktion schreiben, die mit den folgenden Importanweisungen beginnt:
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()
Anschließend können Sie mit onSchedule
eine Cloud Scheduler-Aufgabe starten:
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()
Sowohl die Unix-Crontab- als auch die App Engine-Syntax werden von Cloud Scheduler unterstützt. So verwenden Sie beispielsweise Crontab:
Node.js
exports.scheduledFunctionCrontab = onSchedule("5 11 * * *", async (event) => {
// ...
});
Python
@scheduler_fn.on_schedule(schedule="5 11 * * *")
Geplante Funktion bereitstellen
Wenn Sie eine geplante Funktion bereitstellen, werden automatisch ein Planerjob und eine HTTP-Funktion erstellt. Die Firebase-Befehlszeile gibt den Funktionsnamen zurück und Sie können den Job und die Funktion in der Google Cloud Console ansehen. Das Thema wird nach der folgenden Konvention benannt:
firebase-schedule-function_name-region
Beispiel:
firebase-schedule-accountcleanup-us-east1.
Zum geplanten Zeitpunkt ruft das Compute Engine-Standarddienstkonto die zugehörige HTTP-Funktion auf. Das bedeutet, dass nur der zugehörige Cloud Scheduler-Job die Berechtigung zum Ausführen der Funktion hat.