Program işlevleri


İşlevleri belirli zamanlarda çalışacak şekilde planlamak istiyorsanız firebase-functions/v2/scheduler tarafından sağlanan onSchedule işleyici. Bu işlevler Cloud Scheduler kullanır işlev mantığını tanımladığınız zaman veya aralıklarla çağırın.

Başlamadan önce

Bu çözümü Firebase projenizde kullanmak için projenizin şurada olması gerekir: Blaze fiyatlandırma planı. Blaze planında yer almıyorsanız fiyatlandırma planınızı yükseltin.

Faturalandırma gerekli olsa da genel maliyetin yönetilebilir düzeyde olması her Cloud Scheduler işinin maliyeti aylık 0, 10 ABD dolarıdır ve başına ücretsiz üç iş olanağı sağlanacak. Blaze'i kullanın Maliyet tahmini oluşturmak için fiyat hesaplayıcı bir arada kullanabilirsiniz.

Cloud Scheduler API, belirler. Çoğu Firebase projesinde etkin olmalıdır. CANNOT TRANSLATE Google Cloud Console'da doğrulayın.

Planlı fonksiyon yazma

Cloud Functions for Firebase ürününde planlama mantığı, işlev kodunuzda bulunur. özel bir dağıtım zamanı gerekliliği yoktur. Örneğin, etkin olmayan kullanıcı hesaplarını günde bir kez temizlemek için, aşağıdaki içe aktarma ifadeleriyle başlayan bir işlev:

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()

Ardından, onSchedule kullanarak bir Cloud Scheduler görevi başlatabilirsiniz:

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()

Hem Unix Crontab hem de App Engine söz dizimi Cloud Scheduler tarafından desteklenir. Örneğin, Crontab'i kullanmak için aşağıdaki gibi bir işlem yapın:

Node.js

exports.scheduledFunctionCrontab = onSchedule("5 11 * * *", async (event) => {
  // ...
});

Python

@scheduler_fn.on_schedule(schedule="5 11 * * *")

Planlanmış bir işlevi dağıtma

Planlanmış bir işlevi, planlayıcı işi ve HTTP işlevini dağıttığınızda otomatik olarak oluşturulur. Firebase KSA, işlev adını ve işi ve işlevi Google Cloud Console. Konu, aşağıdaki kurala göre adlandırılır:

firebase-planlama-function_name-region

Örneğin:

firebase-schedule-accountcleanup-us-east1.

Planlanan zamanda, varsayılan Compute hizmet hesabı, ilişkilendirilmiş HTTP işleviyle ilgili daha fazla bilgi edinin. Bu, yalnızca ilişkilendirilmiş Cloud Scheduler işin, işlevi çalıştırma izni vardır.