함수 예약


함수가 지정된 시간에 실행되도록 예약하려면 firebase-functions/v2/scheduler에서 제공하는 onSchedule 핸들러 이러한 함수는 Cloud Scheduler를 사용합니다. 를 사용하여 정의한 시간이나 간격으로 함수 로직을 호출할 수 있습니다.

시작하기 전에

Firebase 프로젝트에서 이 솔루션을 사용하려면 프로젝트에서 Blaze 요금제를 사용해야 합니다. Blaze 요금제를 아직 사용하고 있지 않다면 요금제를 업그레이드하세요.

청구가 필요하지만 전체 비용은 적당한 수준일 것으로 예상할 수 있습니다. 각 Cloud Scheduler 작업당 비용은 월 $0.10 (USD)이며 Google 계정당 채용 정보 3개를 무료로 제공할 수 있습니다. Blaze 가격 계산기를 사용하여 예상 사용량에 따른 예상 비용을 확인해 보세요.

다음에 Cloud Scheduler API를 사용 설정해야 합니다. 살펴보겠습니다 대부분의 Firebase 프로젝트에는 이미 사용 설정되어 있어야 합니다. 할 수 있습니다 Google Cloud 콘솔에서 확인할 수 있습니다.

예약 함수 작성

Cloud Functions for Firebase에서 예약 로직은 함수 코드에 있습니다. 배포할 수 있습니다 예를 들어 비활성 사용자 계정을 하루에 한 번 삭제하려면 다음과 같은 import 문으로 시작하는 함수를 작성하면 됩니다.

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

그런 다음 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");
});

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

Unix Crontab 및 App Engine 구문 모두 Cloud Scheduler에서 지원됩니다. 예를 들어 Crontab을 사용하려면 다음과 같이 하세요.

Node.js

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

Python

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

예약 함수 배포

예약 함수를 배포하면 스케줄러 작업과 HTTP 함수가 자동으로 생성됩니다. Firebase CLI는 함수 이름을 에코합니다. 또한 Cloud Shell에서 작업과 함수를 Google Cloud 콘솔. 주제 이름은 다음 규칙에 따라 지정됩니다.

firebase-schedule-function_name-region

예를 들면 다음과 같습니다.

firebase-schedule-accountcleanup-us-east1.

예약된 시간이 되면 기본 컴퓨팅 서비스 계정이 연결된 HTTP 함수입니다. 즉, 연결된 Cloud Scheduler 작업에만 함수를 실행할 권한이 있습니다.