#はじめに
AzureのPaaSサービスであるLogic Appsが2016年7月にGAしました。
今回はLogic Appsの基本機能だけを使ってSlackへの通知をやってみました。
オンプレ側には会社で余っている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の作成
ポータル画面からさくっと作成します。
最近、東日本、西日本リージョンでも使えるようになりました。
#Service Busの作成
こちらもポータル画面からさくっと作成します。
価格プランは検証目的なので一番安いBasic、リージョンは東日本で作成しました。
##Queueの作成
キューの名前はpythontest、他の項目は検証目的なのでデフォルトのまま作成します。
##アクセス権の設定
作成したキューのShared access policiesを設定します。
ポリシー名「user」に対してキューの送信と参照権限を与えます。
作成されたShared access policiesのPolicy name(user)とPRIMARY KEYの内容はPython側のコードに埋め込むため控えておきます。
CONNECTION STRING-PRIMARY KEYの内容はLogic Apps側で必要になりますので、こちらも控えておきます。
#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だけ含めます)
続いて「キュー名」にはService Busに作成したキューの名前を入れ、頻度と間隔は適当に設定します。
次にアクションを追加します。
「+新しいステップ」から「アクションの追加」をクリック。
Slackを選択すると、追加されました。
その後Slackへのサインインが完了するとSlackへ投稿するチャンネル名と、投稿するメッセージを入力することができます。
今回はMESSAGE TEXT欄は簡単に画面上からService Busから送られてきたコンテンツ内容をそのまま使うことにします。
#Python送信側
送信側のプログラム例です。
service_namespaceには作成したService Busの名前を入れます。
share_access_key_nameとshared_access_key_valueには先程控えたPolicy nameとPRIMARY KEYの内容をペーストします。
bus_service.send_eventの第一引数は先程作成したキューの名前(pythontest)を設定します。
# -*- 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
ポータル画面上で正常に実行されたのを確認します。
ちゃんとSlackの#logicappstestチャンネルにもBOTからの通知メッセージが届きました!
#おわりに
今回は非常に簡単な仕組みでAzure Logic Appsを使ってみましたが、Azure側は全てUI操作だけで完結できました。
凝った分岐やアクションを組む場合には直接JSONのコードを編集する必要がありますが、その辺りはまた別の機会に試してみたいと思います。