ストレージサービス BLOB クイックスタート

スポンサーリンク

Microsoft AzureはBlob, File, Queue, Table, Data Lakeなどの複数のストレージのマネージドサービスを提供しています。このページではオブジェクトストレージの機能を提供するAzure Blob Storageの操作方法を説明します。

Blobストレージの作成

リソースグループの作成

以下のコマンドでリソースグループを作成します。

az group create --name myResourceGroup --location japaneast

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

Azure Blob Storageを使うには、まずストレージアカウントを作成します。ストレージアカウントを作成すると、Blob, File, Queue, Table, Data Lakeなどのストレージが使用可能になります。

以下にストレージアカウント作成の操作例を示します。ストレージアカウント名はAzureで一意な名前を指定する必要がありますので、「sample01」のような他の人が使ってそうな名前は使用できません。また、小文字英数字で3文字以上24文字以下と制約条件は厳しめです。

az storage account create \
    --name gokatei01 \
    --resource-group myResourceGroup \
    --location japaneast \
    --sku Standard_LRS

コンテナの作成

ストレージアカウントにコンテナと呼ばれる入れ物を作成します。コンテナを作成すると、コンテナの中にBlob(Binary Large OBject)を格納できるようになります。操作例は以下の通りです。

az storage container create \
    --account-name gokatei01 \
    --name container01

Azure Storage Explorerによる操作

Azure Storage Explorerのインストール

Windows OSの場合

Azure Storage Explorerのダウンロードページ」をブラウザで開き、「今すぐダウンロード」を実行します。

Azure Storage Explorerのインストール Windowsの場合 01

ダウンロードしたexeファイルを実行します。

Azure Storage Explorerのインストール Windowsの場合 02

「自分だけにインストールするか(推奨)」「全員にインストールするか」を選びます。

Azure Storage Explorerのインストール Windowsの場合 03

「I accept the agreement」を選択し、「Install」を押下します。

Azure Storage Explorerのインストール Windowsの場合 04

「Next」を押下します。

Azure Storage Explorerのインストール Windowsの場合 05

「Next」を押下します。

Azure Storage Explorerのインストール Windowsの場合 06

「Finish」を押下します。

Azure Storage Explorerのインストール Windowsの場合 07

MacOSの場合

Azure Storage Explorerのダウンロードページ」をブラウザで開き、「今すぐダウンロード」を実行します。

Azure Storage Explorerのインストール MacOSの場合 01

ダウンロードしたzipファイルを展開すると、その中にappファイルが入っています。このappファイルを実行します。

Azure Storage Explorerのインストール MacOSの場合 02

初回実行時のみ使用許諾契約への同意を求められます。

Azure Storage Explorerのインストール MacOSの場合 03

Azure Storage Explorerの認証情報入力

Azureへの接続方法を聞かれます。サブスクリプションを選ぶと、そのAzureアカウントに紐づいたストレージを全て操作する事ができます。

Shared Access Signatures(SAS)を使用すれば限定的なアクセスを実現する事もできますが、ここでは説明を省略します。

Azure Storage Explorerの認証情報入力 01

「Azure」を選択し、「次へ」を押下します。

Azure Storage Explorerの認証情報入力 02

ブラウザが立ち上がり、認証情報を求められます。

Azure Storage Explorerの認証情報入力 03

認証に成功すると以下のような画面が表示されます。もし、複数のサブスクリプションがあり全部を表示する必要がないならば、適宜、チェックボックスをOFFにする事で表示が見やすくなります。その後、左上の「エクスプローラー」のようなボタンを押下すると、ストレージ一覧の画面が現れます。

Azure Storage Explorerの認証情報入力 04

念の為、「すべての情報を最新に更新」を押下します。その後、さきほどのazコマンドで作成したコンテナ名が表示されている事を確認します。

Azure Storage Explorerの認証情報入力 05

Azure Storage Explorerのアップロード操作例

「コンテナ名(container01)」を選択している状態で、「アップロード」を押下します。

Azure Blob アップロード操作 01

アップロード対象のファイルを選択します。対象ファイルは複数を選ぶ事もできます。選択後、「アップロード」を押下します。

Azure Blob アップロード操作 02

画面下の方に、アップロードの進捗を表すメッセージが表示されます。

Azure Blob アップロード操作 03

しばらく待ち、以下スクリーンショットの赤枠のようにアップロードが完了した事を確認します。

Azure Blob アップロード操作 04

azコマンドによる操作

az storage blob uploadコマンドで、ファイルをBlobストレージへアップロードできます。

echo "test" > test21.txt

az storage blob upload \
    --account-name gokatei01 \
    --container-name container01 \
    --name cli/test21.txt \
    --file test21.txt

