次の方法で共有


Azure CLI を使用して BLOB コンテナーを管理する

Microsoft Azure Blob Storage を使用すると、大量の非構造化オブジェクト データを格納できます。 BLOB ストレージを使用して、メディア、コンテンツ、またはアプリケーション データをユーザーに収集または公開できます。 すべての BLOB データはコンテナー内に格納されるため、データのアップロードを開始する前にストレージ コンテナーを作成する必要があります。 BLOB ストレージの詳細については、「 Azure Blob Storage の概要」を参照してください。

Azure CLI は、Azure リソースを管理するための Azure のクロスプラットフォーム コマンド ライン エクスペリエンスです。 ブラウザーで、Azure Cloud Shell を使用して操作することができます。 macOS、Linux、または Windows にインストールし、コマンド ラインからローカルで実行することもできます。

このハウツー記事では、Azure CLI と Bash を使用してコンテナー オブジェクトを操作する方法について説明します。

[前提条件]

Azure Storage にアクセスするには、Azure サブスクリプションが必要です。 まだサブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

Azure Storage へのアクセスはすべて、ストレージ アカウント経由で行われます。 このクイック スタートでは、Azure portal、Azure PowerShell、または Azure CLI を使用して、ストレージ アカウントを作成します。 ストレージ アカウントの作成については、「ストレージ アカウントの作成」を参照してください。

Azure CLI の環境を準備する

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の概要」を参照してください。

  • CLI 参照コマンドをローカルで実行する場合は、Azure CLI を インストール します。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、「 Azure CLI を使用した Azure への認証」を参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、「Azure CLI で拡張機能を使用および管理する」を参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

  • Azure CLI の最新バージョンをインストールすることをお勧めします。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。

Blob Storage へのアクセスを承認する

Azure CLI から、Microsoft Entra 資格情報を使用するか、ストレージ アカウント アクセス キーを使用して、Blob Storage へのアクセスを承認できます。 Microsoft Entra 資格情報の使用をお勧めします。この記事の例では、Microsoft Entra ID のみを使用します。

Blob Storage に対するデータ操作用の Azure CLI コマンドでは、 --auth-mode パラメーターがサポートされています。これにより、特定の操作を承認する方法を指定できます。 --auth-mode パラメーターを login に設定して、Microsoft Entra 資格情報で承認します。 詳細については、「Azure CLI を使用して BLOB またはキュー データへのアクセスを承認する」を参照してください。

login コマンドを実行してブラウザーを開き、Azure サブスクリプションに接続します。

az login

コンテナーを作成する

Azure CLI でコンテナーを作成するには、 az storage container create コマンドを呼び出します。次の例は、 az storage container create コマンドを使用して BLOB コンテナーを作成するための 3 つのオプションを示しています。 最初の方法では 1 つのコンテナーが作成されますが、残りの 2 つの方法では Bash スクリプト操作を使用してコンテナーの作成が自動化されます。

この例を使用するには、変数の値を指定し、ログインしていることを確認します。 角かっこ内のプレースホルダー値を独自の値で置き換えてください。

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
containerPrefix="demo-container-"

# Approach 1: Create a container
az storage container create \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# Approach 2: Create containers with a loop
for value in {2..5}
do
    az storage container create \
        --name $containerPrefix$value \
        --account-name $storageAccount \
        --auth-mode login
done

# Approach 3: Create containers by splitting multiple values
containerList="${containerPrefix}6 ${containerPrefix}7 ${containerPrefix}8"
for container in $containerList
do
    az storage container create \
        --name $container \
        --account-name $storageAccount \
        --auth-mode login
done

コンテナーの一覧表示

az storage container list コマンドを使用して、ストレージ コンテナーの一覧を取得します。 名前が指定された文字列で始まるコンテナーの一覧を返すには、 --prefix パラメーター値として文字列を渡します。

