Condividi tramite


Gestire BLOB in blocchi con l'interfaccia della riga di comando di Azure

L'archiviazione BLOB supporta BLOB in blocchi, BLOB di aggiunta e BLOB di pagine. I BLOB in blocchi sono ottimizzati per il caricamento efficiente di grandi quantità di dati. I BLOB in blocchi sono ideali per l'archiviazione di immagini, documenti e altri tipi di dati non sottoposti a operazioni di lettura e scrittura casuali. Questo articolo illustra come usare i BLOB in blocchi.

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

  • Questo articolo richiede l'interfaccia della riga di comando di Azure versione 2.0.46 o successiva. Se si usa Azure Cloud Shell, la versione più recente è già installata.

Autorizzare l'accesso all'archiviazione BLOB

È possibile autorizzare l'accesso all'Archivio BLOB dall'interfaccia della riga di comando di Azure con le credenziali di Microsoft Entra o usando una 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 parametro --auth-mode su accesso per autorizzare l'accesso con le credenziali di Microsoft Entra. Solo le operazioni sui dati dell'archiviazione BLOB supportano il parametro --auth-mode. Le operazioni di gestione, ad esempio la creazione di un gruppo di risorse o di un account di archiviazione, usano automaticamente le credenziali di Microsoft Entra per l'autorizzazione. Per altre informazioni, vedere Scegliere come autorizzare l'accesso ai dati di BLOB con l'interfaccia della riga di comando di Azure.

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


az login

Creazione di un contenitore

Tutti i dati BLOB vengono archiviati all'interno di contenitori, quindi è necessaria almeno una risorsa contenitore prima di poter caricare i dati. Se necessario, usare l'esempio seguente per creare un contenitore di archiviazione. Per altre informazioni, vedere Gestione dei contenitori BLOB tramite l'interfaccia della riga di comando di Azure.


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

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

Quando si usano gli esempi inclusi in questo articolo, è necessario sostituire i valori segnaposto tra parentesi quadre con i propri valori. Per altre informazioni sull'accesso ad Azure, vedere Accedere con l'interfaccia della riga di comando di Azure.

Caricare i BLOB

L'interfaccia della riga di comando di Azure offre comandi che eseguono operazioni su una o più risorse, a seconda dei requisiti.

Per caricare un file in un BLOB in blocchi, passare i valori dei parametri necessari al comando az storage blob upload. Specificare il percorso di origine e il nome del file con il parametro --file e il nome del contenitore di destinazione con il parametro --container-name. Sarà anche necessario specificare il parametro --account-name. Questo comando crea un nuovo BLOB o sovrascrive il BLOB originale, se esiste già.

È possibile usare il comando az storage blob upload-batch per caricare in modo ricorsivo più BLOB in un contenitore di archiviazione. È possibile usare criteri di ricerca nome file Unix per specificare un intervallo di file da caricare con il parametro --pattern. I criteri supportati sono *, ?, [seq] e [!seq]. Per altre informazioni, vedere la documentazione di Python su Criteri di ricerca nome file Unix.

Nell'esempio seguente, la prima operazione usa il comando az storage blob upload per caricare un singolo file con denominazione. Il contenitore di archiviazione di origine e di destinazione viene specificato con i parametri --file e --container-name.

La seconda operazione illustra l'uso del comando az storage blob upload-batch per caricare più file. Il parametro --if-modified-since garantisce che vengano caricati solo i file modificati negli ultimi sette giorni. Il valore fornito da questo parametro deve essere espresso in formato UTC.


#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"
lastModified=$(date +%Y:%m:%d -d "7 days ago")

path="C:\\temp\\"
filename="demo-file.txt"
imageFiles="*.png"
file="$path$filename"

#Upload a single named file
az storage blob upload \
    --file $file \
    --container-name $containerName \
    --account-name $storageAccount \
    --auth-mode login

#Upload multiple image files recursively
az storage blob upload-batch \
    --destination $containerName \
    --source $path \
    --pattern *.png \
    --account-name $storageAccount \
    --auth-mode login \
    --if-modified-since $lastModified

