LogicApps で Azure Blob Storage に JSONファイルをアップしたり、取得したりする
Azure Blob Storage にAPIから取得したJSONを放り込んでおこうかな―と思って、色々と試していたときのメモです。
JSONファイルのアップロード、JSONファイルを取得して、LogicAppsでオブジェクトとしてハンドリングする方法を書いています。
対象の環境
Azure Blob Storage、ADSL Gen2でとりあえず構成しました。
Logic Appsで扱う場合、特にADSL Gen2かどうかというのは、問わない感じですが。
以下のjsoncontainerというフォルダにjsonファイルを格納していくイメージです。
JSONファイルの作成
BLOBへのJSONアップロードには、Azure Blob Storageの「BLOBの作成」アクションを使います。
LogicAppsで構成すると、予め対象の環境(たぶんLogicAppsを構成しているサブスクリプションの範囲?)に存在するストレージアカウントがリストアップされるので便利ですね。
フォルダーのパスで構成しておいた、コンテナを選択し、任意のファイル名をつけておきます。
今回は日付を元に「20201107030509.json」のようなファイル名を生成する関数を指定しました。
concat(formatDateTime(utcNow(),'yyyyMMddHHmmss'),'.json')
あとは、BLOBコンテンツにJSONを突っ込めばOKです。
こんな感じで対象のファイルが生成されました。
BLOBからJSONファイルの取得
BLOBにアップロードされたファイルの取得には「BLOBコンテンツの取得」を使います。
本来であれば、一度一覧表示をしてから、ファイルを特定、みたいなプロセスを経ますが、今回は静的に指定。
ただし、注意したいのが出力結果です。JSONフォーマットで$contentのオブジェクトの中に、Base64でエンコードされたBinary形式で入っています。なので、このままではLogicAppsでハンドリングできません。
{ "$content-type": "application/octet-stream", "$content": "ewogICAgIkZpcnN0TmFtZSI6ICJIZWxsbyIsCiAgICAiTGFzdE5hbWUiIDogIldvcmxkIgp9" }
なので、base64ToString関数を使って、値をデコードします。
base64ToString(body('BLOB_コンテンツの取得').$content)
以下のように「JSONの解析」アクションに突っ込んでしまうのが良いですね。
これで無事出力できました。
わからなかったこと
「BLOBのコンテンツの取得」にある、「コンテンツタイプの推測」ってなんなんですかね?
スタックオーバーフローにもスレッドを見つけましたが、特に明確な回答はあがっていないみたいでした。
質問者も言っている通り、CSVやJSONを指定して、LogicApps上でハンドリングできるオブジェクトにして返してくれると、嬉しいですよねぇ。