指定した時間に関数が実行されるようにスケジュールを設定する場合は、onSchedule
ハンドラを使用して、トピックに関するイベントを Cloud Scheduler でトリガーする Pub/Sub トピックを作成します。
始める前に
Firebase プロジェクトでこのソリューションを使用するには、プロジェクトに Blaze 料金プランを適用している必要があります。Blaze プランをまだ適用していない場合は、料金プランをアップグレードしてください。
有償にはなりますが、Cloud Scheduler の各ジョブのコストは月額 $0.10(USD)です。また、Google アカウントごとに 3 つのジョブを無料で使用できます。そのため、全体的なコストとしては比較的手頃な範囲に抑えることができます。Blaze の料金計算ツールを使用すると、予想使用量に基づく料金見積もりを作成できます。
プロジェクトで Pub/Sub API と Cloud Scheduler API を有効にする必要があります。これらはほとんどの Firebase プロジェクトですでに有効になっています。Google Cloud Platform Console でご確認ください。
スケジュール設定された関数を記述する
Cloud Functions for Firebase では、スケジューリング ロジックは関数コード内に記述します。デプロイ時の特別な要件はありません。スケジュール設定された関数を作成するには、functions.pubsub.schedule('your schedule').onRun((context))
を使用します。たとえば、App Engine cron.yaml 構文を使用して 5 分ごとに関数を実行するには、次のように記述します。
exports.scheduledFunction = functions.pubsub.schedule('every 5 minutes').onRun((context) => {
console.log('This will be run every 5 minutes!');
return null;
});
Cloud Scheduler では、Unix の Crontab と App Engine 構文の両方がサポートされています。たとえば、Crontab を使用して、スケジュール設定された関数を実行する特定のタイムゾーンを選択するには、次のように記述します。
exports.scheduledFunctionCrontab = functions.pubsub.schedule('5 11 * * *')
.timeZone('America/New_York') // Users can choose timezone - default is America/Los_Angeles
.onRun((context) => {
console.log('This will be run every day at 11:05 AM Eastern!');
return null;
});
timeZone
の値は、tz database から取得したタイムゾーン名にする必要があります。対応しているプロパティの詳細については、Cloud Scheduler リファレンスをご覧ください。
スケジュール設定された関数をデプロイする
スケジュール設定された関数をデプロイすると、関連するスケジューラ ジョブと Pub/Sub トピックが自動的に作成されます。Firebase CLI にトピック名がエコーされます。GCP コンソール でもジョブとトピックを確認できます。トピックには、次の規則に従って名前が付けられます。
firebase-scheduled-function_name-region
例:
firebase-scheduled-scheduledFunctionCrontab-us-east1