اگر میخواهید توابع را برای اجرا در زمانهای مشخصی زمانبندی کنید، از
کنترلکننده onSchedule ارائهشده توسط firebase-functions/v2/scheduler استفاده کنید.
این توابع از Cloud Scheduler
برای فراخوانی منطق تابع در زمانها یا فواصل زمانی که شما تعریف میکنید استفاده میکنند.
قبل از شروع
اگرچه برای عملکردهای زمانبندیشده صورتحساب صادر میشود، میتوانید انتظار داشته باشید که هزینه کلی قابلمدیریت باشد، زیرا هر کار Cloud Scheduler ماهانه ۰٫۱۰ دلار (امریکا) هزینه دارد و برای هر حساب Google، سه کار بدون هزینه مجاز است. از ماشینحساب قیمتگذاری Blaze برای تولید برآورد هزینه براساس استفاده پیشبینیشدهتان استفاده کنید.
میانای برنامهسازی کاربردی Cloud Scheduler باید برای پروژهتان فعال باشد. این تنظیم باید ازقبل برای اکثر پروژههای Firebase فعال شده باشد؛ میتوانید در کنسول Google Cloud درستیسنجی کنید.
نوشتن تابع زمانبندیشده
در Cloud Functions for Firebase، منطق زمانبندی در کد توابع شما قرار دارد، بدون هیچگونه الزامات خاصی در زمان استقرار. برای مثال، برای پاک کردن حسابهای کاربری غیرفعال یک بار در روز، میتوانید تابعی بنویسید که با عبارتهای وارد کردن زیر شروع میشود:
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 {initializeApp} = require("firebase-admin/app");
const {getAuth} = require("firebase-admin/auth");
initializeApp();
// The es6-promise-pool to limit the concurrency of promises.
const PromisePool = /** @type {PromisePoolConstructor} */ (
require("es6-promise-pool")
);
// 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()
Cloud Scheduler از هر دو نحو Unix Crontab و App Engine پشتیبانی میکند. برای مثال، برای استفاده از 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 مرتبط اجازه دارد تابع را اجرا کند.