Logic Appsでストレージアカウントのファイル操作(作成、CSV読み込み、一覧表示)
Azure Logic Apps(ロジックアプリ)のワークフローから、ストレージアカウントのコンテナーのファイル(BLOB)操作する方法の紹介です。
コンテナーへのファイル(BLOB)書き込み、コンテナーからCSVファイルの読み込み、コンテナー内のファイル(BLOB)一覧表示の手順を確認しています。
※本記事内では分かりやすさを優先してコンテナー内のBLOBを、ファイルもしくはファイル(BLOB)と表記しています。
※ストレージアカウントのコンテナー内にアップロードされたファイルをBLOBと呼びます。
Logic AppsのBlob Storageコネクタとは?
Azure Blob Storageコネクタとは
“Azure Blob Storage"コネクタを使うと、Logic Appsのワークフローからストレージアカウントのコンテナーのファイル(BLOB)操作ができます。
Logic Appsのワークフローからファイル(BLOB)の書き込み、更新、取得、削除といった多くの操作ができます。
“Azure Blob Storage"コネクタはトリガーとしての機能も提供されています。
ファイル(BLOB)が追加や変更された時にワークフローを自動的にトリガーすることができます。
“Azure Blob Storage"コネクタのアクション | |
“Azure Blob Storage"コネクタで利用できるアクションの一覧です。 多くのアクションが用意されています。 |
|
“Azure Blob Storage"コネクタで利用できるトリガーの一覧です。 |
※従量課金(消費)(マルチテナント)の場合の例です。
Azure Blob Storageコネクタの認証方法
Azure Blob Storageコネクタ利用時にはストレージアカウントに対する認証が必要になります。
認証の種類として、サービスプリンシパル、Access Key、Microsoft Entra ID integrated、マネージドIDなどが選択できます。
認証の種類 | |
アクション作成時に接続の作成画面が表示されます。 |
Logic AppsのマネージドID設定、ストレージアカウントの設定
Logic Appsのリソース作成
logic-st-01という名前でLogic Appsのリソースを作成しています。
Logic Appsのリソース作成手順についてはこちらに記載しています。
今回は従量課金(消費)(マルチテナント)のプランで作成しています。
トリガーやアクションの概要についてもこちらで紹介しています。
ストレージアカウントへアクセスするためのシステムマネージドID設定
Azure Blob Storageコネクタ利用時には接続の作成(認証)が必要となります。
Logic Appsのワークフローからストレージアカウントへアクセスするためのロールを割り当てます。
今回はシステム割り当てマネージドIDを利用しています。
ストレージアカウントでLogic Appsのワークフローからのアクセス許可設定
ストレージアカウントのネットワーク設定で、Logic Appsのワークフローからのアクセス許可を追加します。
ファイアウォールと仮想ネットワークの設定で、Logic Appsのインスタンスを追加します。
ストレージアカウントのネットワーク設定 | |
ストレージアカウントの左側のメニューでネットワークを選択します。 |
※"信頼されたサービスの一覧にある Azure サービスがこのストレージ アカウントにアクセスすることを許可します。"のチェックは外しています。
ワークフロー確認に利用したストレージアカウントとコンテナー
logicstというストレージアカウントに、logic-01というコンテナーを作成しています。
ファイル(BLOB)保管先のコンテナー | |
logic-01というコンテナーを利用します。 | |
—広告—
Logic Appsのワークフローを使ってコンテナーにファイル(BLOB)を書き込む
トリガー設定
テスト用のトリガーとして"Schedule"コネクタを利用しています。
トリガー設定 | |
リソースメニューでロジックアプリデザイナーを選択します。 |
|
現在時刻取得
テスト用に現在時刻をファイルに書き込んでいます。
“Date Time"コネクタの"Current Time"アクションを利用して現在時刻を取得します。
※ファイルの更新を確認するために使用します。
現在時刻を取得 | |
“Date Time"コネクタの"Current Time"アクションを選択します。 ※特に設定は必要ありません。 |
Logic Appsのワークフローでの日付や時刻を扱い方についてはこちらで紹介しています。
ファイル名とファイルの変数を初期化
ファイル名と、ファイルに記述する内容の変数を作成します。
“Initialize variable"のアクションで変数を初期化します。
ファイルにはメッセージ、ファイル名、現在時刻を書き込んでいます。
-
- ファイル名:file_name
- ファイルの記述内容:file_contents
“Initialize variable"アクションの設定 | |
“Variables"コネクタの"Initialize variable"アクションで、変数を初期化します。 | |
※アクション名は、分かりやすい名前に変更しています。
コンテナーへファイル(BLOB)を書き込む
“BLOBを作成する(V2)"アクションを使って、ストレージアカウントのコンテナーへファイル(BLOB)を書き込みます。
完成したワークフロー
完成したワークフローです。
コンテナーにファイルを書き込むワークフロー例 | |
設定が完了したワークフローです。 |
ワークフローを実行
ワークフローを実行して、ファイル(BLOB)の書き込みを確認します。
ワークフローを実行 | |
実行履歴を確認します。 すべてグリーンとなっており、ワークフローが正常終了しています。 |
|
ストレージアカウントに書き込まれたファイル(BLOB)を確認します。 ワークフローを完了した時刻で書き込まれています。 ファイルの内容もワークフローで設定した内容が書き込まれています。 |
|
ワークフローを再実行するとファイル(BLOB)は上書きされる
ワークフローを再実行した場合は、同じファイル(BLOB)名で上書きされます。
ワークフローを再実行 | |
ファイル(BLOB)がワークフローを再実行した時間で更新されています。 ダウロードしてファイルの内容を確認すると、時間が更新されてい事が確認できます。 |
|
—広告—
Logic Appsのワークフローでコンテナー内のCSVファイル(BLOB)を取得
利用したCSVファイル
利用したサンプルのCSVファイルです。
Logic Appsのワークフローで、CSVファイルを読み込み、"rg-name"カラムの"rg-logic-01″の値を取得します。
サンプルのCSVファイル | ||
ヘッダー行含む3行のCSVファイルを準備しています。 |
|
CSVファイル(BLOBコンテンツ)をコンテナーから取得
“BLOBコンテンツを取得する(V2)"アクションを使って、ストレージアカウントのコンテナーからファイル(BLOB)を読み込みます。
※接続の作成画面が表示された場合は、新規に接続を作成します。
split関するを使って読み込んだCSVファイル(BLOB)を改行コードで区切る
split関数を利用して、CSVファイルの改行コードで区切ります。
“Data Operations"コネクタの"Compose"アクションとsplit関数を組わせて利用しています。
“Compose"アクションの設定 | |
“Data Operations"コネクタの"Compose"アクションを選択します。 | |
split関数を利用して読み込んだファイル(BLOB)を改行コードで区切ります。 |
|
|
split関数の改行コードを修正
ロジックアプリデザイナーでsplit関数の改行コードを設定した場合、エスケープされてしまうため正常に動作しません。
ロジックアプリコードビューで修正します。
修正内容 | |
ロジックアプリデザイナーで"Compose"アクションを修正します。 inputsのsplit関数部分を"\\r\\n"から"\r\n"に修正します。 |
|
skip関数を使ってCSVファイルのヘッダー行を削除
“Data Operations"コネクタの"Compose"アクションとSkip関数を組わせてCSVファイルのヘッダー行を削除します。
CSVファイルのヘッダー行を削除 | |
“Data Operations"コネクタの"Compose"アクションを利用しています。 |
|
|
取得した値を格納する変数
読み込んだファイル(BLOB)から取得した値を格納する変数を初期化します。
TypeはStringとしています。
rg-name:CSVファイルから取得したリソースグループ名を格納
“Initialize variable"のアクション設定 | |
Vatriablesコネクタの"Initialize variable"のアクションで取得した値を格納する変数を作成します。 TypeにはStringを指定します。 |
|
“For each"のアクションを使って複数のファイル(BLOB名)を取得
“For each"のアクションは繰り返し処理を行う処理です。
“For each"アクションを使って、複数行のCSVファイルを行単位で読み込み、値を取得します。
“For each"のアクション設定 | |
Control"コネクタの"For each"アクションを選択します。 Select An Output From Previous Stepsにはヘッダー行削除後の"outputs"を指定します。 |
|
CSVファイルの値をカンマで区切る
CSVファイルのカンマ区切り単位で値を取得します。
“Data Operations"コネクタの"Compose"アクションとsplit関数を組わせてカンマで値を区切ります。
split関数を使って値を区切る | |
“Data Operations"コネクタの"Compose"アクションを利用しています。 split関数を使って","(カンマ)で値を区切ります。 |
|
|
カンマで区切った値を取得
outputs関数を利用して区切ったCSVファイルかの値を取得します。
※CSVファイルからlocationを取得する場合はoutputs('CSVファイルの値を区切る’)[1]となります。
“Variables"コネクタの"Set Variable"アクションを利用しています。 outputs関数を使って区切られ値を取得します。 ※rg-nameのカラムを取得場合は[0]とします。 |
|
|
完成したワークフロー
完成したワークフローです。
完成したワークフロー | |
ワークフローの実行結果
ワークフローの実行結果です。
それぞれのアクションで取得される値も確認しています。
ワークフローの実行結果 | |
“BLOBコンテンツを取得する(V2)"アクションでストレージアカウントにアップロードしたCSVファイルの値が取得できている事が確認できます。 各アクションで値を加工されている事が確認できます。 CSVファイルのrg-nameカラムの値が取得できています。 |
|
※"For each"アクションで2番目を指定した場合、取得される値は"rg-logic-02″になります。
—広告—
Logic Appsのワークフローでコンテナー内のファイル(BLOB)一覧を取得
一覧表示するファイル(BLOB)
コンテナーに3つファイル(BLOB)をアップロードしています。
カンマ区切りでファイル(BLOB)名一覧を取得します。
コンテナーの状態 | |
3つのファイルをアップロードしています。 |
コンテナーのファイル(BLOB)一覧を取得
“BLOBを一覧表示する(V2)"のアクションを使って、コンテナー内のファイル(BLOB)一覧を取得します。
“BLOBを一覧表示する(V2)"アクションの設定 | |
“Azure Blob Storage"コネクタで"BLOBを一覧表示する(V2)"のアクションを選択します。 ストレージアカウント名、コンテナーを選択します。 ※ストレージアカウント名はカスタム値の入力を利用して、直接入力しています。 |
|
“BLOBを一覧表示する(V2)"アクションの取得結果はJSON形式
ファイル(BLOB)のプロパティがJSON形式で出力されます。
“BLOBを一覧表示する(V2)"アクションの出力例 | ||
取得例です。 コンテナー内のファイル(BLOB)一覧がJSON形式で取得されます。 ファイル(BLOB)のプロパティが値として取得されます。
|
|
JSON形式の出力結果からファイル(BLOB)名だけを取得する
“Parse JSON"のアクションを使って値を取得できるようにします。
ファイル(BLOB)名一覧の変数
取得したファイル名一覧を格納する変数を初期化します。
TypeはStringとしています。
自己参照するとエラーになるため、テンポラリーの変数も併せて作成します。
file_name_list:ファイル(BLOB)名一覧を格納
file_name_list_temp:ワークフロー内でファイル(BLOB)名を一時的に格納
“Initialize variable"アクションの設定 | |
Vatriablesコネクタの"Initialize variable"のアクションでファイル(BLOB)名一覧を格納する変数を作成します。 |
|
“For each"のアクションを使って複数のファイル(BLOB名)を取得
“For each"のアクションは繰り返し処理を行う処理です。
“For each"アクションを使って複数のファイル(BLOB)名を取得します。
“For each"アクションの設定 | |
“Control"コネクタの"For each"アクションを選択します。 | |
Select An Output From Previous Stepsには"Body"を指定します。 | |
設定タブを表示します。 コンカレンシーの制御の制限はオンにします。 並列処理の次数を1に変更します。 |
concat関数を利用してファイル(BLOB)名を結合
“Variables"コネクタ”の"Append to string variable"アクションを利用してファイル名を追加していきます。
※ファイル名一覧の変数を指定すると自己参照としてエラーになります。
substring関数を使って結合したファイル(BLOB)名一覧を整形
ファイル(BLOB)名を整形します。
変数の先頭にカンマが付与された状態になっているので、substring関数を利用して削除します。
-
- 整形前の値:,file-blob-01.txt,file-blob-02.txt,file-blob-03.txt
- 整形後の値:file-blob-01.txt,file-blob-02.txt,file-blob-03.txt
substring関数でファイル(BLOB)名を整形 | |
Vatriablesコネクタの"Set variable"のアクションを利用します。 ファイル(BLOB)名の変数を設定します。 substring関数を利用して先頭の1文字を削除します。 |
|
|
完成したワークフロー
完成したワークフローです。
完成したワークフロー | |
ワークフローを実行
ワークフローを実行して確認します。
ワークフローを実行 | |
ファイル(BLOB)名の一覧を取得できています。 |
—広告—
最後に
Azure Logic Apps(ロジックアプリ)のワークフローからストレージアカウントのファイル(BLOB)操作方法について確認してみました。
ストレージアカウントのコンテナーにファイル(BLOB)書き込み、読み込み、一覧表示に関するアクションがそれぞれ用意されていました。
アクションを利用して操作できる事が分かりました。
今後も引き続き色々試してみたいと思います。
Logic Appsのワークフローを使ってLog Analyticsのログ検索自動化についてこちらで紹介しています。
今回のワークフローと組わせる事でクエリの実行結果をストレージアカウントへ保管するといった事もできます。
Logic Appsのワークフローを平日のみ実行する手順についてはこちらで紹介しています。