先日の記事で「たぶんWorkflows使うのが正解」と書いて自分でも気になってたので更に改修。
やること単純なのでだいたいなんとかなった。
- 実行対象を分割してStorageに保存
- ウン万件の処理対象から本日分をピックアップ
- さらにそれを一回のcloud runで処理できる大きさに分割
- 分割したリストをStorageにテキストで保存
- データ収集
- Storageからファイル一個取り出して消す
- 取り出したファイルをもとにデータ収集をやる
- 1ファイル分の処理が終わったら他にもファイルがないか探す
- あればおかわり、なければワークフロー終了
みたいなことをやっている。
時間制限のあるサービスを使っているので、処理を分割してくるくる回せばいいかくらいの感じ。
こんなんの定義書いて置き換えた。
cloud schedulerでやってたときは、ループ部分を定刻ごとに起動することでなんとかしてた。さすがにちょっとアホすぎる。
入りと出のところはAWSのStepFunctions(SFN)と同様で、jsonわたしてjson取り出す、でいけた。
大抵の場合はfunctionsでやるんだと思うが、callのところでurl渡すとその結果を取ったりもできるのがわかったのでcloud runで使ってた設定をそのままわたしておしまいにした。この部分はかなり便利。
問題点
いくつか懸案事項というか、どうしたらいいのかなーというのもある。
Workflows:ステップごとに何が起きてるのかを確認しづらい
これがSFNだと各ステップごとの入力と出力を表示できてたので、途中で何が起きてコケてるのか、とかがわかりやすかった。GCP全体に言えるけどとにかく気が利いてない。要件満たしてんだからそれでいいでしょ、とでも言いそうなくらいにぶっきらぼうだ。
競合なんだから同質化を目指してもいいと思うんだけど、必ずあと一歩のところが足りない。
logging:ただただ見づらい
構造化したログ吐かせてなんとかしたいが、メタ情報っぽい余計なもんばっかりダラダラぶら下がっていて、肝心のメッセージは都度クリックしないと見えない。使い方悪いのかなあ。
しばしば見に行くことになるはずの機能なんだけど萎えがち。
時間で絞るなどのフィルタ機能についてはAWSのCloudwatchよりも優秀かなと思う。
うーむ。