DevelopersIO RSS feed【非公式】 on Nostr: ...
【Dataformワークフローをシェルスクリプトでポーリングしながら動かす】
やりたいこと Dataformワークフローを起動した後、実行状態をポーリングして完了したら次のDataformワークフローを動かすということがやりたかったです。 というのも、以前作成したシェルスクリプトはどんどんDataformワークフローを起動していきますが、Dataformワークフロー実行APIは非同期APIとなり実行後は実行状態を返してくるだけで完了したかどうかは実行状態を問い合わせるAPIを打って確認しないとわかりません。 一つのワークフローの実行が完了したら次のワークフローを実行する、ということを自動化したかったのでワークフローの実行状態をポーリングして、ワークフロー実行完了が返ってきたら次のワークフローを実行するというシェルスクリプトを実装しました。前日データ作成完了後に次の日のデータを作成する必要がある、というユースケースの時にこのシェルスクリプトは向いています。 また、開始日、終了日を引数にしていますが配列でコンパイル変数の内容を持たせてそれを反復処理する、なんていうことにも少し手を入れれば使えると思います。 処理の流れ シェルスクリプト全文は以下になります。 ポーリングを行なっている以下の箇所が、このシェルスクリプトの肝になるところです。 この処理があるので、実行したDataformワークフローが実行完了したら、次のコンパイル結果を再びDataformワークフローを実行することができます。 Dataformワークフローを実行したレスポンスのnameパラメタを引数に以下のAPIを叩くとDataformワークフローの実行状態(state)を取得することができます。 Dataformワークフローの実行状態は以下のstateのどれかになります。 今回の実装では、SUCCEEDEDだったら後続処理実行、FAILEDだったらシェルスクリプト自体を終了するようにしています。 state 概要 STATE_UNSPECIFIED 初期値。使用されることはない RUNNING ワークフローが実行中 SUCCEEDED 成功 CANCELLED キャンセル FAILED 失敗 CANCELING キャンセル中 またPOLLING_INTERVAL変数でポーリング間隔を調整することができます。 Dataformの実行結果がFAILEDとSUCCEEDED以外になってしまった場合に無限ループしないようにポーリングのタイムアウト時間もTIMEOUT_LIMITで設定をしております。適宜ワークロードに則って値を調整すると良いと考えます。 まとめ 前回作成したシェルスクリプトはポーリング処理をしないでとにかく指定日付分Dataformワークフローを実行するというものでした。 DataformをAPIで実行する場合、前後関係がある実行をしたい場合は今回のようなポーリングをしてあげる必要があります。 この記事がどなたかのお役に立てば嬉しいです。それではまた。 使用しているAPI コンパイルAPI ワークフロー実行API 実行ワークフロー取得API
https://dev.classmethod.jp/articles/20240620-df18-polling/Published at
2024-06-20 12:13:46Event JSON
{
"id": "c6fccb1ae1fbba6d0b2d5e31ebaa1cef16392e5e942f4e41a7323929c545aa76",
"pubkey": "d735231e8eeb2d49becea0ebadf7cde4f81807ddc6d7389890f5b2067e099183",
"created_at": 1718878426,
"kind": 1,
"tags": [
[
"r",
"https://dev.classmethod.jp/articles/20240620-df18-polling/"
],
[
"proxy",
"https://dev.classmethod.jp/feed/#https://dev.classmethod.jp/articles/20240620-df18-polling/",
"rss"
]
],
"content": "【Dataformワークフローをシェルスクリプトでポーリングしながら動かす】\nやりたいこと Dataformワークフローを起動した後、実行状態をポーリングして完了したら次のDataformワークフローを動かすということがやりたかったです。 というのも、以前作成したシェルスクリプトはどんどんDataformワークフローを起動していきますが、Dataformワークフロー実行APIは非同期APIとなり実行後は実行状態を返してくるだけで完了したかどうかは実行状態を問い合わせるAPIを打って確認しないとわかりません。 一つのワークフローの実行が完了したら次のワークフローを実行する、ということを自動化したかったのでワークフローの実行状態をポーリングして、ワークフロー実行完了が返ってきたら次のワークフローを実行するというシェルスクリプトを実装しました。前日データ作成完了後に次の日のデータを作成する必要がある、というユースケースの時にこのシェルスクリプトは向いています。 また、開始日、終了日を引数にしていますが配列でコンパイル変数の内容を持たせてそれを反復処理する、なんていうことにも少し手を入れれば使えると思います。 処理の流れ シェルスクリプト全文は以下になります。 ポーリングを行なっている以下の箇所が、このシェルスクリプトの肝になるところです。 この処理があるので、実行したDataformワークフローが実行完了したら、次のコンパイル結果を再びDataformワークフローを実行することができます。 Dataformワークフローを実行したレスポンスのnameパラメタを引数に以下のAPIを叩くとDataformワークフローの実行状態(state)を取得することができます。 Dataformワークフローの実行状態は以下のstateのどれかになります。 今回の実装では、SUCCEEDEDだったら後続処理実行、FAILEDだったらシェルスクリプト自体を終了するようにしています。 state 概要 STATE_UNSPECIFIED 初期値。使用されることはない RUNNING ワークフローが実行中 SUCCEEDED 成功 CANCELLED キャンセル FAILED 失敗 CANCELING キャンセル中 またPOLLING_INTERVAL変数でポーリング間隔を調整することができます。 Dataformの実行結果がFAILEDとSUCCEEDED以外になってしまった場合に無限ループしないようにポーリングのタイムアウト時間もTIMEOUT_LIMITで設定をしております。適宜ワークロードに則って値を調整すると良いと考えます。 まとめ 前回作成したシェルスクリプトはポーリング処理をしないでとにかく指定日付分Dataformワークフローを実行するというものでした。 DataformをAPIで実行する場合、前後関係がある実行をしたい場合は今回のようなポーリングをしてあげる必要があります。 この記事がどなたかのお役に立てば嬉しいです。それではまた。 使用しているAPI コンパイルAPI ワークフロー実行API 実行ワークフロー取得API\nhttps://dev.classmethod.jp/articles/20240620-df18-polling/",
"sig": "6e5545719925a54865582afce051a2d15df3a9391d5d9418fda61d54f02e6319c8a6d388d74f72474c263d87f3ab121077e9d916f0336177e90a0e8359ed5650"
}