Gestire i contenitori BLOB con l'interfaccia della riga di comando di Azure

Microsoft Archiviazione BLOB di Azure consente di archiviare grandi quantità di dati di oggetti non strutturati. È possibile usare l'archiviazione BLOB per raccogliere o esporre dati multimediali, contenuti o applicazioni agli utenti. Poiché tutti i dati BLOB vengono archiviati all'interno di contenitori, è necessario creare un contenitore di archiviazione prima di iniziare a caricare i dati. Per altre informazioni sull'archiviazione BLOB, vedere Introduzione all'archiviazione BLOB di Azure.

L'interfaccia della riga di comando di Azure è l'esperienza della riga di comando multipiattaforma di Azure per la gestione delle risorse di Azure. È possibile usarla nel browser con Azure Cloud Shell. È anche possibile installarlo in macOS, Linux o Windows ed eseguirlo localmente dalla riga di comando.

Questo articolo illustra come usare l'interfaccia della riga di comando di Azure con Bash per usare gli oggetti contenitore.

Prerequisiti

Per accedere ad Archiviazione di Azure è necessaria una sottoscrizione di Azure. Se non si ha già una sottoscrizione, creare un account gratuito prima di iniziare.

L'accesso ad Archiviazione di Azure viene eseguito esclusivamente tramite un account di archiviazione. Per questa guida introduttiva, creare rapidamente un account di archiviazione usando il portale di Azure, Azure PowerShell o l'interfaccia della riga di comando di Azure. Per informazioni sulla creazione di un account di archiviazione, vedere Creare un account di archiviazione.

Preparare l'ambiente per l'interfaccia della riga di comando di Azure

  • È sempre consigliabile installare la versione più recente dell'interfaccia della riga di comando di Azure. Se si usa Azure Cloud Shell, la versione più recente è già installata.

Autorizzare l'accesso all'archiviazione BLOB

È possibile autorizzare l'accesso all'archiviazione BLOB dall'interfaccia della riga di comando di Azure con le credenziali di Microsoft Entra o usando la chiave di accesso dell'account di archiviazione. È consigliabile usare le credenziali di Microsoft Entra e gli esempi di questo articolo usano esclusivamente l'ID Microsoft Entra.

I comandi dell'interfaccia della riga di comando di Azure per le operazioni sui dati dell'archiviazione BLOB supportano il parametro --auth-mode, che consente di specificare come autorizzare una determinata operazione. Impostare il --auth-mode parametro su login per autorizzare con le credenziali di Microsoft Entra. Per altre informazioni, vedere Autorizzare l'accesso ai dati di BLOB o code con l'interfaccia della riga di comando di Azure.

Eseguire il login comando per aprire un browser e connettersi alla sottoscrizione di Azure.

az login

Creazione di un contenitore

Per creare un contenitore con l'interfaccia della riga di comando di Azure, chiamare il comando az storage container create . Nell'esempio seguente vengono illustrate tre opzioni per la creazione di contenitori BLOB con il az storage container create comando . Il primo approccio crea un singolo contenitore, mentre i due approcci rimanenti usano operazioni di scripting Bash per automatizzare la creazione di contenitori.

Per usare questo esempio, specificare i valori per le variabili e assicurarsi di aver eseguito l'accesso. Ricordarsi di sostituire i valori segnaposto tra parentesi quadre con i propri valori.

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

Elencare i contenitori

Usare il az storage container list comando per recuperare un elenco di contenitori di archiviazione. Per restituire un elenco di contenitori i cui nomi iniziano con una determinata stringa di caratteri, passare la stringa come valore del --prefix parametro.

Il --num-results parametro può essere usato per limitare il numero di contenitori restituiti dalla richiesta. Archiviazione di Azure limita il numero di contenitori restituiti da una singola operazione di elenco a 5000. Questo limite garantisce che vengano recuperate quantità gestibili di dati. Se il numero di contenitori restituiti supera il --num-results valore o il limite del servizio, viene restituito un token di continuazione. Questo token consente di usare più richieste per recuperare un numero qualsiasi di contenitori.

