Nếu bạn muốn lên lịch chạy các hàm vào thời điểm chỉ định, hãy sử dụng trình xử lý onSchedule
do firebase-functions/v2/scheduler
cung cấp.
Các hàm này sử dụng Cloud Scheduler để gọi logic hàm tại thời điểm hoặc khoảng thời gian mà bạn xác định.
Trước khi bắt đầu
Để sử dụng giải pháp này trong dự án Firebase, dự án của bạn phải sử dụng gói giá Blaze. Nếu dự án chưa sử dụng gói Blaze, hãy nâng cấp gói giá.
Mặc dù phải thanh toán, nhưng bạn có thể kiểm soát được chi phí tổng thể vì mỗi công việc Cloud Scheduler có giá 0,10 đô la Mỹ mỗi tháng và mỗi Tài khoản Google được phép thực hiện 3 công việc mà không mất phí. Sử dụng công cụ tính giá của Blaze để tạo chi phí ước tính dựa trên mức sử dụng dự kiến của bạn.
Bạn phải bật API Cloud Scheduler cho dự án của mình. Tính năng này đã được bật cho hầu hết các dự án Firebase; bạn có thể xác minh trong Google Cloud Console.
Viết hàm được lên lịch
Trong Cloud Functions for Firebase, logic lên lịch nằm trong mã hàm của bạn, không có yêu cầu đặc biệt về thời gian triển khai. Ví dụ: để dọn dẹp các tài khoản người dùng không hoạt động một lần mỗi ngày, bạn có thể viết một hàm bắt đầu bằng các câu lệnh nhập sau:
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()
Sau đó, bạn có thể sử dụng onSchedule
để bắt đầu một tác vụ 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");
});
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 hỗ trợ cả cú pháp Unix Crontab và App Engine. Ví dụ: để sử dụng Crontab, hãy làm như sau:
Node.js
exports.scheduledFunctionCrontab = onSchedule("5 11 * * *", async (event) => {
// ...
});
Python
@scheduler_fn.on_schedule(schedule="5 11 * * *")
Triển khai hàm theo lịch
Khi bạn triển khai một hàm được lên lịch, một công việc của trình lập lịch biểu và một hàm HTTP sẽ được tạo tự động. CLI Firebase sẽ lặp lại tên hàm và bạn có thể xem công việc và hàm trong Google Cloud Console. Chủ đề được đặt tên theo quy ước sau:
firebase-schedule-function_name-region
Ví dụ:
firebase-schedule-accountcleanup-us-east1.
Vào thời gian đã lên lịch, tài khoản dịch vụ điện toán mặc định sẽ gọi hàm HTTP được liên kết. Điều này có nghĩa là chỉ công việc Cloud Scheduler liên kết mới có quyền chạy hàm.