3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

入れ子Logic Appsのトリガー部分をまとめようとしたけれど

Last updated at Posted at 2020-05-11

はじめに

複数あるLogic Appsを一つにまとめる案件にあたり、「 共通処理 の部分を 複数のトリガー(Logic App呼び出し処理) から叩かせればいいじゃん!」と思い立った。

そこまではよかったのだが、「せや! トリガーもわざわざ分けんで並列処理にしたらもっとまとめられるやん!! 天才か! 」と思い立ちまとめてみたら、予想通りにはまとまらなかった。

反省も兼ねて本記事にナレッジを残しておくものとする。

目次

  1. 状況詳細
  2. 何がしたかったのか?
  3. 何がダメだったというのか?
  4. 解決策(暫定)
  5. 別案求む

状況詳細

下図のように、複数のLogic Appsがあった。
それぞれのLogic Appsは取り扱うパラメータのみ異なる、共通化可能な処理を有していた。

スライド1.PNG

これを、Logic Appsを入れ子にする方法を参考に、下図のように共通部分をまとめるものとした。

スライド2.PNG

ここまでは文句なく良かった。別の開発現場に入っても応用可能な使える設計パターンだったと自負している。

何がしたかったのか?

問題は、この後、 トリガー に当たる部分を共通化した時、一長一短のトレードオフが発生してしまうことだった。

この複数のトリガーは、同一の種類のトリガー(例えばスケジューラなど)を利用していた。
よって、下図のようにトリガー部分も共通化してしまい、Logic Appsの呼び出し部分を並列処理にしようと考えた。

スライド3.PNG

何がダメだったというのか?

一見、下記のようなメリットがあり、良さそうに見える。

  • Logic Apps 呼び出し処理ごとにLogic Appsを作成しなくてよくなる
  • 一か所に呼び出し処理がまとまるため、パラメータ管理が楽になる

正常に動くパターンのみを考えれば悪くないかもしれないが、 並列処理のどれか一つが実行に失敗して再実行する場合、単純にデザイナーから実行するともう処理が成功している処理まで実行されてしまうのである!!

スライド4.PNG

スライド5.PNG

一定期間に重複して実行しても構わない処理ならばこれでも問題ないが、例えばどのLogic Appsの呼び出し処理も、1日1回だけにしたいなどという要件があった場合、脆くもこの企てはまほろばの夢に朽ちることとなるのである。

解決策(暫定)

案1:共通処理のLogic Appsを直接叩く

結局のところ、呼び出し側に設定してあるトリガーは、HTTPリクエストトリガーである。
そのため、リクエストツールで直接叩いてしまえば、ピンポイントで再実行できんこともない。

スライド6.PNG

案2:実行時にトリガーファイルを出力

共通処理で実行時に「実行済み」を示すトリガーファイルを出力しておく。
このトリガーファイルを、共通処理の最初のアクションで確認し、出力されていたら実行を中断する。

スライド7.PNG

スライド8.PNG

スライド9.PNG

案3:あきらめてLogic Apps呼び出し処理を分ける

あくまでデザイナーから手軽にたたきたければ、トリガーまでまとめるのはあきらめて、別個に呼び出し処理を作ってしまえばいい。

スライド10.PNG

スライド11.PNG

別案求む

あくまで、解決策は暫定案である。
さらにベターな解決方法を発見されている先達がいらっしゃれば、コメントなどでご指摘いただけると大変助かります。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?