È anche possibile usare il --query parametro per eseguire una query JMESPath sui risultati dei comandi. JMESPath è un linguaggio di query per JSON che consente di selezionare e modificare i dati restituiti dall'output dell'interfaccia della riga di comando. Le query vengono eseguite nell'output JSON prima di poter essere formattate. Per altre informazioni, vedere Come eseguire query sull'output dei comandi dell'interfaccia della riga di comando di Azure usando una query JMESPath.

Nell'esempio seguente viene innanzitutto elencato il numero massimo di contenitori (soggetto al limite del servizio). Elenca quindi tre contenitori i cui nomi iniziano con il contenitore del prefisso, specificando i valori per i --num-results parametri e --prefix . Infine, viene elencato un singolo contenitore specificando un nome di contenitore noto al --prefix parametro .

Altre informazioni su 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

Leggere le proprietà e i metadati del contenitore

Un contenitore espone sia le proprietà di sistema che i metadati definiti dall'utente. Le proprietà di sistema esistono in ogni risorsa di archiviazione BLOB. Alcune proprietà sono di sola lettura, mentre altre possono essere lette o impostate. Sotto le quinte, alcune proprietà di sistema eseguono il mapping a determinate intestazioni HTTP standard.

I metadati definiti dall'utente sono costituiti da una o più coppie nome-valore specificate per una risorsa di archiviazione BLOB. È possibile usare i metadati per archiviare valori aggiuntivi con la risorsa. I valori dei metadati sono solo a scopo personale e non influiscono sul comportamento della risorsa.

Proprietà del contenitore

Per visualizzare le proprietà di un contenitore con l'interfaccia della riga di comando di Azure, chiamare il comando az storage container show .

Nell'esempio seguente, il primo approccio visualizza le proprietà di un singolo contenitore denominato. Successivamente, recupera tutti i contenitori con il prefisso demo-container- e li scorre, elencandone le proprietà. Ricordarsi di sostituire i valori segnaposto con valori personalizzati.

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

Leggere e scrivere i metadati del contenitore

Gli utenti che hanno molte migliaia di oggetti all'interno dell'account di archiviazione possono individuare rapidamente contenitori specifici in base ai metadati. Per leggere i metadati, si userà il az storage container metadata show comando . Per aggiornare i metadati, è necessario chiamare il az storage container metadata update comando . Il metodo accetta solo coppie chiave-valore separate da spazi. Per altre informazioni, vedere la documentazione relativa ai metadati del contenitore di archiviazione.

Il primo esempio seguente aggiorna e quindi recupera i metadati di un contenitore denominato. Il secondo esempio scorre l'elenco di contenitori che corrispondono al -prefix valore. I contenitori con nomi contenenti numeri pari hanno il set di metadati con i valori contenuti nella variabile di metadati .

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

Eliminare i contenitori

A seconda del caso d'uso, è possibile eliminare un singolo contenitore o un gruppo di contenitori con il az storage container delete comando . Quando si elimina un elenco di contenitori, è necessario usare le operazioni condizionali, come illustrato negli esempi seguenti.

Avviso

L'esecuzione degli esempi seguenti può eliminare definitivamente contenitori e BLOB. Microsoft consiglia di abilitare l'eliminazione temporanea dei contenitori per proteggere i contenitori e i BLOB dall'eliminazione accidentale. Per altre info, vedi Eliminazione temporanea per i contenitori.

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

Se l'eliminazione temporanea del contenitore è abilitata per l'account di archiviazione, è possibile recuperare i contenitori eliminati. Se l'opzione di protezione dei dati di eliminazione temporanea dell'account di archiviazione è abilitata, il --include-deleted parametro restituirà i contenitori eliminati entro il periodo di conservazione associato. Il --include-deleted parametro può essere usato solo per restituire i contenitori quando viene usato con il --prefix parametro . Per altre informazioni sull'eliminazione temporanea, vedere l'articolo Eliminazione temporanea per contenitori .

Usare l'esempio seguente per recuperare un elenco di contenitori eliminati entro il periodo di conservazione associato all'account di archiviazione.

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

Ripristinare un contenitore eliminato predefinito

