2015年7月29日水曜日

Azure LogicApps のトリガーを実装する

最近は時間があれば LogicApps 周りを触ろうとしていて、WF に通じる(危険な)何かを感じているのもあり、これからに期待したいものとなっています。

LogicApps のトリガーは一定期間単位で処理を繰り返したいといった場合にも利用する、LogicApps の基点となるものです。トリガーを利用しない場合は手動実行する形となります。

公式ドキュメントもありますのでそちらも参照してください。

現状、コードを書く以外の方法で LogicApps のトリガーを作成する手段は見当たりません。内容としては ApiApps の特殊版ですので、ApiApps を作成するのと同じ流れで作業することになりますが、何点かトリガーと認識してもらうためのルールがあります。

まず先にコードを記載します。

   1: public class TestController : ApiController
   2: {
   3:     [HttpGet]
   4:     [Route("api/TestTrigger")]
   5:     public HttpResponseMessage TestPollTrigger(string triggerState)
   6:     {
   7:         //サンプルなので何でもよい
   8:         var dt = DateTime.Now.Minute;
   9:         if (dt % 2 == 0)
  10:         {
  11:             return this.Request.EventTriggered();
  12:         }
  13:         else
  14:         {
  15:             return this.Request.EventWaitPoll(new TimeSpan(0, 1, 0));
  16:         }
  17:     }
  18:  
  19:     [HttpPut]
  20:     [Route("api/TestTrigger/{triggerId}")]
  21:     public HttpResponseMessage TestPushTrigger(
  22:         string triggerId,
  23:         [FromBody]TriggerInput<string, string> triggerInput)
  24:     {
  25:         return this.Request.PushTriggerRegistered(triggerInput.GetCallback());
  26:     }
  27: }

トリガーの方式としては、ポーリング型とプッシュ型の二つが用意されています。GET でアクセスするのがポーリング型で、PUT でアクセスするのがプッシュ型となります。ポーリング型の場合は、内部で何かしらの処理を行いその結果としてイベントを発生させるか、遅延させるかとなることが多いと思います。反対にプッシュ型ではイベント発生をコールバックしてあげることになります。

そしてトリガーとして認識されるための条件ですが、前述の HTTP メソッドの他に

  • メソッド名に trigger が含まれている(大小文字は問わない)
  • ポーリング型の場合は引数に triggerstate が含まれている
    プッシュ型の場合は引数に triggerId が含まれている

という命名規約を満たしている必要があります。ここを満たしたものだけが、LogicApps 側でトリガとして認識される仕組みです。

それ以外については ApiApps を作る時と同じです。

image

デプロイが成功すればこのように LogicApps でトリガとして利用できるようになります。

0 件のコメント:

コメントを投稿