Elencare i BLOB

Per impostazione predefinita, il comando az storage blob list elenca tutti i BLOB archiviati in un contenitore. È possibile usare vari approcci per perfezionare l'ambito della ricerca. Non esiste alcuna restrizione sul numero di contenitori o BLOB che un account di archiviazione può avere. Per evitare di dover potenzialmente recuperare migliaia di BLOB, è consigliabile limitare la quantità di dati restituiti.

Usare il parametro --prefix per selezionare un singolo file noto o un intervallo di file i cui nomi iniziano con una stringa definita. È possibile specificare una directory virtuale come parte del --prefix parametro .

Per impostazione predefinita, in un'operazione di elenco vengono restituiti solo BLOB. In alcuni scenari, potrebbe essere necessario passare un valore per il --include parametro per restituire tipi aggiuntivi di oggetti, ad esempio BLOB eliminati emergenza, snapshot e versioni. Questi valori possono essere combinati per restituire più tipi di oggetto.

Il --num-results parametro può essere usato per limitare il numero di BLOB restituiti da un contenitore. A tutte le risorse di Azure è imposto un limite di servizio di 5.000. Questo limite garantisce che vengano recuperate quantità gestibili di dati e che le prestazioni non siano interessate. Se il numero di BLOB restituiti supera il valore --num-results o il limite di servizio, viene restituito un token di continuazione. Questo token consente di usare più richieste per recuperare un numero qualsiasi di BLOB. Altre informazioni sono disponibili in Enumerazione di risorse BLOB.

L'esempio seguente illustra diversi approcci usati per fornire un elenco di BLOB. Il primo approccio elenca tutti i BLOB all'interno di un contenitore specificato. Il secondo approccio usa il --prefix parametro per elencare tutti i BLOB nei contenitori che iniziano con il prefisso specificato. Il terzo approccio usa il --num-results parametro per limitare i risultati restituiti e il --show-next-marker parametro per includere il token di continuazione nei risultati. Quando nei risultati è presente un token di continuazione, viene passato alla chiamata successiva a az storage blob list per recuperare il set di risultati successivo.

Per altre informazioni, vedere le informazioni di riferimento sull'elenco dei BLOB di archiviazione az.

#!/bin/bash
storageAccount="<storage-account>"
containerName="<container-name>"
blobPrefix="<prefix-string>"
numResults=5

#Approach 1: List all blobs in a container by name.

az storage blob list \
    --account-name $storageAccount \
    --container $containerName \
    --query "[].name" \
    --auth-mode login \
    --output tsv

#Approach 2: Use the --prefix parameter to list blobs starting with specified prefix.

az storage blob list \
    --account-name $storageAccount \
    --container $containerName \
    --prefix $blobPrefix \
    --query "[].name" \
    --auth-mode login \
    --output tsv

#Approach 3: Use the continuation token to return the complete set of results.

get_blobs() {
    if [ -z "$nextMarker" ]; then
        az storage blob list --container-name $containerName --num-results $numResults --account-name $storageAccount --show-next-marker --only-show-errors --auth-mode login
    else
        az storage blob list --container-name $containerName --num-results $numResults --marker $nextMarker --account-name $storageAccount --show-next-marker --only-show-errors --auth-mode login
    fi
}
 
total=0
nextMarker=""
while true; do
    blobs=$(get_blobs $containerName $numResults $storageAccount $nextMarker) 
    nextMarker=""
    blobsLength=$(echo $blobs | jq length)
    
    if [ $blobsLength -le 0 ]; then
        break
    fi
    
    blobIndex=0
    while read blob; do
        if [ $blobIndex -eq $(($blobsLength-1)) ]; 
        then
            nextMarker="$(echo $blob | jq -r .nextMarker)"
        else
            blobName=$(echo $blob | jq .name)
            echo "blobname: $blobName"
        fi
        ((blobIndex++))
    done <<<$(echo $blobs | jq -c '.[]')
 
    total=$(($total+$blobsLength-1))
    echo "Processed $total blobs so far"
    # echo "nextMarker: $nextMarker"
    if [ "${nextMarker}" = "null" ]; then
        echo -e "\nAccountName: $storageAccount, ContainerName: $containerName "
        echo "Processed $total blobs in total."
        break
    fi
