함수 예약

지정된 시간에 함수를 실행하도록 예약하려면 firebase-functions/v2/scheduler 하위 패키지를 사용합니다. onSchedule 메서드는 Pub/Sub 주제를 만들고 Cloud Scheduler를 사용하여 원하는 일정에 따라 함수가 실행되도록 해당 주제의 이벤트를 트리거합니다.

시작하기 전에

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

결제는 필수지만 각 Cloud Scheduler 작업의 월별 비용은 $0.10(USD)이고 Google 계정당 작업이 3개까지 무료로 허용되므로 전반적인 비용은 부담스럽지 않은 수준일 것입니다. Blaze 가격 계산기를 사용하여 예상 사용량에 따른 예상 비용을 확인해 보세요.

프로젝트에서 Pub/Sub 및 Cloud Scheduler API를 사용 설정해야 합니다. 대부분의 Firebase 프로젝트에는 이미 사용 설정되어 있어야 하며 Google Cloud Platform 콘솔에서 사용 설정 여부를 확인할 수 있습니다.

예약 함수 작성

Firebase용 Cloud Functions에서 일정 예약 로직은 별다른 배포 시간 요구사항 없이 함수 코드에 상주하고 있습니다. 예약된 함수를 만들려면 onSchedule을 사용하여 Cloud Scheduler 태스크 시작합니다. 예를 들어 비활성 사용자 계정을 하루에 한 번 삭제하려면 다음과 같이 하면 됩니다.

// 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");
});

Unix Crontab 및 App Engine 구문은 모두 Cloud Scheduler에서 지원됩니다. 예를 들어 Crontab을 사용하여 예약 함수를 실행할 특정 시간대를 선택하려면 다음과 같이 작성하면 됩니다.

exports.scheduledFunctionCrontab = functions.pubsub.schedule('5 11 * * *')
  .timeZone('America/New_York') // Users can choose timezone - default is UTC
  .onRun((context) => {
  console.log('This will be run every day at 11:05 AM Eastern!');
  return null;
});

timeZone의 값은 tz 데이터베이스에 등록된 시간대 이름이어야 합니다. 지원되는 속성에 대한 자세한 내용은 Cloud Scheduler 참조를 확인하세요.

예약 함수 배포

예약 함수를 배포하면 관련 스케줄러 작업과 Pub/Sub 주제가 자동으로 만들어집니다. Firebase CLI는 주제 이름을 반영하며 GCP Console에서 작업과 주제를 볼 수 있습니다. 주제 이름은 다음 규칙에 따라 지정됩니다.

firebase-scheduled-function_name-region

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

firebase-scheduled-scheduledFunctionCrontab-us-east1.