今回説明する内容
Azure Logic Apps では、Azure Blob Storage へのファイル追加や変更を検知する “Azure Blob Storage” コネクタというものが存在します。
Azure Logic Apps を使用してワークフローから Azure Blob Storage に接続します。…
こちらのコネクタには従量課金 (マルチテナント) プランでも利用可能なマネージド コネクタ版と、Standard (シングルテナント) プラン限定で利用可能な組み込みコネクタ版が存在します。
<マネージド コネクタ>
<組み込みコネクタ>
しかしながら、組み込みコネクタ版に関しては Logic Apps における重要機能のひとつでもあるコンカレンシー (同時実行数) 制御に対応していなかったので、「なんか回避策って無いの?」って感じで回避策を紹介するのが今回の記事の目的になります。
ちなみに、トリガーは組み込みコネクタ側の “When a blob is added or updated” を想定しています。
回避策 1 : マネージド コネクタ版を利用する
組み込みコネクタ版にコンカレンシー制御が無いなら、あるものを使えばいいじゃない。
(マリー・アントワネット風)
後から提案する方法よりこちらの方が確実に簡単なので、使えるなら使ってください。
回避策 2 : HTTP コネクタを使用する
コンカレンシー制御を掛けたい場合という場合、基本的には当該トリガーが多重実行されるという状況が問題なのではなく、その後のアクションで競合が起きることが問題なのではないでしょうか。
例えば、トリガー起動時に「他の Azure Storage サービスにコピー & 元ファイルを削除」というアクションを設定している場合、ワークフローが複数同時起動している状態では「コピー & 元ファイルを削除」という部分がぶつかってエラーが生じるといった状況が考えられます。
こういった状況では、問題の処理を別のワークフローに移して呼び出すことで解決します。
前提となる説明
どういうことかというと、まず「親」となる Logic Apps から「子」となる Logic Apps を呼び出すには、HTTP トリガーを使用する訳です。
Azure Logic Apps で HTTPS 経由の受信要求を受信するワークフローを作成します。…
それでいて、こちらの HTTP トリガーにはコンカレンシー制御の項目があります。
つまるところ、親から子ワークフローを呼び出すという処理に変更することによって、親ワークフローでどれだけ多重実行されたとしても、子ワークフローが順次実行に直してくれます。
<元々のワークフロー構成>
<親子関係のワークフロー構成>
実際の手順
1. 子となるワークフローの作成
[Standard Logic Apps] – [ワークフロー] – [ワークフロー] – [追加] から、ワークフローの分割 (子の呼び出し) に使うワークフローをひとつ生成してください。2. 元のワークフローからコードをコピー
コピーが完了したら、同じ手順で子ワークフローを開き、先程コピーしたコードを全て貼り付けます
すると、デザイナー上でも親と同じワークフロー構成になっていると思います。
3. 子ワークフローの調整
これは人によってどこまでの範囲を子ワークフローとして分割するかが異なるので、一概に言うことは出来ないのですが、取り敢えず次の 2 点だけ覚えていただければと。
3-1. トリガーを HTTP に変更
3-2. トリガーのコンカレンシー制御を有効化して同時実行数を 1 に変更。
4. 親ワークフローで当該箇所を置き換え
親ワークフローに戻り、子ワークフローで実行予定の箇所を置き換えます。
“Invoke a workflow in this workflow app” というアクションが、子ワークフローを選択して呼び出すアクションになっているので選択します。下記の公式情報が参考になります。
Azure Logic Apps で HTTPS 経由の受信要求を受信するワークフローを作成します。…
最後に
以上までを実行していただくことで、ワークフローを「親」と「子」という形に分割でき、子ワークフロー側で処理を制御することができますので、お試しいただければと思います。