Azure Logic Appsを利用してみる

#はじめに
AzureのPaaSサービスであるLogic Appsが2016年7月にGAしました。
今回はLogic Appsの基本機能だけを使ってSlackへの通知をやってみました。

#構成
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/8d6dea35-ebd8-cd71-8f05-92bf99a333f2.png)


オンプレ側には会社で余っているRaspberry Pi 2 Model Bにraspbianを入れています。
今回はAzure Service Busへの送信にはPythonを使ってみます。

AzureはLogic Appsと、メッセージのやり取りを行うService Busがあります。

Logic Appsにはソーシャルへの通知先としてTwitterやSlack等が選べるのですが、今回はSlackを選択しました。

#Python側の準備
rapbianには既にPythonはインストール済みで、各種モジュールを追加するpipコマンドも入っているので、後は以下のコマンドを入れてAzure SDKの利用準備をすればOKです。

```
$ sudo pip install azure
```

上記コマンドで、Python用のAzure SDKがインストールされ、利用可能となります。

#Logic Appsの作成
ポータル画面からさくっと作成します。
最近、東日本、西日本リージョンでも使えるようになりました。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/07369b86-9f1d-c3d1-ad2b-5575aae6c01e.png)

#Service Busの作成
こちらもポータル画面からさくっと作成します。
価格プランは検証目的なので一番安いBasic、リージョンは東日本で作成しました。

![image](https://qiita-image-store.s3.amazonaws.com/0/137436/f1e98337-e172-6c14-fb10-e6c510697282.png)

##Queueの作成
キューの名前はpythontest、他の項目は検証目的なのでデフォルトのまま作成します。

![image](https://qiita-image-store.s3.amazonaws.com/0/137436/500473c2-aea3-da0e-c400-8e8a43f2fe3f.png)

##アクセス権の設定
作成したキューのShared access policiesを設定します。
ポリシー名「user」に対してキューの送信と参照権限を与えます。

![image](https://qiita-image-store.s3.amazonaws.com/0/137436/81eab6fd-aac5-9e93-56ac-88ab07ef6b5e.png)

作成されたShared access policiesのPolicy name(user)とPRIMARY KEYの内容はPython側のコードに埋め込むため控えておきます。
CONNECTION STRING-PRIMARY KEYの内容はLogic Apps側で必要になりますので、こちらも控えておきます。

![image](https://qiita-image-store.s3.amazonaws.com/0/137436/b77d5ff4-04c1-7e42-65e9-e220f6b695d6.png)

#Logic Appsのロジック作成
デプロイして最初にLogic Appsの「編集」を押すとLogic Appsデザイナーが開くので、今回は「空のLogicApp」を選択します。
デザイナー画面が開くので、先ずはService Bus Queueのトリガー設定。
「Service Bus - When a message is received in a queue」を選んで、接続名は適当に。接続文字列は、先ほど作ったSercice BusのCONNECTION STRINGを入力するのですが、そのCONNECTION STARINGの中の要素の内最後にある「EntityPath」は除きます。
(Endpoint,ShareAccessKeyName,SharedAccessKeyだけ含めます)

![image](https://qiita-image-store.s3.amazonaws.com/0/137436/d5df4ef2-3016-8642-2689-91e564b210a9.png)

続いて「キュー名」にはService Busに作成したキューの名前を入れ、頻度と間隔は適当に設定します。

![image](https://qiita-image-store.s3.amazonaws.com/0/137436/e99d908a-471c-8eb5-3cd6-d568eb6cdbf3.png)

次にアクションを追加します。
「＋新しいステップ」から「アクションの追加」をクリック。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/d3c57f15-7b5b-d9c7-cb38-3b0cf1ed2092.png)

Slackを選択すると、追加されました。

![image](https://qiita-image-store.s3.amazonaws.com/0/137436/adf61468-f9b4-405a-4929-35e5609b9a8a.png)

その後Slackへのサインインが完了するとSlackへ投稿するチャンネル名と、投稿するメッセージを入力することができます。
今回はMESSAGE TEXT欄は簡単に画面上からService Busから送られてきたコンテンツ内容をそのまま使うことにします。

![image](https://qiita-image-store.s3.amazonaws.com/0/137436/06f5b541-e49b-b202-9f99-16f934304677.png)

最後に「保存」を忘れないようにしましょう。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/34d14b49-8e31-0942-95e6-3af25b997228.png)

#Python送信側
送信側のプログラム例です。
service_namespaceには作成したService Busの名前を入れます。
share_access_key_nameとshared_access_key_valueには先程控えたPolicy nameとPRIMARY KEYの内容をペーストします。
bus_service.send_eventの第一引数は先程作成したキューの名前(pythontest)を設定します。

```py:sender.py
# -*- coding: utf-8 -*-

import json
from azure.servicebus import ServiceBusService, Message, Queue

if __name__ == '__main__':
        bus_service = ServiceBusService(
          service_namespace='ktkrqiitatest',
          shared_access_key_name='user',
          shared_access_key_value='XXXXXXXXXXXXXXXXXXXXXXXXXX')

        msg = Message('Hello! World')

        bus_service.send_event('pythontest', msg)
```

#プログラムの実行

それではPythonスクリプトを実行してみます。
```
$ python sender.py
```

ポータル画面上で正常に実行されたのを確認します。

![image](https://qiita-image-store.s3.amazonaws.com/0/137436/47bd98d6-be3a-3662-ddfa-80f8c7d46303.png)

ちゃんとSlackの#logicappstestチャンネルにもBOTからの通知メッセージが届きました！

![image](https://qiita-image-store.s3.amazonaws.com/0/137436/90a1593a-3433-1c81-0e8f-720b936dfc68.png)

#おわりに
今回は非常に簡単な仕組みでAzure Logic Appsを使ってみましたが、Azure側は全てUI操作だけで完結できました。
凝った分岐やアクションを組む場合には直接JSONのコードを編集する必要がありますが、その辺りはまた別の機会に試してみたいと思います。