Cloud Schedulerを利用して非同期なジョブを順次実行する(前編)

  • #Cloud Scheduler
  • #Google Cloud Platform

こんにちは。開発チームの南です。 今回は、Cloud Schedulerを利用して複数の非同期なバッチジョブを順次処理する方法について紹介します。

はじめに

クラウドサービスを利用して開発をしていると非同期なジョブを順次実行したいケースがあると思います。 例えばGCPのETLサービスであるDataflowでバッチジョブを実行した後にCloud Buildを実行したり、オンプレミスのバッチサーバでバッチジョブをした後にCloud Functionsを起動したいなどです。

マネージドなジョブ管理サービスとしてはApache Airflowの実行環境であるCloud Composerがありますが、開発コストや料金などの問題があります。

また起動しているジョブの最後に次のジョブを起動するよう設定する方法もありますが、ジョブが密結合になってしまいます。

そこで今回は、Cloud Schedulerを使ってジョブとジョブを疎結合に保ちながら、非同期なバッチジョブを順次実行する方法を紹介します。

考え方

ジョブの実行状態を確認するcronを一定間隔で実行します。 ジョブが完了したら次のジョブを実行します。

実装方法

以下の二つのエンドポイントを用意します。 エンドポイント1・・・ジョブを起動し、成功したらCronを起動する エンドポイント2・・・Cronから通知を受け取り、ジョブの状態を確認する。ジョブの状態が完了ならCronを削除し、エンドポイント1へ通知する

以下のようなシーケンスになります。 非同期ジョブの実行シーケンス

ジョブは用途に応じて増やしたり順番を入れ替えたりすることが可能です。

注意事項として、実行するジョブは実行状態が確認できなければいけません。 GCPのマネージドサービスであるDataflowやCloud Buildには実行状態を確認するREST API が用意されているため、それを利用しますが、オンプレミスのバッチジョブの場合は、実行状態を確認する方法を用意しなければなりません。

最後に

今回は、Cloud Schedulerを使って非同期なバッチジョブを順次実行するための考え方と簡易的なシーケンスを紹介しました。 後編では、実装例を見ながらCloud Dataflowのバッチジョブの後にCloud Buildを実行する方法を紹介しようと思います。

CURUCURUでは、仲間になってくれるエンジニアの方を募集しております! 少しでも興味をお持ちいただけたら、気軽にカジュアル面談しませんか? ご応募お待ちしております! https://www.wantedly.com/companies/curucuru