🎅

WorkFlows導入の検討を加速した話

2024/12/25に公開

はじめに

Applibot Advent Calendar 2024」の最終日25日目の記事になります

いよいよ12月25日の最後のアドベントカレンダーですね!
クリスマスにカップルが楽しそうなのを横目に技術記事を書くのも悪くないですね

記念すべき最終日は、GCPのworkFlows導入の検討を加速した話をしたいと思います。

この記事を執筆している時点ではまだ導入完了しておらず、検討段階となります。

背景

運用しているシステム

外部のDBと常に同期をしながら、稼動しているマッチングプラットフォーム

外部DBとの同期実現法方

3つのバッチを動かして同期を実現
それぞれ責務は下記の通りで、cloud scheduler(5分)✖️cloud run jobで動かしています

  • バッチA
    • 外部DBからデータを取得し、当システムに保存する
  • バッチB
    • 当システムには存在しないユーザーを判別し、新規ユーザーとして当システムに保存
  • バッチC
    • 同期完了したことを知らせる

課題

  • バッチA,B,Cが並列で動いている
    • バッチA → B → Cの順番で動かしたい
    • Aで変更したステータスに対して、Bが、Bで変更したステータスに対してCが変更を加えたい
    • 並列で動いているため、少し非効率的に動いている(そのため同期時間が少し長い)
  • 追加要件としてチャットルームも作成してほしい
    • 新たにバッチDが追加される(またさらに同期時間が伸びてしまう)

やりたいこと

以下のように並列で動いているものを

以下のように直列に動かしたい

解決策

gcpのworkFlowsを導入すれば、バッチの実行順序を制御できそう

導入後

まだ導入はできていないので想定になりますが、以下のようなフローになります
※DBは全て同じDBです(それぞれの処理がわかりやすいように図では分けています)

このようにバッチの実行に順番を持たせることで、効率的に同期を処理することができ、同期時間も短縮できます。

調査内容

設定ファイル

workFlowsはyaml or jsonで設定ファイルを書きます

main:
  params: [input]
  steps:
    - checkSearchTermInInput:
        switch:
          - condition: '${"searchTerm" in input}'
            assign:
              - searchTerm: '${input.searchTerm}'
            next: readWikipedia
    - getLocation:
        call: sys.get_env
        args:
          name: GOOGLE_CLOUD_LOCATION
        result: location
    - setFromCallResult:
        assign:
          - searchTerm: '${text.split(location, "-")[0]}'
    - readWikipedia:
        call: http.get
        args:
          url: 'https://en.wikipedia.org/w/api.php'
          query:
            action: opensearch
            search: '${searchTerm}'
        result: wikiResult
    - returnOutput:
        return: '${wikiResult.body[1]}'

引用元
デプロイする時はこの設定ファイルを指定して、デプロイします

料金形態

内部手順 月額
最初の 5,000 ステップ 無料
5,000 ステップ以降 1,000 ステップあたり $0.01
外部向けの手順 月額
最初の 2,000 ステップ 無料
2,000 ステップ以降 1,000 ステップあたり $0.025

内部手順
Google Cloud内で完結するAPI呼び出しやサービス間のやり取りを指します

  • Cloud Functions、Cloud Run などの Google Cloud サービスを呼び出す
  • Cloud Storage にデータをアップロードする
  • Cloud SQL や BigQuery などのデータサービスと連携する

外部向けの手順
Google Cloud外のサービスやエンドポイントへのAPI呼び出しを行う場合を指します

  • サードパーティAPIの呼び出し
  • Google Cloud外のREST APIや外部データベースへの接続
  • 外部のSaaSサービスを利用する場合など

かなり安いですね

補足

workFlowsにはいろいろな機能があるので、ぜひ見てみてください

終わりに

簡単にですが、workFlowsの導入を検討した話でした!
これから実際に導入していくのが楽しみです。

負債を解消しつつ、新しい技術挑戦ができるって一石二鳥ですね

それではみなさん、メリークリスマス!🎅

Discussion