共用方式為


使用 Azure CLI 管理 Blob 容器

Microsoft Azure Blob 儲存體可讓您儲存大量非結構化物件資料。 您可以使用 Blob 儲存體來收集媒體、內容或應用程式資料或公開給使用者。 因為所有 Blob 資料都儲存在容器內,所以您必須先建立儲存體容器,才能開始上傳資料。 若要深入瞭解 Blob 儲存體,請閱讀 Azure Blob 儲存體簡介

Azure CLI 是 Azure 用於管理 Azure 資源的跨平臺命令列體驗。 您可以在瀏覽器中使用它搭配 Azure Cloud Shell。 您也可以將其安裝在 macOS、Linux 或 Windows 上,並從命令列在本地執行它。

在本操作說明文章中,您將瞭解如何搭配 Bash 使用 Azure CLI 來處理容器物件。

先決條件

若要存取 Azure 儲存體,您需要 Azure 訂用帳戶。 如果您還沒有訂用帳戶,請先建立免費帳戶,再開始操作。

Azure 儲存體的所有存取都是透過儲存體帳戶進行。 在本快速入門中,請使用 Azure 入口網站、Azure PowerShell 或 Azure CLI 建立儲存體帳戶。 如需建立儲存體帳戶的說明,請參閱 建立儲存體帳戶

備妥環境以使用 Azure CLI

  • 安裝最新版本的 Azure CLI 一律是個好主意。 如果使用 Azure Cloud Shell,則已安裝最新版本。

授權存取 Blob 儲存體

您可以使用 Microsoft Entra 認證或使用儲存體帳戶存取金鑰,從 Azure CLI 授權存取 Blob 儲存體。 建議使用 Microsoft Entra 認證,而本文的範例會專門使用 Microsoft Entra ID。

針對 Blob 儲存體進行資料作業的 Azure CLI 命令支援參數 --auth-mode ,可讓您指定如何授權指定的作業。 將參數設定 --auth-modelogin 以使用 Microsoft Entra 認證進行授權。 如需詳細資訊,請參閱使用 Azure CLI 授與 Blob 或佇列資料的存取權

執行 login 命令以開啟瀏覽器並連線到您的 Azure 訂用帳戶。

az login

建立容器

若要使用 Azure CLI 建立容器,請呼叫 az storage container create 命令。下列範例說明使用命令建立 az storage container create Blob 容器的三個選項。 第一種方法會建立單一容器,而其餘兩種方法會使用 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 儲存體會將單一清單作業所傳回的容器數目限制為 5000。 此限制可確保擷取可管理的資料量。 如果傳回的儲存器數目超過 --num-results 值或服務限制,則會傳回接續記號。 此權杖可讓您使用多個要求來擷取任意數目的容器。

您也可以使用參數 --query 對命令結果執行 JMESPath 查詢 。 JMESPath 是一種 JSON 的查詢語言,可讓您選取和修改從 CLI 輸出傳回的資料。 查詢會在格式化 JSON 輸出之前執行。 如需詳細資訊,請參閱 如何使用 JMESPath 查詢查詢 Azure CLI 命令輸出

下列範例首先列出容器數目上限 (受服務限制限制) 。 接下來,其列出三個名稱以container-為開頭的容器,並提供--num-results--prefix參數的值。 最後,透過向參數提供已知的容器名稱 --prefix 來列出單一容器。

閱讀更多有關 az storage 容器清單 的資訊。

#!/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 儲存體資源指定的一或多個名稱值組所組成。 您可以使用中繼資料來儲存資源的額外值。 中繼資料值僅供您自己使用,並不會影響資源的運作方式。

容器屬性

若要使用 Azure CLI 顯示容器的屬性,請呼叫 az storage container show 命令。

在下列範例中,第一種方法會顯示單一具名容器的屬性。 之後,它會擷取所有具有 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 meta data 檔。

下列第一個範例會更新並擷取具名容器的中繼資料。 第二個範例會逐一查看符合值 -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 刪除單一容器或一組容器。 刪除容器清單時,您必須使用條件式作業,如下列範例所示。

警告

執行下列範例可能會永久刪除容器和 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

還原已虛刪除的容器

[列出容器] 一節所述,您可以在儲存體帳戶上設定軟刪除資料保護選項。 啟用時,可以還原在相關聯保留期間內刪除的容器。 要遵循此範例之前,您需要先啟用軟刪除,並且在至少一個儲存體帳戶上進行設定。

下列範例說明如何使用命令 az storage container restore 還原軟刪除的容器。 您必須提供--name--version參數的值,以確保還原正確版本的容器。 如果您不知道版本號碼,可以使用 az storage container list 命令來擷取它,如第一個範例所示。 第二個範例會尋找並還原特定儲存體帳戶內所有已刪除的容器。

若要深入瞭解虛刪除資料保護選項,請參閱 容器的虛刪除 一文。

#!/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

取得容器的共用存取簽章

共用存取簽章 (SAS) 提供 Azure 資源的委派存取權。 SAS 可讓您精細控制用戶端如何存取您的資料。 例如,您可以指定用戶端可以使用哪些資源。 您也可以限制用戶端可以執行的作業類型,並指定 SAS 有效的間隔。

SAS 通常用來為通常沒有許可權的用戶端提供暫時且安全的存取。 若要產生服務或帳戶 SAS,您必須提供 --account-name--account-key 參數的值。 此案例的範例是允許使用者讀取和寫入自己的資料至您的儲存體帳戶的服務。

Azure 儲存體支援三種類型的共用存取簽章:使用者委派、服務和帳戶 SAS。 如需共用存取簽章的詳細資訊,請參閱 使用共用存取簽章授與 Azure 儲存體資源的有限存取權 一文。

謹慎

任何擁有有效 SAS 的客戶端都可以在該 SAS 所允許的儲存帳戶中存取資料。 請務必保護 SAS 免於惡意或非預期的使用。 在散發 SAS 時請謹慎使用,並備妥方案以撤銷遭盜用的 SAS。

下列範例說明如何使用 az storage container generate-sas 命令為特定容器配置服務 SAS 的流程。 因為它會產生服務 SAS,所以範例會先擷取儲存體帳戶金鑰以傳遞為 --account-key 值。

此範例會設定 SAS 的開始和到期時間,以及通訊協定。 它也會使用參數指定 SAS 中的刪除讀取寫入--permissions權限。 您可以在 建立服務 SAS 一文中參考完整的許可權資料表。

將 Blob SAS 權杖值複製並貼到安全位置。 它只會顯示一次,一旦 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 儲存體中管理容器。 若要深入瞭解如何使用 Azure CLI 使用 Blob 儲存體,請選取下列選項。