広告 RPA

コンカレンシー制御がない!そんな時に使えるBlobの競合防止代替案【Power Automate / Azure Logic Apps】

本記事をオススメしたい人

  • 組み込み Blob コネクタのコンカレンシー制御に課題を感じている方
  • HTTP トリガーや親子ワークフローの設計に興味がある方
  • Azure Logic Apps のワークフローでファイル操作時の競合やエラーを回避したい方

Azure Logic Apps には、Azure Blob Storage へのファイル追加や変更を検知する "Azure Blob Storage" コネクタが存在し、これには下記 2 つの種類が存在します。

コネクタ種類従量課金
(マルチテナント)
対応
Standard
(シングルテナント)
対応
マネージドコネクタ版
組み込みコネクタ版×

しかしながら、組み込みコネクタ版については、ワークフロー構築における重要機能のひとつであるコンカレンシー (同時実行数) 制御に対応していなかったので、その「代替案」を紹介するのが本記事の目的になります。

※トリガーは組み込みコネクタ側の “When a blob is added or updated” を想定しています。

代替案①:マネージドコネクタ版を使う

組み込みコネクタ版にコンカレンシー制御がないなら、あるものを使おう。

……という最もシンプルな解決策です。

後述の方法よりこちらの方が確実に簡単なので、使えるなら使ってください。

代替案②:HTTPコネクタを使用する

コンカレンシー制御を使いたい場合、基本的には当該トリガーが多重実行される状況が問題なのではなく、その後のアクションで競合が起きることが問題なのではないでしょうか。

例えば、トリガー起動時に「他の Azure Storage サービスにコピー & 元ファイルを削除」というアクションを設定している場合、ワークフローが複数同時起動している状態では「コピー & 元ファイルを削除」という処理がぶつかってエラーとなる可能性があります。

こういった状況では、問題の処理を別のワークフローに移して呼び出すことで解決します。

前提となる説明

どういうことかというと、まず「親」となる Logic Apps から「子」となる Logic Apps を呼び出すには、HTTP トリガーを使用する訳です。

それでいて、こちらの HTTP トリガーにはコンカレンシー制御の項目があります。

つまり、親から子ワークフローを呼び出す処理に変更することによって、親ワークフローがどれだけ多重実行されたとしても、子ワークフローが順次実行に直してくれます。

元々のワークフロー構成
親子関係のワークフロー構成

実際にワークフローを分割する手順

1. 子となるワークフローの作成

[Standard Logic Apps] – [ワークフロー] – [ワークフロー] – [追加] から、ワークフローの分割 (子の呼び出し) に使うワークフローをひとつ生成してください。

2. 元のワークフローからコードをコピー

[Standard Logic Apps] – [ワークフロー] – [ワークフロー] から親となるワークフローを開いた後、[開発者] – [コード] から JSON コードを『Ctrl + A』で全部コピーしてください。

コピーが完了したら、同じ手順で子ワークフローを開き、先程コピーしたコードを全て貼り付けます。
すると、デザイナー上でも親と同じワークフロー構成になっていると思います。

3. 子ワークフローの調整

これは人によってどこまでの範囲を子ワークフローとして分割するかが異なるので、一概に言うことは出来ないのですが、取り敢えず次の 2 点だけ覚えていただければと。

3-1. トリガーを HTTP に変更
3-2. トリガーのコンカレンシー制御を有効化して同時実行数を 1 に変更。

4. 親ワークフローで当該箇所を置き換え

親ワークフローに戻り、子ワークフローで実行予定の箇所を置き換えます。

“Invoke a workflow in this workflow app” というアクションが、子ワークフローを選択して呼び出すアクションになっているので選択します。

Azure Logic Apps で HTTPS エンドポイントを使用して呼び出したり、トリガーしたり、入れ子にしたりできるワークフローを作成する # 他のワークフローを呼び出す

まとめ:HTTPトリガーと親子ワークフロー構成で自動化を成功させよう!

ここまでの内容を参考に構築していただくことで、ワークフローを「親」と「子」という形に分割でき、子ワークフロー側で処理を制御することができます。

「親」と「子」に分ける構築については、他の構築でも良く使うので是非覚えておいてください。

-RPA