Python
Azure
AzureLogicApps

Azure Logic Appsを利用してみる

More than 1 year has passed since last update.


はじめに

AzureのPaaSサービスであるLogic Appsが2016年7月にGAしました。

今回はLogic Appsの基本機能だけを使ってSlackへの通知をやってみました。


構成

image

オンプレ側には会社で余っている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


Service Busの作成

こちらもポータル画面からさくっと作成します。

価格プランは検証目的なので一番安いBasic、リージョンは東日本で作成しました。

image


Queueの作成

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

image


アクセス権の設定

作成したキューのShared access policiesを設定します。

ポリシー名「user」に対してキューの送信と参照権限を与えます。

image

作成されたShared access policiesのPolicy name(user)とPRIMARY KEYの内容はPython側のコードに埋め込むため控えておきます。

CONNECTION STRING-PRIMARY KEYの内容はLogic Apps側で必要になりますので、こちらも控えておきます。

image


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

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

image

次にアクションを追加します。

「+新しいステップ」から「アクションの追加」をクリック。

image

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

image

その後Slackへのサインインが完了するとSlackへ投稿するチャンネル名と、投稿するメッセージを入力することができます。

今回はMESSAGE TEXT欄は簡単に画面上からService Busから送られてきたコンテンツ内容をそのまま使うことにします。

image

最後に「保存」を忘れないようにしましょう。

image


Python送信側

送信側のプログラム例です。

service_namespaceには作成したService Busの名前を入れます。

share_access_key_nameとshared_access_key_valueには先程控えたPolicy nameとPRIMARY KEYの内容をペーストします。

bus_service.send_eventの第一引数は先程作成したキューの名前(pythontest)を設定します。


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

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

image


おわりに

今回は非常に簡単な仕組みでAzure Logic Appsを使ってみましたが、Azure側は全てUI操作だけで完結できました。

凝った分岐やアクションを組む場合には直接JSONのコードを編集する必要がありますが、その辺りはまた別の機会に試してみたいと思います。