Funktionen planen

Wenn Sie Funktionen zu bestimmten Zeiten ausführen möchten, verwenden Sie den onSchedule-Handler, der von firebase-functions/v2/scheduler bereitgestellt wird. Diese Funktionen verwenden Cloud Scheduler , um die Funktionslogik zu den von Ihnen festgelegten Zeiten oder Intervallen aufzurufen.

Hinweis

Geplante Funktionen werden zwar in Rechnung gestellt, aber die Gesamtkosten sind in der Regel überschaubar, da jeder Cloud Scheduler Job 0,10 $ pro Monat kostet und pro Google-Konto drei Jobs kostenlos sind. Sie können mithilfe des Blaze Preisrechners die Kosten für Ihre voraussichtliche Nutzung kalkulieren.

Die Cloud Scheduler API muss für Ihr Projekt aktiviert sein. Sie sollte für die meisten Firebase-Projekte bereits aktiviert sein. Sie können dies in der Google Cloud Console überprüfen.

Geplante Funktion schreiben

In Cloud Functions for Firebase, befindet sich die Planungslogik im Code Ihrer Funktionen, es gibt keine besonderen Anforderungen für die Bereitstellung. Wenn Sie beispielsweise inaktive Nutzerkonten einmal täglich bereinigen möchten, können Sie eine Funktion mit den folgenden Importanweisungen schreiben:

Node.js

// The Cloud Functions for Firebase SDK to set up triggers and logging.
const {onSchedule} = require("firebase-functions/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()

Cloud Scheduler unterstützt sowohl die Unix-Crontab- als auch die App Engine Syntax Cloud Scheduler. Wenn Sie beispielsweise Crontab verwenden möchten, gehen Sie so vor:

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 Scheduler-Job und eine HTTP-Funktion erstellt. Die Firebase CLI gibt den Funktionsnamen aus, und Sie können den Job und die Funktion in der Google Cloud Console aufrufen. Das Thema wird nach der folgenden Konvention benannt:

firebase-schedule-function_name-region

Beispiel:

firebase-schedule-accountcleanup-us-east1

Zur geplanten Zeit ruft das Compute-Standarddienstkonto die zugehörige HTTP-Funktion auf. Das bedeutet, dass nur der zugehörige Cloud Scheduler Job die Berechtigung hat, die Funktion auszuführen.