Logic Apps で Event Hub からイベントを受け取るときにハマったことメモ
この記事の内容
- Logic Apps と Event Hub を組み合わせた構成でハマったポイントをまとめています
- JSON 解析時に使用するフィールド名(コンテント vs ボディ)の違いによるトラブル
- Base64 エンコードされたコンテンツの扱いについての注意点
- JSON スキーマを正しく生成するための実践的な手順
- Logic Apps デザイナーの挙動が不安定なケースについての記録
作ったものの概要
今回作成した Logic Apps は以下のような構成です。
- Event Hub からイベントを受け取る
- 受け取ったデータが JSON 形式なので JSON を解析する
- データの元は Twitter のツイートで、Azure Cognitive Services を使って感情分析を行う
- 感情が肯定的・否定的かどうかを判定して、条件に応じてメールを送信する
シンプルな構成ではありますが、いくつかハマりポイントがありました。
ハマりポイント①:JSON 解析で使うフィールドが「コンテント」でないといけない
Event Hub から受け取ったイベントの本文を参照しようとしたとき、「本文」や「ボディ(Body)」といった項目を選んだところ、うまく動作しませんでした。
正しくは 「コンテント(Content)」 を選択する必要があります。
日本語と英語でフィールド名が混在していたり、参照していた英語のドキュメントでは “Body” と記載されていたりと、どの項目を選べばよいか混乱しやすい部分です。同じ意味に見えても動作が変わるため、注意が必要です。
ハマりポイント②:コンテンツが Base64 エンコードされて届く場合がある
実行後の出力を確認したところ、コンテントのデータが Base64 エンコードされた文字列 として届いていることがありました。
「デコードが必要なのかな?」と悩みましたが、調べたところ 暗黙的にデコードが行われる ことが仕様として記載されていました。実際、再確認した時点では Base64 のままではなくデコード済みの状態で返ってきていたため、自分でデコード処理を追加する必要はありませんでした。
ただし、このあたりの動作は状況によって変わることがあり、挙動が安定しない場面もありました。
ハマりポイント③:JSON スキーマの生成は「実データ」で行う
JSON の解析アクションでは、スキーマを用意する必要があります。Logic Apps には「サンプルのペイロードを使用してスキーマを生成」する機能があります。
ここで手動でサンプル JSON を書いて貼り付けた場合、実際に届くデータとプロパティの構造が微妙にずれてしまい、うまく動作しないことがありました。
うまくいった手順は以下の通りです。
- 一度わざと実行して失敗させる
- 実行履歴から、実際に Event Hub から届いた 生の JSON をコピーする
- そのデータを「サンプルのペイロードを使用してスキーマを生成」の入力欄に貼り付けてスキーマを生成する
この方法であれば、実データに忠実なスキーマが生成されるため、後続のアクションでプロパティを正しく参照できます。
ハマりポイント④:Logic Apps デザイナーの挙動が不安定
最新のデザイナーで編集した際に、実行結果が安定しない場面がありました。
- 同じ操作を繰り返しているのに、毎回異なる結果が返ってくる
- 一発で正しい結果が返ってこない
今回の記事を書く時点では再現できなかったため、詳細な検証はできていませんが、デザイナーの挙動が不安定になることがあるという点は頭に入れておくとよいかもしれません。
まとめ
Logic Apps と Event Hub を組み合わせる際にハマったポイントをまとめると以下の通りです。
- JSON 解析で参照するフィールドは「コンテント(Content)」を選ぶ。「本文」「ボディ」では動作しないことがある
- Base64 エンコードの扱いは暗黙的に処理されることがあるが、挙動が変わる場合もあるため確認が必要
- JSON スキーマは手書きサンプルではなく、実際に届いたデータから生成するのが最も確実
- デザイナーの挙動が不安定になるケースがあるため、実行履歴を丁寧に確認することが重要
Logic Apps 自体はノーコードで直感的に使えますが、今回のようにフィールド名や挙動で詰まることもあります。同じ構成を試みている方の参考になれば幸いです。