done

Scaricare un BLOB

A seconda del caso d'uso, per scaricare i BLOB si userà il comando az storage blob download o az storage blob download-batch. Per scaricare un singolo BLOB, chiamare direttamente il comando az storage blob download e passare i valori per i parametri --container-name, --file e --name. Il BLOB viene scaricato nella directory della shell per impostazione predefinita, ma è possibile specificare un percorso alternativo. Se il percorso specificato non esiste, l'operazione avrà esito negativo e restituirà un errore.

Per scaricare in modo ricorsivo più BLOB da un contenitore di archiviazione, usare il comando az storage blob download-batch. Questo comando supporta i criteri di ricerca nome file di Unix con il parametro --pattern. I criteri supportati sono *, ?, [seq] e [!seq]. Per altre informazioni, vedere la documentazione di Python su Criteri di ricerca nome file Unix.

Il codice di esempio seguente illustra approcci di download singoli e multipli. Offre anche un approccio semplificato alla ricerca di tutti i contenitori per file specifici usando un carattere jolly. Poiché alcuni ambienti possono avere molte migliaia di risorse, è consigliabile usare il --num-results parametro .

Per altre informazioni, vedere il riferimento az storage blob download e az storage blob download batch.

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

destinationPath="C:\\temp\\downloads\\"
destinationFilename="downloadedBlob.txt"
file="$destinationPath$destinationFilename"
sourceBlobName="demo-file.txt"

#Download a single named blob

az storage blob download \
    --container $containerName \
    --file $file \
    --name $sourceBlobName \
    --account-name $storageAccount \
    --auth-mode login

#Download multiple blobs using a pattern value

