先日の記事で「たぶんWorkflows使うのが正解」と書いて自分でも気になってたので更に改修。
やること単純なのでだいたいなんとかなった。

  1. 実行対象を分割してStorageに保存
    • ウン万件の処理対象から本日分をピックアップ
    • さらにそれを一回のcloud runで処理できる大きさに分割
    • 分割したリストをStorageにテキストで保存
  2. データ収集
    • Storageからファイル一個取り出して消す
    • 取り出したファイルをもとにデータ収集をやる
  3. 1ファイル分の処理が終わったら他にもファイルがないか探す
    • あればおかわり、なければワークフロー終了

みたいなことをやっている。
時間制限のあるサービスを使っているので、処理を分割してくるくる回せばいいかくらいの感じ。

こんなんの定義書いて置き換えた。

cloud schedulerでやってたときは、ループ部分を定刻ごとに起動することでなんとかしてた。さすがにちょっとアホすぎる。

入りと出のところはAWSのStepFunctions(SFN)と同様で、jsonわたしてjson取り出す、でいけた。
大抵の場合はfunctionsでやるんだと思うが、callのところでurl渡すとその結果を取ったりもできるのがわかったのでcloud runで使ってた設定をそのままわたしておしまいにした。この部分はかなり便利。

問題点

いくつか懸案事項というか、どうしたらいいのかなーというのもある。

Workflows:ステップごとに何が起きてるのかを確認しづらい

これがSFNだと各ステップごとの入力と出力を表示できてたので、途中で何が起きてコケてるのか、とかがわかりやすかった。GCP全体に言えるけどとにかく気が利いてない。要件満たしてんだからそれでいいでしょ、とでも言いそうなくらいにぶっきらぼうだ。
競合なんだから同質化を目指してもいいと思うんだけど、必ずあと一歩のところが足りない。

logging:ただただ見づらい

構造化したログ吐かせてなんとかしたいが、メタ情報っぽい余計なもんばっかりダラダラぶら下がっていて、肝心のメッセージは都度クリックしないと見えない。使い方悪いのかなあ。
しばしば見に行くことになるはずの機能なんだけど萎えがち。
時間で絞るなどのフィルタ機能についてはAWSのCloudwatchよりも優秀かなと思う。

うーむ。