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

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

قبل از اینکه شروع کنی

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

رابط برنامه‌نویسی کاربردی Cloud Scheduler API) باید برای پروژه شما فعال باشد. این رابط از قبل برای اکثر پروژه‌های فایربیس فعال است؛ می‌توانید آن را در کنسول گوگل کلود (Google Cloud console) تأیید کنید.

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

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

نود جی اس

// 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;

پایتون

# 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 استفاده کنید:

نود جی اس

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

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

نود جی اس

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

پایتون

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

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

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

function_name - region

برای مثال:

زمانبندی-پاکسازی-حساب-فایربیس-آمریکا-شرق1.

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