次の方法で共有


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

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

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

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

前提条件

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

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

Azure CLI の環境を準備する

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

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

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

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

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

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

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

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

Blob Storage を対象とするデータの操作では、Azure CLI コマンドで --auth-mode パラメーターがサポートされます。特定の操作を承認する方法をパラメーターで指定できます。 Microsoft Entra の資格情報を使用して承認するには、--auth-mode パラメーターを login に設定します。 詳細については、「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 パラメーターと --prefix パラメーターの値を指定することで、名前がプレフィックス container- で始まる 3 つのコンテナーを一覧表示します。 最後に、--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 値に一致するコンテナーの一覧を反復処理しています。 名前に偶数番号が含まれるコンテナーは、metadata 変数に格納されている値が設定されたメタデータを持ちます。

#!/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 つのコンテナーまたはコンテナーのグループを削除できます。 コンテナーの一覧を削除するときには、下記の例に示すように、条件付きの操作を使用する必要があります。

警告

下記の例を実行すると、コンテナーと BLOB が完全に削除される可能性があります。 誤ってコンテナーや 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 では、3 つの種類の Shared Access Signature がサポートされています。ユーザー委任、サービス、およびアカウント SAS です。 Shared Access Signature の詳細については、Shared Access Signatures を使用して Azure Storage リソースへの制限付きアクセスを許可することに関するページを参照してください。

注意

有効な SAS を所有するすべてのクライアントは、その SAS で許可されているストレージ アカウントのデータにアクセスできます。 SAS を悪意のある、または意図しない用途から保護することが重要です。 SAS の配布は慎重に行い、侵害された SAS を失効させるための計画を用意しておいてください。

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

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

BLOB の SAS トークンの値をコピーして安全な場所に貼り付けます。 これは 1 回だけ表示され、Bash が閉じられると取得できません。 SAS URL を作成するには、SAS トークン (URI) をストレージ サービスの URL に追加します。

#!/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 ストレージ操作の詳細については、以下のオプションを選択してください。