--num-results パラメーターを使用して、要求によって返されるコンテナーの数を制限できます。 Azure Storage では、1 回の一覧表示操作によって返されるコンテナーの数が 5000 に制限されます。 この制限により、管理可能な量のデータが確実に取得されます。 返されるコンテナーの数が --num-results 値またはサービスの制限を超えた場合は、継続トークンが返されます。 このトークンを使用すると、複数の要求を使用して任意の数のコンテナーを取得できます。

--query パラメーターを使用して、コマンドの結果に対して JMESPath クエリを実行することもできます。 JMESPath は、CLI 出力から返されるデータを選択および変更できる JSON のクエリ言語です。 クエリは、書式設定する前に JSON 出力で実行されます。 詳細については、「 JMESPath クエリを使用して Azure CLI コマンド出力にクエリを実行する方法」を参照してください。

次の例では、最初にコンテナーの最大数を一覧表示します (サービスの制限に従います)。 次に、パラメーターと --num-results パラメーターの値を指定することで、名前がプレフィックス コンテナーで始まる 3 つの--prefixを一覧表示します。 最後に、 --prefix パラメーターに既知のコンテナー名を指定することで、1 つのコンテナーが一覧表示されます。

az storage container list の詳細を参照してください。

#!/bin/bash
storageAccount="<storage-account>"
containerPrefix="demo-container-"
containerName="demo-container-1"
numResults="3"

# Approach 1: List maximum containers
az storage container list \
    --account-name $storageAccount \
    --auth-mode login

# Approach 2: List a defined number of named containers
az storage container list \
    --prefix $containerPrefix \
    --num-results $numResults \
    --account-name $storageAccount \
    --auth-mode login

# Approach 3: List an individual container
az storage container list \
    --prefix $containerPrefix \
    --query "[?name=='$containerName']" \
    --account-name $storageAccount \
    --auth-mode login

コンテナーのプロパティとメタデータの読み取り

コンテナーは、システム プロパティとユーザー定義メタデータの両方を公開します。 システム プロパティは、各 BLOB ストレージ リソースに存在します。 一部のプロパティは読み取り専用ですが、他のプロパティは読み取りまたは設定できます。 内部では、一部のシステム プロパティは特定の標準 HTTP ヘッダーにマップされます。

ユーザー定義メタデータは、BLOB ストレージ リソースに指定する 1 つ以上の名前と値のペアで構成されます。 メタデータを使用して、リソースに追加の値を格納できます。 メタデータ値は独自の目的にのみ使用され、リソースの動作には影響しません。

コンテナーのプロパティ

Azure CLI でコンテナーのプロパティを表示するには、 az storage container show コマンドを呼び出します。

次の例では、最初の方法では、1 つの名前付きコンテナーのプロパティが表示されます。 その後、 demo-container- プレフィックスを持つすべてのコンテナーを取得し、それらを反復処理してプロパティを一覧表示します。 プレースホルダーの値は、必ず独自の値に置き換えてください。

#!/bin/bash
storageAccount="<storage-account>"
containerPrefix="demo-container-"
containerName="demo-container-1"

# Show a named container's properties
az storage container show \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# List several containers and show their properties
containerList=$(az storage container list \
    --query "[].name" \
    --prefix $containerPrefix \
    --account-name $storageAccount \
    --auth-mode login \
    --output tsv)

for row in $containerList
do
  tmpRow=$(echo $row | sed -e 's/\r//g')
  az storage container show --name $tmpRow --account-name $storageAccount --auth-mode login
done

コンテナー メタデータの読み取りと書き込み

ストレージ アカウント内に何千ものオブジェクトを持つユーザーは、メタデータに基づいて特定のコンテナーをすばやく見つけることができます。 メタデータを読み取るために、 az storage container metadata show コマンドを使用します。 メタデータを更新するには、 az storage container metadata update コマンドを呼び出す必要があります。 このメソッドは、スペース区切りのキーと値のペアのみを受け入れます。 詳細については、 az storage container metadata のドキュメントを参照してください。

次の最初の例では、名前付きコンテナーのメタデータを更新して取得します。 2 番目の例では、 -prefix 値に一致するコンテナーの一覧を反復処理します。 偶数を含む名前を持つコンテナーには、メタデータ変数に含まれる値を含む メタデータ が設定されています。

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
containerPrefix="demo-container-"

