Функции расписания


Если вы хотите запланировать запуск функций в определенное время, используйте обработчик onSchedule предоставленный firebase-functions/v2/scheduler . Эти функции используют Cloud Scheduler для вызова функциональной логики в заданное вами время или интервалы.

Прежде чем начать

Чтобы использовать это решение в своем проекте Firebase, ваш проект должен находиться в тарифном плане Blaze. Если его еще нет в плане Blaze, обновите свой тарифный план .

Хотя выставление счетов требуется, вы можете рассчитывать на то, что общая стоимость будет управляемой, поскольку каждое задание Cloud Scheduler стоит 0,10 доллара США в месяц, и на одну учетную запись Google разрешено три задания бесплатно. Воспользуйтесь калькулятором цен Blaze, чтобы рассчитать стоимость на основе прогнозируемого использования.

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

Синтаксис Unix Crontab и App Engine поддерживается Cloud Scheduler . Например, чтобы использовать Crontab, сделайте что-то вроде этого:

Node.js

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

Питон

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

Развертывание запланированной функции

При развертывании запланированной функции задание планировщика и функция HTTP создаются автоматически. Интерфейс командной строки Firebase отображает имя функции, и вы можете просмотреть задание и функцию в консоли Google Cloud . Тема названа в соответствии со следующим соглашением:

firebase-schedule- function_name - region

Например:

firebase-schedule-accountcleanup-us-east1.

В запланированное время учетная запись службы вычислений по умолчанию вызывает связанную функцию HTTP. Это означает, что только связанное задание Cloud Scheduler имеет разрешение на запуск этой функции.