az storage blob listコマンドで、Blobストレージのファイル一覧を取得できます。

az storage blob list \
    --account-name gokatei01 \
    --container-name container01 \
    --output table

az storage blob listコマンドの出力例は以下の通りです。

admin@mac19 ~ % az storage blob list \
    --account-name gokatei01 \
    --container-name container01 \
    --output table

There are no credentials provided in your command and environment, we will query for account key for your storage account.
It is recommended to provide --connection-string, --account-key or --sas-token in your command as credentials.

You also can add `--auth-mode login` in your command to use Azure Active Directory (Azure AD) for authorization if your login account is assigned required RBAC roles.
For more information about RBAC roles in storage, visit https://docs.microsoft.com/azure/storage/common/storage-auth-aad-rbac-cli.

In addition, setting the corresponding environment variables can avoid inputting credentials in your command. Please use --help to get more information about environment variable usage.
Name              Blob Type    Blob Tier    Length    Content Type    Last Modified              Snapshot
----------------  -----------  -----------  --------  --------------  -------------------------  ----------
cli/test21.txt    BlockBlob    Hot          5         text/plain      2022-02-26T08:40:33+00:00
macos/test11.txt  BlockBlob    Hot          5         text/plain      2022-02-26T07:42:20+00:00
macos/test12.txt  BlockBlob    Hot          5         text/plain      2022-02-26T07:42:20+00:00
macos/test13.txt  BlockBlob    Hot          5         text/plain      2022-02-26T07:42:20+00:00
macos/test14.txt  BlockBlob    Hot          5         text/plain      2022-02-26T07:42:20+00:00
test01.txt        BlockBlob    Hot          6         text/plain      2022-02-26T07:36:27+00:00
test02.txt        BlockBlob    Hot          6         text/plain      2022-02-26T07:36:27+00:00
test03.txt        BlockBlob    Hot          6         text/plain      2022-02-26T07:36:27+00:00
test04.txt        BlockBlob    Hot          6         text/plain      2022-02-26T07:36:27+00:00

az storage blob downloadコマンドで、Blobストレージのファイルをダウンロードできます。

az storage blob download \
    --account-name gokatei01 \
    --container-name container01 \
    --name cli/test21.txt \
    --file /tmp/test21.txt

コードによる操作

KEYの調査

前述の操作はazコマンドの操作はAzure ADの認証機能を利用した操作です。その他、KEYによる認証も可能です。Azure AD認証を利用したコードは初学者にはハードルが高いので、まずはKEYを用いた認証操作を例示します。

「ストレージアカウント」の「アクセスキー」の画面を開きます。この画面でキーが伏せ字で表示されている場合は、「キーの表示」を押下します。

Azure Blob 接続文字列の調査 01

「接続文字列」をクリップボードにコピーします。

Azure Blob 接続文字列の調査 02

もし、ポータル(GUI)を使用せずにKEYを調べるならば、以下のようにaz storage account keys listコマンドを使用します。

admin@mac19 ~ % az storage account keys list \
    --account-name gokatei01 \
    --resource-group myResourceGroup
[
  {
    "creationTime": "2022-02-26T07:21:13.722998+00:00",
    "keyName": "key1",
    "permissions": "FULL",
    "value": "2HSO8wusnsOnd7mDsmEPUY+Yl3UCubtJxm7x5n/1/CQmF9UIMMNfX9dy7V5M3ewr/eQabKeGeNUtYQ1NdYISDQ=="
  },
  {
    "creationTime": "2022-02-26T06:45:22.265643+00:00",
    "keyName": "key2",
    "permissions": "FULL",
    "value": "9GKzucUMGF7bonPHKqxeAsja8s1u1Gg4PvyxnjpfnhxIpOOnSghQ8TaLVwE2f+mn/bm94daIKRiGv+uGE6psHQ=="
  }
]

Pythonによる実装例

公式ドキュメント「クイックスタート: Python v12 SDK で BLOB を管理する」に記載された方法を噛み砕いて説明します。この分野は仕様変更頻度が高そうですので、必ず公式ドキュメントも併せて参照ください。

python3.6以上の環境にazure-storage-blobをインストールします。操作例は以下の通りです。

python3 -m venv azpy
source azpy/bin/activate
pip install --upgrade pip
pip install azure-storage-blob

アップロードの動作確認用ファイルを作成します。

echo "test" > /tmp/test31.txt

前述の操作でクリップボードにコピーした接続文字列を環境変数AZURE_STORAGE_CONNECTION_STRINGとして定義します。接続文字列は環境に応じて適宜変更ください。