# Create metadata string
metadata="key=value pie=delicious"

# Update named container metadata
az storage container metadata update \
    --name $containerName \
    --metadata $metadata \
    --account-name $storageAccount \
    --auth-mode login

# Display metadata
az storage container metadata show \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# Get list of containers
containerList=$(az storage container list \
    --query "[].name" \
    --prefix $containerPrefix \
    --account-name $storageAccount \
    --auth-mode login \
    --output tsv)

# Update and display metadata
for row in $containerList
do
  #Get the container's number
  tmpName=$(echo $row | sed -e 's/\r//g')
  if [ `expr ${tmpName: ${#containerPrefix}} % 2` == 0 ]
  then
    az storage container metadata update \
        --name $tmpName \
        --metadata $metadata \
        --account-name $storageAccount \
        --auth-mode login
    
    echo $tmpName

    az storage container metadata show \
    --name $tmpName \
    --account-name $storageAccount \
    --auth-mode login    
  fi
done

コンテナーを削除する

ユース ケースに応じて、 az storage container delete コマンドを使用して、1 つのコンテナーまたはコンテナーのグループを削除できます。 コンテナーの一覧を削除する場合は、次の例に示すように条件付き操作を使用する必要があります。

Warnung

次の例を実行すると、コンテナーと BLOB が完全に削除される場合があります。 Microsoft では、コンテナーのソフト削除を有効にして、コンテナーと BLOB が誤って削除されないように保護することをお勧めします。 詳細については、「 コンテナーの論理的な削除」を参照してください。

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
containerPrefix="demo-container-"

# Delete a single named container
az storage container delete \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# Delete containers by iterating a loop
list=$(az storage container list \
    --query "[].name" \
    --prefix $containerPrefix \
    --account-name $storageAccount \
    --auth-mode login \
    --output tsv)
for row in $list
do
    tmpName=$(echo $row | sed -e 's/\r//g')
    az storage container delete \
    --name $tmpName \
    --account-name $storageAccount \
    --auth-mode login
done

ストレージ アカウントでコンテナーの論理的な削除が有効になっている場合は、削除されたコンテナーを取得できます。 ストレージ アカウントの論理的な削除データ保護オプションが有効になっている場合、 --include-deleted パラメーターは、関連付けられている保持期間内に削除されたコンテナーを返します。 --include-deleted パラメーターは、--prefix パラメーターと共に使用する場合にのみコンテナーを返すために使用できます。 論理的な削除の詳細については、 コンテナーの論理的な削除 に関する記事を参照してください。

次の例を使用して、ストレージ アカウントの関連する保持期間内に削除されたコンテナーの一覧を取得します。

#!/bin/bash
storageAccount="<storage-account>"
containerPrefix="demo-container-"

# Retrieve a list of containers including those recently deleted
az storage container list \
    --prefix $containerPrefix \
    --include-deleted \
    --account-name $storageAccount\
    --auth-mode login

ソフト削除されたコンテナーを復元する

コンテナーの一覧表示 」セクションで説明したように、ストレージ アカウントで論理的なデータ削除保護オプションを構成できます。 有効にすると、関連付けられている保持期間内に削除されたコンテナーを復元できます。 この例を実行する前に、ソフト削除を有効にし、少なくとも 1 つのストレージ アカウントで設定する必要があります。

次の例では、 az storage container restore コマンドを使用して論理的に削除されたコンテナーを復元する方法について説明します。 コンテナーの正しいバージョンが確実に復元されるように、 --name パラメーターと --version パラメーターの値を指定する必要があります。 バージョン番号がわからない場合は、最初の例に示すように、 az storage container list コマンドを使用して取得できます。 2 番目の例では、特定のストレージ アカウント内のすべての削除済みコンテナーを検索して復元します。

論理的な削除データ保護オプションの詳細については、コンテナーの論理的な 削除 に関する記事を参照してください。

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"

