Azure Storage

Azure Blob StorageへのアクセスをPowerShellのInvoke-RestMethodコマンドレットで実行してみた

PowerShellで、RESTful Web サービスに HTTP または HTTPS 要求を送信する処理として、Invoke-RestMethodコマンドレットがあり、このコマンドレットを用いると、Azure Blob Storageへのファイル操作をいろいろ行える。

今回は、Invoke-RestMethodコマンドレットを用いて、Azure Blob Storageへのファイルアップロード・ファイルダウンロード・ファイル削除を行ってみたので、そのサンプルプログラムのを共有する。

なお、Invoke-RestMethodコマンドレットについては、以下のサイトを参照のこと。
Microsoft PowerShell 7.4 Invoke-RestMethod説明

前提条件

下記記事のBlob Storageの作成が完了していること。

Azure Blob Storageを作成しファイルを格納してみたAzure Blob Storageを利用すると、Azure上にBlobデータ(テキストファイルや画像、アーカイブファイル等)を格納する...

SASトークンの発行

Azure Blob Storageへ外部からアクセスする際に、SASトークンが必要になるが、その発行は、Azure Portal上で行える。その手順は、以下の通り。

1) Azure Portalにログインし、操作対象となるAzure Blob Storageにアクセスする。
SASトークンの発行_1

2) SASトークンを発行するため、「Shared Access Signature」メニューを選択する。
SASトークンの発行_2

3)「使用できるリソースの種類」を選択し、その他の各項目を編集後、「SAS と接続文字列を生成する」ボタンを押下する。
SASトークンの発行_3

4) 以下のように、SASトークンが表示される。
SASトークンの発行_4

なお、上記で表示されたSASトークンや接続文字列は、この画面を再表示すると消えてしまうので、あらかじめ忘れないようメモしておくものとする。

サンプルプログラムの作成

作成したサンプルプログラムの構成は以下の通りで、「C:\work\blob」フォルダ下に配置されているものとする。
サンプルプログラムの構成

common.ps1の内容は以下の通りで、各処理で必要な変数等を指定している。

また、upload_blob.ps1の内容は以下の通りで、Azure Blob Storageにファイルアップロードする処理を定義している。

さらに、download_blob.ps1の内容は以下の通りで、Azure Blob Storageからファイルダウンロードする処理を定義している。

また、delete_blob.ps1の内容は以下の通りで、Azure Blob Storageにファイルがある場合に削除する処理を定義している。



サラリーマン型フリーランスSEという働き方でお金の不安を解消しよう先日、「サラリーマン型フリーランスSE」という働き方を紹介するYouTube動画を視聴しましたので、その内容をご紹介します。 「サ...

サンプルプログラム実行の前提条件

サンプルプログラム実行にあたっての前提条件は、以下の通りとする。

1)「C:\work\blob\in」 フォルダ内には、以下のように、文字コードが「UTF-8」で改行コードが「LF」である「user_data.csv」が存在し、これをAzure Blob Storageにアップロードするものとする。
サンプルプログラム実行の前提条件_1_1

サンプルプログラム実行の前提条件_1_2

2)「C:\work\blob\out」 フォルダ内には、何も存在しないものとする。
サンプルプログラム実行の前提条件_2

3) Azure Blob Storageに操作対象となるContainerには、何もファイルが存在しないものとする。
サンプルプログラム実行の前提条件_3

サンプルプログラムの実行結果

サンプルプログラムの実行結果は以下の通りで、Invoke-RestMethodコマンドレットで、Azure Blob Storageへのファイル操作が問題なく行えることが確認できる。

1) Windowsのスタートメニューから、PowerShellを起動する。
サンプルプログラムの実行結果_1

2)「$PSVersionTable」コマンドを実行し、PowerShellのバージョンを確認する。
サンプルプログラムの実行結果_2

3) PowerShellスクリプトのある「C:\work\blob」ディレクトリに移動し、各ファイル・フォルダの存在を確認する。
サンプルプログラムの実行結果_3

4) ファイルアップロードのスクリプト「upload_blob.ps1」を実行する。
サンプルプログラムの実行結果_4

5) ファイルアップロードのスクリプト実行後に、Azure Blob Storageに、アップロードしたファイルが表示されることが確認できる。
サンプルプログラムの実行結果_5

6) アップロードされたファイルは以下の通りで、アップロードしたファイルそのままの内容で、文字コードが「UTF-8」で改行コードが「LF」で変わらないことが確認できる。
サンプルプログラムの実行結果_6

7) ファイルダウンロードのスクリプト「download_blob.ps1」を実行する。
サンプルプログラムの実行結果_7

8) ファイルダウンロードのスクリプト実行後に、「C:\work\blob\out」 フォルダ内に、ダウンロードしたファイルが表示されることが確認できる。
サンプルプログラムの実行結果_8

9) ダウンロードされたファイルは以下の通りで、ダウンロードしたファイルそのままの内容で、文字コードが「UTF-8」で改行コードが「LF」で変わらないことが確認できる。
サンプルプログラムの実行結果_9

10) ファイル削除のスクリプト「delete_blob.ps1」を実行する。
サンプルプログラムの実行結果_10

11) ファイル削除のスクリプト実行後に、Azure Blob Storageのファイルが削除されることが確認できる。
サンプルプログラムの実行結果_11

12) ファイル削除のスクリプト「delete_blob.ps1」を再度実行すると、以下のように、ファイルが存在しない旨が表示されることが確認できる。
サンプルプログラムの実行結果_12



<2024/2/10追加>
15.34MiBのファイル(追加Blob)を、Azure Blob StorageからローカルPCにダウンロードした場合の結果と性能は、以下の通り。

1) 以下のように、Azure Blob Storageに、15.34MiBのファイルの追加Blobを配置する。
サンプルプログラムの実行結果(add)_1

2) download_blob.ps1を、以下のように修正する。

3) ファイルダウンロードのスクリプト「.\download_blob.ps1」を実行する。
サンプルプログラムの実行結果(add)_3

上記より、15.34MiBのファイルの追加Blobをダウンロードした場合の処理時間が、12秒弱であることが確認できる。

4) 実際にダウンロードされたファイルを確認すると、以下のように、ファイルダウンロード処理が問題なく実施できていることが確認できる。
サンプルプログラムの実行結果(add)_4_1

<ダウンロードしたCSVファイルの内容>
サンプルプログラムの実行結果(add)_4_2

サンプルプログラムの実行結果(add)_4_3

要点まとめ

  • PowerShellで、RESTful Web サービスに HTTP または HTTPS 要求を送信する処理として、Invoke-RestMethodコマンドレットがあり、このコマンドレットを用いると、Azure Blob Storageへのファイルアップロード・ファイルダウンロード・ファイル削除等を行える。