Hàm lên lịch

Nếu bạn muốn lên lịch để các hàm chạy vào thời điểm cụ thể, 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 vào thời điểm hoặc khoảng thời gian mà bạn xác định.

Trước khi bắt đầu

Mặc dù các hàm đã lên lịch sẽ bị tính phí, nhưng bạn có thể quản lý được chi phí tổng thể vì mỗi Cloud Scheduler công việc có giá 0,10 USD/tháng và bạn được phép sử dụng 3 công việc miễn phí cho mỗi tài khoản Google. Hãy sử dụng công cụ tính giá Blaze để tạo chi phí ước tính dựa trên mức sử dụng dự kiến.

Bạn phải bật Cloud Scheduler API cho dự án của mình. API này sẽ được bật cho hầu hết các dự án Firebase; bạn có thể xác minh trong bảng điều khiển Google Cloud.

Viết hàm đã lên lịch

Trong Cloud Functions for Firebase, logic lập lịch nằm trong mã hàm của bạn, mà không có yêu cầu đặc biệt nào về thời gian triển khai. Ví dụ: để dọn dẹp tài khoản người dùng không hoạt động mỗi ngày một lần, 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/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 Cloud Scheduler việc cần làm:

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 syntax .Cloud Scheduler 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 đã lên lịch

Khi bạn triển khai một hàm đã lên lịch, một lệnh theo lịch biểu của trình lập lịch biểu và một hàm HTTP sẽ tự động được tạo. Firebase CLI sẽ lặp lại tên hàm, và bạn có thể xem công việc và hàm trong bảng điều khiển Google Cloud. Chủ đề này đượ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ụ mặc định của Compute Engine 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 được liên kết mới có quyền chạy hàm.