Azure Blob Storage の管理

## 概要

ストレージアカウント情報の取得やコンテナの確認方法等を備忘録として超簡単にまとめてみました。


### 実行環境

macOS Monterey 12.3.1
python 3.8.12
azure cli 2.41.0

### Azure へのログイン

ローカルのターミナルから Azureログインします。

```
$ az login --tenant [tenantId]
$ az account set --subscription [subscriptionName]
```

### ストレージアカウント情報

ストレージアカウントは既に作成されているものとします。

```
# ストレージアカウントのリスト
$ az storage account list -g [ResourceGroupName] -o table
AccessTier    AllowBlobPublicAccess    CreationTime                      EnableHttpsTrafficOnly    IsHnsEnabled    Kind       Location    MinimumTlsVersion    Name          PrimaryLocation    ProvisioningState    ResourceGroup     StatusOfPrimary
------------  -----------------------  --------------------------------  ------------------------  --------------  ---------  ----------  -------------------  --------------------  -----------------  -------------------  -------------------  -----------------
Hot           True                     2021-12-04T16:11:49.809981+00:00  True                      True            StorageV2  japaneast   TLS1_0               [StorageAccountName]  japaneast          Succeeded            [ResourceGroupName]  available


# ストレージアカウントのキー
$ az storage account keys list --account-name [StorageAccountName] --resource-group [ResourceGroupName] --output table
CreationTime                      KeyName    Permissions    Value
--------------------------------  ---------  -------------  ------------------------
2021-12-04T16:11:49.888094+00:00  key1       FULL           54GH・・・省略・・・qqAA==
2021-12-04T16:11:49.888094+00:00  key2       FULL           GjBc・・・省略・・・FNng==


# ストレージアカウントの接続文字列
$ az storage account show-connection-string --name [StorageAccountName] --resource-group [ResourceGroupName] -o table
ConnectionString
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName=[StorageAccountName];AccountKey=[StorageAccountKey1]


# ストレージアカウントのID
$ az storage account show --name [StorageAccountName] --resource-group [ResourceGroupName] --query id
"/subscriptions/[SubscriptionId]/resourceGroups/[ResourceGroupName]/providers/Microsoft.Storage/storageAccounts/[StorageAccountName]"
```

### コンテナ情報

```
# コンテナのリスト
$ az storage container list --account-name [StorageAccountName] -o table      
Name     Lease Status    Last Modified
-------  --------------  -------------------------
app                      2022-02-16T07:25:53+00:00
tfstate                  2021-12-04T16:12:31+00:00


# コンテナの作成
$ az storage container create --account-name [StorageAccountName] --name partnercenter       
{
  "created": true
}


# コンテナのリストの再確認
$ az storage container list --account-name [StorageAccountName] -o table              
Name           Lease Status    Last Modified
-------------  --------------  -------------------------
app                            2022-02-16T07:25:53+00:00
partnercenter                  2022-10-20T06:02:51+00:00
tfstate                        2021-12-04T16:12:31+00:00
```

### BLOB情報

```
# BLOBのリスト
$ az storage blob list --account-name [StorageAccountName] --container-name tfstate -o table
Name                                Blob Type    Blob Tier    Length    Content Type      Last Modified              Snapshot
----------------------------------  -----------  -----------  --------  ----------------  -------------------------  ----------
Databricks01                        BlockBlob    Hot                                      2021-12-04T16:45:45+00:00
Databricks01/terraform.tfstate      BlockBlob    Hot          156       application/json  2021-12-06T13:50:36+00:00
githubactions001                    BlockBlob    Hot                                      2022-09-12T14:34:57+00:00
githubactions001/terraform.tfstate  BlockBlob    Hot          156       application/json  2022-09-12T16:41:56+00:00
test01                              BlockBlob    Hot                                      2021-12-05T10:26:47+00:00
test01/terraform.tfstate            BlockBlob    Hot          156       application/json  2022-01-18T05:45:12+00:00
tftest001                           BlockBlob    Hot                                      2022-09-12T12:27:40+00:00
tftest001/terraform.tfstate         BlockBlob    Hot          156       application/json  2022-09-12T12:47:19+00:00
```

### PythonプログラムでBLOBの確認

実行するプログラム

```python:blob_list.py
from azure.storage.blob import ContainerClient

# 接続文字列
CONNECTION_STRING = [az storage account show-connection-string...]
# コンテナ名
CONTAINER_NAME = "tfstate"

try:
    container = ContainerClient.from_connection_string(conn_str=CONNECTION_STRING, container_name=CONTAINER_NAME)
    blob_list = container.list_blobs()
    for blob in blob_list:
        print("Size:{}   \t Name:{} ".format(blob.size, blob.name))

except Exception as ex:
    print('Exception:')
    print(ex)
```

プログラムの実行
 
```
$ python blob_list.py
Size:0   	 Name:Databricks01 
Size:156   	 Name:Databricks01/terraform.tfstate 
Size:0   	 Name:githubactions001 
Size:156   	 Name:githubactions001/terraform.tfstate 
Size:0   	 Name:test01 
Size:156   	 Name:test01/terraform.tfstate 
Size:0   	 Name:tftest001 
Size:156   	 Name:tftest001/terraform.tfstate 
```

### まとめ

これで CLI と Pythonプログラム から Blob Storage を管理できそうです。

### 参考記事

以下の記事を参考にさせていただきました。感謝申し上げます。
[PythonでAzure Blob Storageを管理する](https://qiita.com/aryoa/items/997ae6dbfbed113c39b3)