Come indicato nella sezione Elenca contenitori , è possibile configurare l'opzione di protezione dei dati di eliminazione temporanea nell'account di archiviazione. Se abilitata, è possibile ripristinare i contenitori eliminati entro il periodo di conservazione associato. Prima di seguire questo esempio, è necessario abilitare l'eliminazione temporanea e configurarla in almeno uno degli account di archiviazione.

Gli esempi seguenti illustrano come ripristinare un contenitore eliminato predefinito con il az storage container restore comando . Sarà necessario specificare i valori per i --name parametri e --version per assicurarsi che venga ripristinata la versione corretta del contenitore. Se non si conosce il numero di versione, è possibile usare il az storage container list comando per recuperarlo come illustrato nel primo esempio. Il secondo esempio trova e ripristina tutti i contenitori eliminati all'interno di un account di archiviazione specifico.

Per altre informazioni sull'opzione di protezione dei dati di eliminazione temporanea, vedere l'articolo Eliminazione temporanea per contenitori .

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

Ottenere una firma di accesso condiviso per un contenitore

Una firma di accesso condiviso fornisce l'accesso delegato alle risorse di Azure. Una firma di accesso condiviso offre un controllo granulare sul modo in cui un client può accedere ai dati. Ad esempio, è possibile specificare le risorse disponibili per il client. È anche possibile limitare i tipi di operazioni che il client può eseguire e specificare l'intervallo in cui la firma di accesso condiviso è valida.

Una firma di accesso condiviso viene comunemente usata per fornire l'accesso temporaneo e sicuro a un client che normalmente non dispone delle autorizzazioni. Per generare una firma di accesso condiviso del servizio o dell'account, è necessario specificare i valori per i --account-name parametri e --account-key . Un esempio di questo scenario è un servizio che consente agli utenti di leggere e scrivere i propri dati nell'account di archiviazione.

Archiviazione di Azure supporta tre tipi di firme di accesso condiviso: delega utente, servizio e firma di accesso condiviso dell'account. Per altre informazioni sulle firme di accesso condiviso, vedere l'articolo Concedere l'accesso limitato alle risorse Archiviazione di Azure tramite firme di accesso condiviso.

Attenzione

Qualsiasi client che possiede una firma di accesso condiviso valido può accedere ai dati nell'account di archiviazione, come consentito da tale firma di accesso condiviso. È importante proteggere una firma di accesso condiviso da usi dannosi o imprevisti. Usare la discrezione nella distribuzione di una firma di accesso condiviso e disporre di un piano per revocare una firma di accesso condiviso compromessa.

L'esempio seguente illustra il processo di configurazione di una firma di accesso condiviso del servizio per un contenitore specifico usando il az storage container generate-sas comando . Poiché genera una firma di accesso condiviso del servizio, l'esempio recupera prima la chiave dell'account di archiviazione da passare come --account-key valore.

L'esempio configurerà la firma di accesso condiviso con orari di inizio e scadenza e un protocollo. Specifica inoltre le autorizzazioni di eliminazione, lettura, scrittura ed elenco nella firma di accesso condiviso usando il --permissions parametro . È possibile fare riferimento alla tabella completa delle autorizzazioni nell'articolo Creare una firma di accesso condiviso del servizio.

Copiare e incollare il valore del token di firma di accesso condiviso BLOB in un percorso sicuro. Verrà visualizzato una sola volta e non può essere recuperato dopo la chiusura di Bash. Per costruire l'URL della firma di accesso condiviso, aggiungere il token di firma di accesso condiviso (URI) all'URL del servizio di archiviazione.

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

Nota

Il token di firma di accesso condiviso restituito dall'interfaccia della riga di comando di Azure non include il carattere delimitatore ('?') per la stringa di query URL. Se si aggiunge il token di firma di accesso condiviso a un URL della risorsa, ricordarsi di aggiungere il carattere delimitatore all'URL della risorsa prima di aggiungere il token di firma di accesso condiviso.

Passaggi successivi

In questo articolo si è appreso come gestire i contenitori in Blob Archiviazione. Per altre informazioni sull'uso dell'archiviazione BLOB tramite l'interfaccia della riga di comando di Azure, selezionare un'opzione di seguito.