【Azure Blob Storage】PythonからBlob・コンテナーを操作してみる

はじめに

AzureのBlobを公式のクイックスタートを参考にPythonからアップロード・ダウンロードしてみます。またAutoMLでトレーニングしたベストモデルに出力されたoutputsフォルダなどをローカルにダウンロードしてみます。

開発環境

  • OS Windows 10(NVIDIA GTX 1650Ti,16GB RAM, i5-10300H CPU)
  • Visual Studio Code 1.73.1
  • Python 3.8

パスワードレスでBlobのアクセスを行ってみる

Blobへのアクセスは、パスワードレスの方法と接続文字列を使った2種類のやり方があります。
まずはパスワードレスのやり方でやってみます。

ロール割り当て

ストレージアカウントを開き、「アクセス制御」>「追加」>「ロール割り当ての追加」をクリックします。
無題.png
目的のロールに絞ります。今回は「ストレージBLOB共同作成者」を選びました。
image.png
そして、メンバーの選択を行います。
無題.png
これで「レビューと割り当て」を選んで完了です。

これでいよいよPythonからBlobを操作してみます。
まずはコンテナー作成から行います。

コンテナー作成

Azureの認証をDefaultAzureCredentialを用いて行います。
そのために、まずはAzure CLIへログインします。
インストールしていない方はこちらをご覧ください。

次に下記コードを実行してコンテナーを作成します。

account_urlの<ストレージアカウント>は赤線部分の文字列をコピペします。
無題.png
container_nameには、作成するコンテナーの名前を入れます。今回は「sas-test-tkawano」としました。

Azure Portalで確認したところ、コンテナーが作成されていました。
無題.png

続いて作成したコンテナーにBLOBをアップロードしてみます。

BLOBにファイルをアップロード

ローカルにある”train.csv”というファイルをアップロードしてみます。
Blobclientクラスのget_blob_client()で作成済みのコンテナーを指定できます。

local_pathには格納するファイルが入っているパス名を入力し、local_file_nameにはアップロードするファイル名を入れます。

実行してコンテナーを見ると「train.csv」がアップロードされていました。
image.png

今度はアップロードしたBlobをローカルへダウンロードしてみます。

ダウンロード

ローカルのパスを指定し、そこへBLOBをダウンロードします。

実行すると、ローカルにtrainDOWNLOAD.csvができました。

image.png

さて、ファイルのアップロード・ダウンロードはできたので、今度はフォルダのダウンロードを行います。

フォルダのダウンロード

前回AutoMLで作成した一番精度の良いモデルのoutputsフォルダの中身をダウンロードしてみます。フォルダのダウンロードについては流行りのChat GPTにやり方を教えてもらいました^^
MicrosoftTeams-image.png

フォルダの中にあるファイルをfor文で1つずつ取り出していけば、フォルダのダウンロードができるようです。

outputs_pathにはダウンロードするフォルダがあるパスを入れます。
今回の「outputs」フォルダは「ExperimentRun/dcid.careful_ant_rbvh6tjqm5_3/」の中にあったので次のように書きます。

あとはoutputs_pathから始まる名前のBLOBのリストをlist_blobs()で取り出し、1つずつファイルをローカルへダウンロードします。

ChatGPTから教えてもらったコードをほぼそのまま実行しただけですが、フォルダごとダウンロードできてました!!
image.png

以上がパスワードレスのやり方でPythonからコンテナー作成やBLOBをアップロード・ダウンロードする方法でした。続いて接続文字列を用いてBlob操作を行います。

接続文字列を使ったやり方

  1. ストレージアカウントから接続文字列取得
    「アクセス キー」をクリックすると「接続文字列」があるのでこれを保存します。
    無題.png

  2. 文字列の構成
    コマンドプロンプトで以下のに接続文字列をコピペして実行し、環境変数を追加します。

追加したら一度コマンドプロンプトを再起動します。

それでは接続文字列を使って今度はBLOBリストを作成しましょう。
リストはBlobServiceClientクラスのlist_blobs()から得られます。

実行後、train.csvのみ返ってきました。

公式ではパスワードレスのやり方が推奨されていますが、接続文字列を使っても同じようにBlob Storageへアクセスできました。

次の記事ではSASを生成し、SAS URIを使ってBLOBをダウンロードしてみます。

この記事を書いた人

azure-recipe-user