Cloud Functionsを定期実行する
ゴール「スケジュールを指定→Functionsがその時間に実行」
結論
スケジュールジョブ作ったら、Functionsにちゃんと届きました。
これを見て進めます。
全体像と仕組み
この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ジョブとしてカウントされる(合ってるか分からんけど)。詳しくは以下を参照してください。
手順
Functionsをデプロイ
第2世代はCloudRun必要でアカウント権限が難しかった。
- トリガータイプ「Pub/Sub」
- トピック選択フィールドで、新規作成or選択(新規作成はID入力して作成でOK、チェックボックスは無視)
- トリガーのその他のオプションから、サービスアカウントを作成(自分はcloud-runという名前にした。)
※Eventarcはこのサービスアカウントを使用して、Pub/SubサービスからID トークンを使用してFunctionsを呼び出す
- ランタイムサービスアカウントを作成する(新規作成は名前入力して作成だけでOK)。このアカウントは、Cloud Functionsの関数の実行時に使用される。
- ランタイムサービスアカウントを選択し、デプロイ!!
ここまで来たらあとはもうサクッと終わる。
Cloud Schedulerでジョブを作成
cronについて知りたい方はこちら。
ジョブを実行
Cloud Schedulerから作ったジョブを選択し、強制実行する!
Cloud Functionsのログを見て、以下の画像のようになっていれば成功です!おめでとう🎊🎉🥳
参考文献
最後に
実は今、とあるモバイルアプリを作ってまして。その処理にスケジュールサーバーレス実行が必要でした。
実装できたらここでも紹介すると思うので、ぜひお楽しみに!!
Discussion