☁️

Cloud Functionsを定期実行する

2024/01/28に公開

ゴール「スケジュールを指定→Functionsがその時間に実行」

結論

スケジュールジョブ作ったら、Functionsにちゃんと届きました。

これを見て進めます。
https://cloud.google.com/scheduler/docs/tut-pub-sub?hl=ja

全体像と仕組み

この3つを繋げる。

以下はチュートリアル触っただけの自分の簡単なイメージです。

Cloud Scheduler

実行する頻度とトピックIDを含めたジョブを作成して、トピックにメッセージを送る。自分はメッセージを「start job」にした。何でもいい。

Cloud Pub/Sub

この人はトピックを取りまとめてます。トピックIDごとにSchedulerからメッセージをもらい、そのトピックIDをサブスクライブしているFunctionsを実行するやつ(実際はEventarcかな、小さいことは気にしない!)。

Cloud Functions

サーバーレスで実行できるとこ。今回はトリガータイプをPub/Subにしたからスケジュール実行できる。

かかるお金

1アカウントにつき、3つのジョブまで無料。ジョブは、スケジュール設定したもののことで、頻度は関係ないし、複数の関数が同じトピックIDにあればジョブは一つにカウントされる(合ってるか分からんけど)。つまり、1分に1回動くジョブでも1日に一回動くジョブでも1ジョブとしてカウントされる(合ってるか分からんけど)。詳しくは以下を参照してください。
https://cloud.google.com/scheduler/pricing?hl=ja

手順

Functionsをデプロイ

第2世代はCloudRun必要でアカウント権限が難しかった。

  1. トリガータイプ「Pub/Sub」
  2. トピック選択フィールドで、新規作成or選択(新規作成はID入力して作成でOK、チェックボックスは無視)
  3. トリガーのその他のオプションから、サービスアカウントを作成(自分はcloud-runという名前にした。)

※Eventarcはこのサービスアカウントを使用して、Pub/SubサービスからID トークンを使用してFunctionsを呼び出す

  1. ランタイムサービスアカウントを作成する(新規作成は名前入力して作成だけでOK)。このアカウントは、Cloud Functionsの関数の実行時に使用される。
  1. ランタイムサービスアカウントを選択し、デプロイ!!

ここまで来たらあとはもうサクッと終わる。

Cloud Schedulerでジョブを作成

cronについて知りたい方はこちら。
https://cloud.google.com/scheduler/docs/configuring/cron-job-schedules?hl=ja#cron_job_format

ジョブを実行

Cloud Schedulerから作ったジョブを選択し、強制実行する!

Cloud Functionsのログを見て、以下の画像のようになっていれば成功です!おめでとう🎊🎉🥳

参考文献

https://cloud.google.com/scheduler/docs/tut-pub-sub?hl=ja
https://zenn.dev/nori_maki/articles/c8aee95a442ad9
https://cloud.google.com/scheduler/docs/configuring/cron-job-schedules?hl=ja#cron_job_format
https://zenn.dev/nori_maki/articles/c8aee95a442ad9

最後に

実は今、とあるモバイルアプリを作ってまして。その処理にスケジュールサーバーレス実行が必要でした。
実装できたらここでも紹介すると思うので、ぜひお楽しみに!!

Discussion