Azure Blob Storage CLI及びPython経由ファイルアップロード／ダウンロード操作手順

## この記事の目的

`Azure Blob Storage`へのファイルアップロード及び`Azure Blob Storage`からのファイルダウンロードの操作手順を解説します。  
操作には`Azure CLI`及び`Azure Python SDK`を利用します。

## 👇これより先は下記内容を前提とします

- [Azure CLI の概要](https://learn.microsoft.com/ja-jp/cli/azure/get-started-with-azure-cli)
- [ローカル開発環境でAzure SDK for Pythonを利用するための認証設定](https://docusaurus.plant11.com/azure/azure_sdk_python_certificate)

## CLI 経由 Azure Blob Storage ファイルアップロード／ダウンロード

サブスクリプション設定

```text
az account set --subscription "***-***-***-***-***-***"
```

リソースグループ作成

```text
az group create^
 --name rg_send_receive_sample^
 --location japaneast
```

ストレージ アカウントの作成

```text
az storage account create^
 --name sasendreceivesample^
 --resource-group rg_send_receive_sample^
 --location japaneast^
 --sku Standard_ZRS^
 --encryption-services blob
```

サインインユーザのIDを取得

```text
az ad signed-in-user show --query id -o tsv
```

以下のような出力が得られます。

```text
abcdefg-abcd123-abcdefg-abcdefg
```

サインインユーザへストレージアカウントへのアクセス権限を付与

```text
az role assignment create^
 --role "Storage Blob Data Contributor"^
 --assignee "abcdefg-abcd123-abcdefg-abcdefg"^
 --scope "/subscriptions/***-***-***-***-***-***/resourceGroups/rg_send_receive_sample/providers/Microsoft.Storage/storageAccounts/sasendreceivesample"
```

コンテナの作成

```text
az storage container create^
 --account-name sasendreceivesample^
 --name container01^
 --auth-mode login
```

ファイルアップロード

```text
az storage blob upload^
 --account-name sasendreceivesample^
 --container-name container01^
 --name myfile.txt^
 --file myfile.txt^
 --auth-mode login
```

ファイル一覧取得

```text
az storage blob list^
 --account-name sasendreceivesample^
 --container-name container01^
 --output table^
 --auth-mode login
```

ファイルダウンロード

```text
az storage blob download^
 --account-name sasendreceivesample^
 --container-name container01^
 --name myfile.txt^
 --file  myfile.txt^
 --auth-mode login
```

ファイル一括アップロード

```text
az storage azcopy blob upload^
 --container container01^
 --account-name sasendreceivesample^
 --source "mydir"^
 --recursive
```

ファイル一括ダウンロード

```text
az storage azcopy blob download^
 --container container01^
 --account-name sasendreceivesample^
 --source *^
 --destination "c:\tmp"^
 --recursive
```

ファイル一括削除

```text
az storage azcopy blob delete^
 --container container01^
 --account-name sasendreceivesample^
 --recursive
```

## Azure Python SDK 経由 Azure Blob Storage ファイルアップロード／ダウンロード

サービスプリンシパルへストレージアカウントへのアクセス権限を付与
※サービスプリンシパルについては下記参照  
[ローカル開発環境でAzure SDK for Pythonを利用するための認証設定](https://docusaurus.plant11.com/azure/azure_sdk_python_certificate)  

```text
az role assignment create^
 --role "Storage Blob Data Contributor"^
 --assignee "00000000-0000-0000-0000-000000000000"^
 --scope "/subscriptions/***-***-***-***-***-***/resourceGroups/rg_send_receive_sample/providers/Microsoft.Storage/storageAccounts/sasendreceivesample"
```

モジュールインストール

```text
pip install azure-storage-blob azure-identity
```

アップロード

```python
import os
import json

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient

def main_logic():
    info = {
        "ID": "aaaaa"
        ,"PASS": "bbbb"
    }

    account_url = "https://sasendreceivesample.blob.core.windows.net"
    default_credential = DefaultAzureCredential()

    # Create the BlobServiceClient object
    container_name = "container01"

    key_name = 'key01'

    blob_service_client = BlobServiceClient(account_url, credential=default_credential)
    container_client = blob_service_client.get_container_client(container=container_name)
    blob_client = container_client.get_blob_client(key_name)

    blob_client.upload_blob(json.dumps(info),overwrite=True)

main_logic()
```

ダウンロード

```python
import os
import json

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient

def main_logic():
    account_url = "https://sasendreceivesample.blob.core.windows.net"
    default_credential = DefaultAzureCredential()

    # Create the BlobServiceClient object
    container_name = "container01"

    key_name = 'key01'

    blob_service_client = BlobServiceClient(account_url, credential=default_credential)
    container_client = blob_service_client.get_container_client(container=container_name)
    blob_client = container_client.get_blob_client(key_name)

    info = json.loads(blob_client.download_blob(key_name).readall())
    print(info)

main_logic()
```

## 👇関連記事

- [ローカル開発環境でAzure SDK for Pythonを利用するための認証設定](https://docusaurus.plant11.com/azure/azure_sdk_python_certificate)

## 👇参考URL

- [クイック スタート:Azure CLI を使用して BLOB を作成、ダウンロード、一覧表示する](https://learn.microsoft.com/ja-jp/azure/storage/blobs/storage-quickstart-blobs-cli)
- [Azure CLI の概要](https://learn.microsoft.com/ja-jp/cli/azure/get-started-with-azure-cli)
- [BLOB データにアクセスするための Azure ロールを割り当てる](https://learn.microsoft.com/ja-jp/azure/storage/blobs/assign-azure-role-data-access?tabs=azure-cli)
- [az storage blob](https://learn.microsoft.com/ja-jp/cli/azure/storage/blob?view=azure-cli-latest)
- [az storage azcopy blob](https://learn.microsoft.com/ja-jp/cli/azure/storage/azcopy/blob?view=azure-cli-latest)
- [クイック スタート: Python 用 Azure Blob Storage クライアント ライブラリ](https://learn.microsoft.com/ja-jp/azure/storage/blobs/storage-quickstart-blobs-python?tabs=managed-identity%2Croles-azure-cli%2Csign-in-azure-cli)
- [BlobServiceClient](https://learn.microsoft.com/ja-jp/python/api/azure-storage-blob/azure.storage.blob.blobserviceclient?view=azure-python)
- [BlobClient](https://learn.microsoft.com/ja-jp/python/api/azure-storage-blob/azure.storage.blob.blobclient?view=azure-python)

[keywords]  
Azure Blob Python CLI

[Azure Blob Storage CLI及びPython経由ファイルアップロード／ダウンロード操作手順](https://docusaurus.plant11.com/azure/blob_upload_download)

更新日:2023/11/19