背景
メッセージングサービスAzureServiceBusを使用して、メール送信機能をAzureLogicApps(メッセージングキュートリガー)で開発してみました。
メッセージングキュー実行したとき、AzureLogicApps側でjsonメッセージを受け取る実装で苦労したので、ここにメモしておきます。
システム構成
前提条件
- AzureServiceBusでキューを作成する(Basicプラン)
- 1.で作成したキューにエンキューするjsonのフォーマットのサンプルを下記とする
- AzureLogicAppsトリガーに「Connect to Azure Service Bus to send and receive messages.」を設定する
- 1.で作成したキューにキュータイプ「application/json」とし、2.で記載したjsonファイルと同じフォーマットで送信する
- 4.でメッセージがキューに送信された後、3.で作成したLogicAppsフローが実行される
上記2.のjsonファイルサンプル
{
"Receiver": "送信したいメールアドレス",
"Subjects": "送信メール標題",
"Contents": "送信メール内容1<br>送信メール内容2"
}
AzureLogicApps側実装ポイント
- 「triggerBody()?」でメッセージングしたメッセージを取得する。キー「ContentData」にメッセージングしたJsonファイルの中身が格納されている
- メッセージは、AzureLogicApps側にBase64形式で渡されるため、「Base64String(triggerBody()?['ContentData'])」でBase64形式を文字列に変換する
- 2.で変換した文字列をJson形式に整形する
※上記「前提条件」のjsonファイルフォーマットで実行すると、余分な改行コードが入るため、除去する必要がある。そのため、「replace(replace(replace(2.で取得したデータ,'\r\n',''),'\n',''),'\r',''))」などで置換する - 「json(3.で変換したjson文字列)」でjson文字列からjsonオブジェクトを取得する
- 「4.で作成したjsonオブジェクト.キー(4.で作成したjsonオブジェクト.Receiverなど)」で文字列を取得する
まとめ
AzureServiceBusを使用すれば、分離されたシステムとの非同期連携が可能になり、AzureLogicApps、AzureFunctionsをはじめ、様々なAzureサービスのトリガーとして使用でき、便利であると感じました。
AzureLogicApps側の実装手順で様々なコネクター、アクションがあり、慣れていない部分があるため、今後とも根気強く遊んでいきます。
次は、AzureLogicAppsのトリガーをHTTPトリガーにし、AzureManagementAPIなどを使用し、メッセージングキュー実行ではなく、API実行でも遊んでみたいです。
記事一読いただきありがとうございます。上記改善点などご指摘あれば、コメントいただけると幸いです。いいと思った方はいいねいただけると幸いです。定期的に記事を更新していこうと思いますので、引き続きよろしくお願いします。