はじめに
Azure Blob StorageをPythonから操作します。
今回はAutoMLでトレーニングされた一番精度の良いモデルの「outputs」フォルダのSAS生成をPythonから行い、SAS URIを使ってローカルファイルにダウンロードしてみます。
環境
- OS Windows 10(NVIDIA GTX 1650Ti,16GB RAM, i5-10300H CPU)
- Visual Studio Code 1.73.1
- Python 3.8
BLOBのSAS生成
それではPythonからSAS生成をします。
以下のコードでは、コンテナーにある特定のフォルダのSASを生成し、このSASトークンを使ってローカルファイルにダウンロードします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
sas.py import os from azure.identity import DefaultAzureCredential from azure.storage.blob import BlobServiceClient, BlobSasPermissions, generate_blob_sas import datetime import requests try: account_url = "https://<ストレージアカウント>.blob.core.windows.net" credential = DefaultAzureCredential() blob_service_client = BlobServiceClient(account_url, credential=credential) container_name = "<コンテナー名>" container_client = blob_service_client.get_container_client(container=container_name) outputs_path = "<BLOB名>" blob_list = container_client.list_blobs(name_starts_with=outputs_path) outputs_folder = "<ローカル先のフォルダ名>" if not os.path.exists(outputs_folder): os.makedirs(outputs_folder) for blob in blob_list: sas_token=generate_blob_sas( blob_service_client.account_name, account_key="<アカウントキー>", container_name=container_name, blob_name=blob.name, permission=BlobSasPermissions(read=True), expiry=datetime.datetime.utcnow() + datetime.timedelta(hours=1) ) sas_url=f"{account_url}/{container_name}/{blob.name}?{sas_token}" response = requests.get(sas_url) print(sas_url) if response.status_code==200: file_path=os.path.join(outputs_folder,(blob.name.split("/")[-1])) with open(file_path, mode="wb") as download_file: download_file.write(response.content) else: print("Failed to download the file") except Exception as ex: print("Exception:") print(ex) |
account_url
にはストレージアカウント名を入れます。ポータルサイトから確認できます。
container_name
にはSAS生成をするBLOBが入っているコンテナー名を入れます。
今回SAS生成する「outputs」フォルダは「azureml」というコンテナーにあるので、次のように入力します。
1 2 |
container_name = "azureml" |
続いてoutputs_path
には「outputs」フォルダが入っているパスを入力します。
1 2 |
outputs_path = "ExperimentRun/dcid.sleepy_spider_ryfkltxvgt_2/outputs/" |
outputs_folder
はダウンロード先のローカルのフォルダの名前を入れます。
今回はoutputs
という名前のフォルダにすべてダウンロードするようにします。
1 2 |
outputs_folder = "outputs" |
後の流れとしては、generate_blob_sas()
でSASトークンを作成し、その後ストレージリソースURIとSASトークンを「?」でつなげてSAS URIを作ればダウンロードできます。
expiry
には1時間の有効期限をつけています。
実行後、ローカルの「outputs」フォルダにダウンロードされたファイルが入っているのを確認できます。