توابع زمانبندی


اگر می‌خواهید توابع را برای اجرا در زمان‌های مشخص زمان‌بندی کنید، از کنترل‌کننده onSchedule ارائه‌شده توسط firebase-functions/v2/scheduler استفاده کنید. این توابع از Cloud Scheduler برای فراخوانی منطق تابع در زمان ها یا فواصل زمانی که شما تعریف می کنید استفاده می کنند.

قبل از شروع

برای استفاده از این راه حل در پروژه Firebase، پروژه شما باید در طرح قیمت گذاری Blaze باشد. اگر قبلاً در طرح Blaze نیست، طرح قیمت گذاری خود را ارتقا دهید .

اگرچه صورت‌حساب مورد نیاز است، می‌توانید انتظار داشته باشید که هزینه کلی قابل مدیریت باشد، زیرا هر کار Cloud Scheduler 0.10 دلار (دلار آمریکا) در ماه هزینه دارد، و سه شغل برای هر حساب Google بدون هیچ هزینه‌ای وجود دارد. از ماشین حساب قیمت گذاری Blaze برای ایجاد برآورد هزینه بر اساس استفاده پیش بینی شده خود استفاده کنید.

Cloud Scheduler API باید برای پروژه شما فعال باشد. از قبل باید برای اکثر پروژه های Firebase فعال باشد. می توانید در کنسول Google Cloud تأیید کنید.

یک تابع زمان بندی شده بنویسید

در Cloud Functions for Firebase ، منطق زمان‌بندی در کد توابع شما قرار دارد، بدون نیاز به زمان استقرار خاص. به عنوان مثال، برای پاکسازی حساب‌های کاربری غیرفعال یک بار در روز، می‌توانید تابعی بنویسید که با دستورهای import زیر شروع می‌شود:

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;

پایتون

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

سپس، می توانید از onSchedule برای شروع یک کار 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");
});

پایتون

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

هر دو یونیکس Crontab و App Engine توسط Cloud Scheduler پشتیبانی می شوند. به عنوان مثال، برای استفاده از Crontab، این کار را انجام دهید:

Node.js

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

پایتون

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

یک تابع برنامه ریزی شده را مستقر کنید

هنگامی که یک تابع زمان بندی شده را اجرا می کنید، یک کار زمانبندی و یک تابع HTTP به طور خودکار ایجاد می شود. Firebase CLI نام تابع را بازتاب می دهد و می توانید کار و عملکرد را در کنسول Google Cloud مشاهده کنید. موضوع بر اساس قرارداد زیر نامگذاری شده است:

firebase-schedule- function_name - region

به عنوان مثال:

firebase-schedule-accountcleanup-us-east1.

در زمان برنامه ریزی شده، حساب سرویس محاسباتی پیش فرض تابع HTTP مرتبط را فراخوانی می کند. این بدان معناست که فقط کار مربوط به Cloud Scheduler اجازه اجرای عملکرد را دارد.