export AZURE_STORAGE_CONNECTION_STRING="DefaultEndpointsProtocol=https;AccountName=gokatei01;AccountKey=2HSO8wusnsOnd7mDsmEPUY+Yl3UCubtJxm7x5n/1/CQmF9UIMMNfX9dy7V5M3ewr/eQabKeGeNUtYQ1NdYISDQ==;EndpointSuffix=core.windows.net"

ファイルアップロードの実装例は以下の通りです。

import os, uuid
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient, __version__

CONTAINER_NAME="container01"
LOCAL_FILE_NAME="/tmp/test31.txt"
BLOB_FILE_NAME="py/test31.txt"

connect_str = os.getenv('AZURE_STORAGE_CONNECTION_STRING')
blob_service_client = BlobServiceClient.from_connection_string(connect_str)

blob_client = blob_service_client.get_blob_client(container=CONTAINER_NAME, blob=BLOB_FILE_NAME)

with open(LOCAL_FILE_NAME, "rb") as data:
  blob_client.upload_blob(data)

アップロードに成功した場合は、以下のようなログになります。

(azpy) [root@rocky020 ~]# python3
Python 3.6.8 (default, Nov  9 2021, 14:44:26) 
[GCC 8.5.0 20210514 (Red Hat 8.5.0-3)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os, uuid
>>> from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient, __version__
>>> 
>>> CONTAINER_NAME="container01"
>>> LOCAL_FILE_NAME="/tmp/test31.txt"
>>> BLOB_FILE_NAME="py/test31.txt"
>>> connect_str = os.getenv('AZURE_STORAGE_CONNECTION_STRING')
>>> blob_service_client = BlobServiceClient.from_connection_string(connect_str)
>>> 
>>> blob_client = blob_service_client.get_blob_client(container=CONTAINER_NAME, blob=BLOB_FILE_NAME)
>>> 
>>> with open(LOCAL_FILE_NAME, "rb") as data:
...   blob_client.upload_blob(data)
... 
{'etag': '"0x8D9F91802740012"', 'last_modified': datetime.datetime(2022, 2, 26, 11, 6, 16, tzinfo=datetime.timezone.utc), 'content_md5': bytearray(b'\xd8\xe8\xfc\xa2\xdc\x0f\x89o\xd7\xcbL\xb0\x03\x1b\xa2I'), 'client_request_id': '1e3dc7cc-96f4-11ec-8998-00505690811b', 'request_id': '6047c294-701e-0060-7400-2b2f6a000000', 'version': '2020-10-02', 'version_id': None, 'date': datetime.datetime(2022, 2, 26, 11, 6, 16, tzinfo=datetime.timezone.utc), 'request_server_encrypted': True, 'encryption_key_sha256': None, 'encryption_scope': None}
>>> 

想定通りのファイルがBlobストレージに存在する事を確認します。

admin@mac19 doc % az storage blob list \
    --account-name gokatei01 \
    --container-name container01 \
    --output table

There are no credentials provided in your command and environment, we will query for account key for your storage account.
It is recommended to provide --connection-string, --account-key or --sas-token in your command as credentials.

You also can add `--auth-mode login` in your command to use Azure Active Directory (Azure AD) for authorization if your login account is assigned required RBAC roles.
For more information about RBAC roles in storage, visit https://docs.microsoft.com/azure/storage/common/storage-auth-aad-rbac-cli.

In addition, setting the corresponding environment variables can avoid inputting credentials in your command. Please use --help to get more information about environment variable usage.
Name              Blob Type    Blob Tier    Length    Content Type              Last Modified              Snapshot
----------------  -----------  -----------  --------  ------------------------  -------------------------  ----------
cli/test21.txt    BlockBlob    Hot          5         text/plain                2022-02-26T08:40:33+00:00
macos/test11.txt  BlockBlob    Hot          5         text/plain                2022-02-26T07:42:20+00:00
macos/test12.txt  BlockBlob    Hot          5         text/plain                2022-02-26T07:42:20+00:00
macos/test13.txt  BlockBlob    Hot          5         text/plain                2022-02-26T07:42:20+00:00
macos/test14.txt  BlockBlob    Hot          5         text/plain                2022-02-26T07:42:20+00:00
py/test31.txt     BlockBlob    Hot          5         application/octet-stream  2022-02-26T11:06:16+00:00
test01.txt        BlockBlob    Hot          6         text/plain                2022-02-26T07:36:27+00:00
test02.txt        BlockBlob    Hot          6         text/plain                2022-02-26T07:36:27+00:00
test03.txt        BlockBlob    Hot          6         text/plain                2022-02-26T07:36:27+00:00
test04.txt        BlockBlob    Hot          6         text/plain                2022-02-26T07:36:27+00:00
admin@mac19 doc % 
タイトルとURLをコピーしました