# Restore an individual named container
containerVersion=$(az storage container list \
    --account-name $storageAccount \
    --query "[?name=='$containerName'].[version]" \
    --auth-mode login \
    --output tsv \
    --include-deleted | sed -e 's/\r//g')

az storage container restore \
    --name $containerName \
    --deleted-version $containerVersion \
    --account-name $storageAccount \
    --auth-mode login

# Restore a list of deleted containers
containerList=$(az storage container list \
    --account-name $storageAccount \
    --include-deleted \
    --auth-mode login \
    --query "[?deleted].{name:name,version:version}" \
    -o json)

for row in $(echo "${containerList}" | jq -c '.[]' )
do
    tmpName=$(echo $row | jq -r '.name')
    tmpVersion=$(echo $row | jq -r '.version')
    az storage container restore \
        --account-name $storageAccount \
        --name $tmpName \
        --deleted-version $tmpVersion \
        --auth-mode login
done

コンテナーの Shared Access Signature を取得する

Shared Access Signature (SAS) は、Azure リソースへの委任されたアクセスを提供します。 SAS を使用すると、クライアントがデータにアクセスする方法をきめ細かく制御できます。 たとえば、クライアントで使用できるリソースを指定できます。 また、クライアントが実行できる操作の種類を制限し、SAS が有効な間隔を指定することもできます。

SAS は、通常はアクセス許可を持たないクライアントに一時的かつ安全なアクセスを提供するために一般的に使用されます。 サービスまたはアカウントの SAS を生成するには、 --account-name パラメーターと --account-key パラメーターの値を指定する必要があります。 このシナリオの例としては、ユーザーが自分のデータをストレージ アカウントに読み書きできるサービスがあります。

Azure Storage では、ユーザー委任、サービス、アカウント SAS の 3 種類の共有アクセス署名がサポートされています。 Shared Access Signature の詳細については、「Shared Access Signature を 使用して Azure Storage リソースへの制限付きアクセスを許可する 」の記事を参照してください。

注意事項

有効な SAS を所有するすべてのクライアントは、その SAS で許可されているストレージ アカウント内のデータにアクセスできます。 悪意のある、または意図しない使用から SAS を保護することが重要です。 SAS の配布には裁量を使用し、侵害された SAS を取り消す計画を立てます。

次の例は、 az storage container generate-sas コマンドを使用して特定のコンテナーのサービス SAS を構成するプロセスを示しています。 サービス SAS を生成しているため、この例では最初に、 --account-key 値として渡すストレージ アカウント キーを取得します。

この例では、開始時刻と有効期限、プロトコルを使用して SAS を構成します。 また、 パラメーターを使用して、SAS の削除読み取り、書き込み--permissionsのアクセス許可も指定します。 アクセス許可の完全な表については、 サービス SAS の作成 に関する記事を参照してください。

BLOB SAS トークンの値をコピーして、セキュリティで保護された場所に貼り付けます。 これは 1 回だけ表示され、Bash を閉じた後は取得できません。 SAS URL を構築するには、ストレージ サービスの URL に SAS トークン (URI) を追加します。

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
permissions="drwl"
expiry=`date -u -d "30 minutes" '+%Y-%m-%dT%H:%MZ'`

accountKey=$(az storage account keys list \
    --account-name $storageAccount \
    --query "[?permissions == 'FULL'].[value]" \
    --output tsv)

accountKey=$( echo $accountKey | cut -d' ' -f1 )
 
az storage container generate-sas \
    --name $containerName \
    --https-only \
    --permissions dlrw \
    --expiry $expiry \
    --account-key $accountKey \
    --account-name $storageAccount

Azure CLI によって返される SAS トークンには、URL クエリ文字列の区切り文字 ('?') は含まれません。 SAS トークンをリソース URL に追加する場合は、SAS トークンを追加する前に、リソース URL に区切り文字を追加することを忘れないでください。

次のステップ

このハウツー記事では、Blob Storage でコンテナーを管理する方法について説明しました。 Azure CLI を使用した BLOB ストレージの操作の詳細については、以下のオプションを選択してください。