az storage blob download-batch \
    --destination $destinationPath \
    --source $containerName \
    --pattern images/*.png \
    --account-name $storageAccount \
    --auth-mode login

#Use a loop to download matching blobs in a list of containers

containerList=$( \
    az storage container list \
        --query "[].name" \
        --num-results 5 \
        --account-name $storageAccount \
        --auth-mode login \
        --output tsv 
)
for row in $containerList
do
    tmpName=$(echo $row | sed -e 's/\r//g')
    echo $tmpName
   
    az storage blob download-batch \
        --destination $destinationPath \
        --source $tmpName \
        --pattern *louis*.* \
        --account-name $storageAccount \
        --auth-mode login
done

Gestire proprietà e metadati dei BLOB

Un BLOB restituisce sia le proprietà di sistema che i metadati definiti dall'utente. Le proprietà di sistema esistono su ogni risorsa di Archivio BLOB. Alcune proprietà sono di sola lettura, mentre altre possono essere lette o impostate. Anche se in modo non esplicito, 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 di Azure. È possibile usare i metadati per archiviare valori aggiuntivi con la risorsa. I valori di metadati sono per le proprie esigenze e non influiscono sul comportamento della risorsa.

Lettura delle proprietà del BLOB

Per leggere le proprietà o i metadati del BLOB, è prima necessario recuperare il BLOB dal servizio. Usare il comando az storage blob show per recuperare le proprietà e i metadati di un BLOB, ma non il relativo contenuto. Nell'esempio seguente viene recuperato un BLOB e vengono elencate le relative proprietà.

Per altre informazioni, vedere il riferimento az storage blob show .

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

az storage blob show \
    --container  demo-container \
    --name demo-file.txt \
    --account-name $storageAccount \
    --auth-mode login

Leggere e scrivere metadati BLOB

I metadati BLOB sono un set facoltativo di coppie nome/valore associate a un BLOB. Come illustrato nell'esempio precedente, inizialmente a un BLOB non sono associati metadati, anche se possono essere aggiunti quando necessario. Per leggerli, usare il comando az storage blob metadata show. Per aggiornare i metadati del BLOB, si userà az storage blob metadata update e si fornirà una matrice di coppie chiave-valore. Per altre informazioni, vedere i riferimenti contenuti in Metadati di BLOB di archiviazione di Azure.

Per altre informazioni, vedere i riferimenti contenuti in Metadati di BLOB di archiviazione di Azure.

L'esempio seguente prima aggiorna i metadati di un BLOB, poi ne esegue il commit e quindi lo recupera.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"
blobName="blue-moon.mp3"

metadata=("Written=1934" "Recorded=1958")
metadata+=("Lyricist=Lorenz Hart")
metadata+=("Composer=Richard Rogers")
metadata+=("Artist=Tony Bennett")

#Update metadata
az storage blob metadata update \
    --container-name $containerName \
    --name $blobName \
    --metadata "${metadata[@]}" \
    --account-name $storageAccount \
    --auth-mode login

#Retrieve updated blob metadata
az storage blob metadata show \
    --container-name $containerName \
    --name $blobName \
    --account-name $storageAccount \
    --auth-mode login

Operazioni di copia per i BLOB

Esistono molti scenari in cui è possibile copiare BLOB di tipi diversi. Gli esempi contenuti in questo articolo sono limitati ai BLOB in blocchi. L'interfaccia della riga di comando di Azure offre comandi che eseguono operazioni su una o più risorse, a seconda dei requisiti.

Per copiare un BLOB specifico, usare il comando az storage blob copy start e specificare i valori per contenitori e BLOB di origine e di destinazione. È anche possibile fornire un URI (Uniform Resource Identifier), una condivisione o una firma di accesso condiviso come origine.

È anche possibile specificare le condizioni in cui verrà copiato il BLOB. Queste condizioni possono essere impostate per il BLOB di origine o di destinazione. È possibile fare riferimento alla data dell'ultima modifica, ai dati dei tag o al valore ETag. Ad esempio, è possibile scegliere di copiare i BLOB che non sono stati modificati di recente in un contenitore separato. Per altre informazioni, vedere Specifica di intestazioni condizionali per le operazioni del servizio BLOB.

È possibile usare il comando az storage blob copy start-batch per copiare in modo ricorsivo più BLOB tra contenitori di archiviazione all'interno dello stesso account di archiviazione. Questo comando richiede valori per i parametri --source-container e --destination-container e può copiare tutti i file tra l'origine e la destinazione. Analogamente ad altri comandi batch dell'interfaccia della riga di comando, questo comando supporta i criteri di ricerca nome file di Unix con il parametro --pattern. I criteri supportati sono *, ?, [seq] e [!seq]. Per altre informazioni, vedere la documentazione di Python su Criteri di ricerca nome file Unix.

Nota

Prendere in considerazione l'uso di AzCopy per semplificare e aumentare le prestazioni, soprattutto quando si copiano BLOB tra account di archiviazione. AzCopy è un'utilità della riga di comando che è possibile usare per copiare i BLOB o i file da e verso un account di archiviazione. Altre informazioni sulle Attività iniziali con AzCopy.

Per altre informazioni, vedere i riferimenti contenuti in Copia di BLOB di archiviazione di Azure.

Il codice di esempio seguente fornisce un esempio di operazioni di copia singola e multipla. Poiché alcuni ambienti possono avere molte migliaia di risorse, è consigliabile usare il --num-results parametro . Il primo esempio copia il BLOB secret-town-road.png dal contenitore photos nel contenitore locations. Entrambi i contenitori esistono all'interno dello stesso account di archiviazione. Il risultato verifica l'esito positivo dell'operazione di copia.

#!/bin/bash
storageAccount="<storage-account>"
sourceContainer="photos"
blobName="secret-town-road.jpg"
destContainer="locations"

az storage blob copy start \
    --destination-container $destContainer \
    --destination-blob $blobName \
    --source-container $sourceContainer \
    --source-blob $blobName \
    --account-name $storageAccount \
    --auth-mode login

BLOB di snapshot

Eventuali lease associati al BLOB di base non vengono copiati nello snapshot. Non è possibile acquisire un lease in uno snapshot. Altre informazioni sugli snapshot di BLOB. Per altre informazioni, vedere i riferimenti contenuti in Snapshot di BLOB di archiviazione di Azure.

Il codice di esempio seguente recupera un BLOB da un contenitore di archiviazione e ne crea uno snapshot.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"
blobName="demo-file.txt"

az storage blob snapshot \
    --container-name $containerName \
    --name Blue-Moon.mp3 \
    --account-name $storageAccount \
    --auth-mode login

Impostare il livello di BLOB

Quando si modifica il livello di un BLOB, si sposta il BLOB e tutti i relativi dati nel livello di destinazione. È possibile modificare il livello tra livello di accesso frequente, livello di accesso sporadico e archivio con il comando az storage blob set-tier.

A seconda dei requisiti, è anche possibile usare l'operazione Copia BLOB per copiare un BLOB da un livello a un altro. L'operazione Copia BLOB crea un nuovo BLOB nel livello desiderato lasciando il BLOB di origine nel livello originale.

La modifica da livello di accesso sporadico o livello di accesso frequente ad archivio avviene quasi immediatamente. Quando un BLOB viene spostato al livello di accesso archivio, viene considerato offline e non può essere letto o modificato. Prima di poter leggere o modificare i dati di un BLOB archiviato, è necessario riattivarlo in un livello online. Altre informazioni sulla Riattivazione dei BLOB dal livello archivio.

Per altre informazioni, vedere il riferimento az storage blob set-tier .

Il codice di esempio seguente imposta il livello su livello di accesso frequente per un singolo BLOB denominato all'interno del contenitore archive.

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

az storage blob set-tier 
    --container-name $containerName \
    --name Blue-Moon.mp3 \
    --tier Hot \
    --account-name $storageAccount \
    --auth-mode login

Operazioni che usano tag BLOB

I tag indice BLOB semplificano la gestione e l'individuazione dei dati. I tag indice BLOB sono attributi di indice chiave-valore definiti dall'utente che è possibile applicare ai BLOB. Dopo la configurazione, è possibile classificare e trovare oggetti all'interno di un singolo contenitore o in tutti i contenitori. Le risorse BLOB possono essere categorizzate in modo dinamico aggiornando i tag indice senza richiedere una modifica nell'organizzazione del contenitore. Questo approccio offre un modo flessibile per gestire i cambiamenti dei requisiti dei dati. È possibile usare contemporaneamente sia i metadati che i tag indice. Per altre informazioni sui tag indice, vedere Gestire e trovare dati BLOB di Azure con tag indice BLOB.

Suggerimento

L'esempio di codice illustrato di seguito usa criteri di ricerca per ottenere testo da un file XML con una struttura nota. L'esempio viene usato per illustrare un approccio semplificato per l'aggiunta di tag BLOB usando la funzionalità Bash di base. L'uso di uno strumento di analisi dei dati effettivo è sempre consigliato quando si usano dati per carichi di lavoro di produzione.

Nell'esempio seguente viene illustrato come aggiungere tag indice BLOB a una serie di BLOB. L'esempio legge i dati da un file XML e lo usa per creare tag indice in diversi BLOB. Per usare il codice di esempio, creare un file blob-list.xml locale nella directory C:\temp. Di seguito sono riportati i dati XML.

Per altre informazioni, vedere il riferimento az storage blob set-tier .

<Venue Name="House of Prime Rib" Type="Restaurant">
  <Files>
    <File path="transactions/12027121.csv" />
    <File path="campaigns/radio-campaign.docx" />
    <File path="photos/bannerphoto.png" />
    <File path="archive/completed/2020review.pdf" />
    <File path="logs/2020/01/01/logfile.txt" />
  </Files>
</Venue>

Il codice di esempio esegue l'iterazione delle righe all'interno del file XML. Individua l'elemento Venue e crea variabili per i valori Name e Type. Scorre quindi le righe rimanenti e crea tag per ogni BLOB a cui fa riferimento un nodo File.

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

while read line
do
  
#Set Tag values 
if echo "$line" | grep -q "<Venue";then
    name=`echo "$line" | cut -d'"' -f 2`
    type=`echo "$line" | cut -d'"' -f 4`
    tags=("name=$name")
    tags+=("type=$type")
fi

#Add tags to blobs
if echo "$line" | grep -q "<File ";then
    blobName=`echo "$line" | cut -d'"' -f 2`
    
    echo az storage blob tag set \
        --container-name $containerName \
        --name $blobName \
        --account-name $storageAccount \
        --auth-mode login \
        --tags "{$tags[@]}"
fi

done < /mnt/c/temp/bloblist.xml

Eliminare i BLOB

È possibile eliminare un singolo BLOB o una serie di BLOB con i comandi az storage blob delete e az storage blob delete-batch. Quando si eliminano più BLOB, è possibile usare operazioni condizionali, cicli o altre forme di automazione, come illustrato negli esempi seguenti.

Avviso

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

Il codice di esempio seguente fornisce un esempio di operazioni di eliminazione singola e batch. Il primo esempio elimina un singolo BLOB denominato. Il secondo esempio illustra l'uso di operazioni logiche in Bash per eliminare più BLOB. Il terzo esempio usa il comando delete-batch per eliminare tutti i BLOB con il formato bennett-x, ad eccezione di bennett-2.

Per altre informazioni, vedere i riferimenti contenuti in Eliminare BLOB di Archiviazione di Azure ed Eliminare BLOB di Archiviazione di Azure in batch.

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

blobName="demo-file.txt"
blobPrefix="sinatra-"

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

#Iterate a blob list, deleting blobs whose names end with even numbers

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

## Delete all blobs with the format *bennett-x* except *bennett-2.*
for row in $blobList
do
    #Get the blob's number
    tmpBlob=$(echo $row | sed -e 's/\r//g') 
    tmpName=$(echo ${row%.*} | sed -e 's/\r//g')

    if [ `expr ${tmpName: ${#blobPrefix}} % 2` == 0 ]
    then
        
        echo "Deleting $tmpBlob"
        az storage blob delete \
            --container-name $containerName \
            --name $tmpBlob \
            --account-name $storageAccount \
            --auth-mode login

  fi
done

#Delete multiple blobs using delete-batch
az storage blob delete-batch \
    --source $containerName \
    --pattern bennett-[!2].* \
    --account-name $storageAccount \
    --auth-mode login

In alcuni casi, è possibile recuperare i BLOB eliminati. Se l'opzione di protezione dei dati di eliminazione temporanea dell'account di archiviazione è abilitata, il passaggio del --include d parametro restituisce i BLOB eliminati entro il periodo di conservazione dell'account. Per altre informazioni sull'eliminazione temporanea, vedere l'articolo Eliminazione temporanea per i BLOB.

Usare gli esempi seguenti per recuperare un elenco di BLOB eliminati nel periodo di conservazione associato al contenitore. Il primo esempio mostra un elenco di tutti i BLOB eliminati di recente e le date in cui sono stati eliminati. Il secondo esempio elenca tutti i BLOB eliminati corrispondenti a un prefisso specifico.

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

blobPrefix="sinatra-"

#Retrieve a list of all deleted blobs
az storage blob list \
    --container-name $containerName \
    --include d \
    --output table \
    --account-name $storageAccount \
    --auth-mode login \
    --query "[?deleted].{name:name,deleted:properties.deletedTime}"

#Retrieve a list of all deleted blobs matching a specific prefix
az storage blob list \
    --container-name $containerName \
    --prefix $blobPrefix \
    --output table \
    --include d \
    --account-name $storageAccount \
    --auth-mode login \
    --query "[].{name:name,deleted:deleted}"

Ripristinare un BLOB eliminato

Come indicato nella sezione BLOB di elenco, è 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. Anche il controllo delle versioni consente di mantenere le versioni precedenti dei BLOB per ogni recupero e ripristino.

Se il controllo delle versioni dei BLOB e l'eliminazione temporanea del BLOB sono entrambi abilitati, la modifica, la sovrascrittura, l'eliminazione o il ripristino di un BLOB creano automaticamente una nuova versione. Il metodo che verrà usato per ripristinare un BLOB eliminato dipende dal fatto che il controllo delle versioni sia abilitato nell'account di archiviazione.

L'esempio di codice seguente ripristina tutti i BLOB eliminati temporaneamente o, se il controllo delle versioni è abilitato, ripristina la versione più recente di un BLOB. Determina innanzitutto se il controllo delle versioni è abilitato con il comando az storage account blob-service-properties show.

Se il controllo delle versioni è abilitato, il az storage blob list comando recupera un elenco di tutte le versioni BLOB denominate in modo univoco. Successivamente, le versioni del BLOB nell'elenco vengono recuperate e ordinate in base alla data. Se non vengono trovate versioni con il valore dell'attributo isCurrentVersion, il comando az storage blob copy start viene usato per creare una copia attiva della versione più recente del BLOB.

Se il controllo delle versioni è disabilitato, il comando az storage blob undelete viene usato per ripristinare ogni BLOB eliminato predefinito nel contenitore.

Prima di seguire questo esempio, è necessario abilitare l'eliminazione temporanea in almeno uno degli account di archiviazione. Per altre informazioni sull'opzione di protezione dei dati per l'eliminazione temporanea, vedere l'articolo Eliminazione temporanea d i BLOB o l'articolo Annullare l'eliminazione dei BLOB di Archiviazione di Azure.

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

blobSvcProps=$(
    az storage account blob-service-properties show \
        --account-name $storageAccount \
        --resource-group $groupName)

softDelete=$(echo "${blobSvcProps}" | jq -r '.deleteRetentionPolicy.enabled')
versioning=$(echo "${blobSvcProps}" | jq -r '.isVersioningEnabled')

# If soft delete is enabled
if $softDelete
then
    
    # If versioning is enabled
    if $versioning
    then

        # Get all blobs and versions using -Unique to avoid processing duplicates/versions
        blobList=$(
            az storage blob list \
                --account-name $storageAccount \
                --container-name $containerName \
                --include dv \--query "[?versionId != null].{name:name}" \
                --auth-mode login -o tsv | uniq)
        
        # Iterate the collection
        for blob in $blobList
        do
            # Get all versions of the blob, newest to oldest
            blobVers=$(
                az storage blob list \
                    --account-name $storageAccount \
                    --container-name $containerName \
                    --include dv \
                    --prefix $blob \
                    --auth-mode login -o json | jq 'sort_by(.versionId) | reverse | .[]')
            # Select the first (newest) object
            delBlob=$(echo "$blobVers" | jq -sr '.[0]')
            
            # Verify that the newest version is NOT the latest (that the version is "deleted")
            if [[ $(echo "$delBlob" | jq '.isCurrentVersion') != true ]]; 
            then
                # Get the blob's versionId property, build the URI to the blob
                versionID=$(echo "$delBlob" | jq -r '.versionId')
                uri="https://$storageAccount.blob.core.windows.net/$containerName/$blob?versionId=$versionID"
                
                # Copy the latest version 
                az storage blob copy start \
                    --account-name $storageAccount \
                    --destination-blob $blob \
                    --destination-container $containerName \
                    --source-uri $uri \
                    --auth-mode login
       
                delBlob=""
            fi
        done

    else

        #Retrieve all deleted blobs
        blobList=$( \
            az storage blob list \
                --container-name $containerName \
                --include d \
                --output tsv \
                --account-name $storageAccount \
                --auth-mode login \
                --query "[?deleted].[name]" \
        )

        #Iterate list of deleted blobs and restore
        for row in $blobList
        do
            tmpName=$(echo $row | sed -e 's/\r//g')
            echo "Restoring $tmpName"
            az storage blob undelete \
                --container-name $containerName \
                --name $tmpName \
                --account-name $storageAccount \
                --auth-mode login
        done

    fi

else
    
    #Soft delete is not enabled
    echo "Sorry, the delete retention policy is not enabled."

fi

Passaggi successivi