Freigeben über


Verwalten von Blockblobs mit der Azure CLI

Blobspeicher unterstützt Block-, Anfüge- und Seitenblobs. Blockblobs sind für das effiziente Hochladen großer Datenmengen optimiert. Sie eignen sich ideal zum Speichern von Bildern, Dokumenten und anderen Datentypen, die keinen zufälligen Lese- und Schreibvorgängen unterliegen. In diesem Artikel wird die Arbeitsweise mit Blockblobs erläutert.

Voraussetzungen

Sie benötigen ein Azure-Abonnement, um auf Azure Storage zuzugreifen. Wenn Sie noch kein Abonnement haben, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

Der gesamte Zugriff auf Azure Storage erfolgt über ein Speicherkonto. Für diesen Schnellstart erstellen Sie über das Azure-Portal mithilfe von Azure PowerShell oder über die Azure-Befehlszeilenschnittstelle ein Speicherkonto. Hilfe bei der Speicherkontoerstellung finden Sie unter Erstellen eines Speicherkontos.

Vorbereiten der Umgebung für die Azure CLI

  • Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.

  • Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.

    • Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.

    • Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.

    • Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.

  • Für diesen Artikel ist mindestens Version 2.0.46 der Azure CLI erforderlich. Bei Verwendung von Azure Cloud Shell ist die aktuelle Version bereits installiert.

Autorisieren des Zugriffs auf Blobspeicher

Der Zugriff auf Blobspeicher kann über die Azure-Befehlszeilenschnittstelle autorisiert werden. Hierzu können Sie entweder Microsoft Entra-Anmeldeinformationen oder einen Speicherkonto-Zugriffsschlüssel verwenden. Die Verwendung von Microsoft Entra-Anmeldeinformationen wird empfohlen, und in den Beispielen dieses Artikels wird ausschließlich Microsoft Entra ID verwendet.

Bei Azure CLI-Befehlen für blobspeicherbezogene Datenvorgänge können Sie mithilfe des Parameters --auth-mode die Art der Autorisierung für einen Vorgang angeben. Legen Sie den Parameter --auth-mode auf login fest, um die Autorisierung mit Microsoft Entra-Anmeldeinformationen zu verwenden. Der Parameter --auth-mode wird nur von blobspeicherbezogenen Datenvorgängen unterstützt. Bei Verwaltungsvorgängen wie etwa dem Erstellen einer Ressourcengruppe oder eines Speicherkontos werden automatisch Microsoft Entra-Anmeldeinformationen für die Autorisierung verwendet. Weitere Informationen finden Sie unter Auswählen der Autorisierung des Zugriffs auf Blobdaten mit der Azure CLI.

Führen Sie den Befehl login aus, um einen Browser zu öffnen und eine Verbindung mit Ihrem Azure-Abonnement herzustellen.


az login

Erstellen eines Containers

Alle Blob-Daten werden in Containern gespeichert, daher benötigen Sie mindestens eine Containerressource, bevor Sie Daten hochladen können. Verwenden Sie bei Bedarf das folgende Beispiel, um einen Speichercontainer zu erstellen. Weitere Informationen finden Sie unter Verwalten von Blobcontainern mithilfe der Azure CLI.


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

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

Wenn Sie die Beispiele in diesem Artikel verwenden, müssen Sie die Platzhalterwerte in Klammern durch Ihre eigenen Werte ersetzen. Weitere Informationen zur Anmeldung bei Azure mithilfe der Azure CLI finden Sie unter Anmelden mit der Azure CLI.

Hochladen von Blobs

Die Azure CLI stellt Befehle zur Verfügung, die je nach Ihren Anforderungen Vorgänge für eine oder für mehrere Ressourcen ausführen.

Um eine Datei in ein Blockblob hochzuladen, übergeben Sie die erforderlichen Parameterwerte an den Befehl az storage blob upload. Geben Sie den Quellpfad und den Dateinamen mit dem Parameter --file und den Namen des Zielcontainers mit dem Parameter --container-name an. Sie müssen auch den Parameter --account-name angeben. Dieser Befehl erstellt ein neues Blob oder überschreibt das ursprüngliche Blob, wenn es bereits vorhanden ist.

Sie können den Befehl az storage blob upload-batch verwenden, um mehrere Blobs rekursiv in einen Speichercontainer hochzuladen. Mithilfe des Unix-Musterabgleich von Dateinamen können Sie einen Bereich von Dateien angeben, die mit dem Parameter --pattern hochgeladen werden. Die unterstützten Muster lauten *, ?, [seq] und [!seq]. Weitere Informationen finden Sie in der Python-Dokumentation zum Unix-Musterabgleich von Dateinamen.

Im folgenden Beispiel verwendet der erste Vorgang den Befehl az storage blob upload, um eine einzelne benannte Datei hochzuladen. Die Quelldatei und der Zielspeichercontainer werden mit den Parametern --file und --container-name angegeben.

Der zweite Vorgang veranschaulicht die Verwendung des Befehls az storage blob upload-batch zum Hochladen mehrerer Dateien. Der Parameter --if-modified-since stellt sicher, dass nur Dateien hochgeladen werden, die in den letzten sieben Tagen geändert wurden. Der Wert für diesen Parameter muss im UTC-Format angegeben werden.


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

Auflisten von Blobs

Standardmäßig listet der Befehl az storage blob list alle Blobs auf, die in einem Container gespeichert sind. Sie können den Umfang Ihrer Suche auf verschiedene Weise eingrenzen. Es gibt keine Einschränkung in Bezug auf die Anzahl von Containern oder Blobs, die ein Speicherkonto enthalten kann. Um das Abrufen tausender Blobs zu vermeiden, sollten Sie die Menge der zurückgegebenen Daten beschränken.

Verwenden Sie den Parameter --prefix, um entweder eine einzelne bekannte Datei oder einen Bereich von Dateien auszuwählen, deren Namen mit einer definierten Zeichenfolge beginnen. Sie können ein virtuelles Verzeichnis als Teil des --prefix-Parameters angeben.

Standardmäßig werden bei einem Auflistungsvorgang nur Blobs zurückgegeben. In bestimmten Szenarien kann es sinnvoll sein, einen Wert für den Parameter --include zu übergeben, um zusätzliche Objekttypen zurückzugeben, z. B. vorläufig gelöschte Blobs, Momentaufnahmen und Versionen. Diese Werte können kombiniert werden, um verschiedene Objekttypen zurückzugeben.

Der Parameter --num-results kann verwendet werden, um die Anzahl der Blobs zu beschränken, die von einem Container zurückgegeben werden. Für alle Azure-Ressourcen gilt ein Dienstgrenzwert von 5.000. Durch dieses Limit wird sichergestellt, dass überschaubare Datenmengen abgerufen werden und die Leistung nicht beeinträchtigt wird. Wenn die Anzahl der zurückgegebenen Blobs entweder den Wert --num-results oder den Dienstgrenzwert überschreitet, wird ein Fortsetzungstoken zurückgegeben. Mit diesem Token können Sie mehrere Anforderungen verwenden, um eine beliebige Anzahl von Blobs abzurufen. Weitere Informationen finden Sie unter Aufzählen von Blobressourcen.

Im folgenden Beispiel werden mehrere Ansätze veranschaulicht, die für die Bereitstellung einer Liste mit Blobs verwendet werden können. Bei der ersten Methode werden alle Blobs in einem angegebenen Container aufgelistet. Der zweite Ansatz verwendet den --prefix-Parameter, um alle Blobs in den Containern auflisten, die mit dem angegebenen Präfix beginnen. Der dritte Ansatz verwendet den --num-results-Parameter, um die zurückgegebenen Ergebnisse zu begrenzen, und der --show-next-marker-Parameter, um das Fortsetzungstoken in die Ergebnisse einzuschließen. Wenn ein Fortsetzungstoken in den Ergebnissen vorhanden ist, wird es an den nachfolgenden Aufruf an az storage blob list übergeben, um den nächsten Satz von Ergebnissen abzurufen.

Weitere Informationen finden Sie in der az Storage Blob List-Referenz.

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

Herunterladen eines Blobs

Je nach Anwendungsfall verwenden Sie entweder den Befehl az storage blob download oder az storage blob download-batch zum Herunterladen von Blobs. Um ein einzelnes Blob herunterzuladen, rufen Sie den Befehl az storage blob download direkt auf und übergeben Werte für die Parameter --container-name, --file und --name. Das Blob wird standardmäßig in das Shellverzeichnis heruntergeladen, aber ein alternativer Speicherort kann angegeben werden. Der Vorgang schlägt mit einer Fehlermeldung fehl, wenn der angegebene Pfad nicht vorhanden ist.

Verwenden Sie den Befehl az storage blob download-batch, um mehrere Blobs rekursiv aus einem Speichercontainer herunterzuladen. Dieser Befehl unterstützt Unix-Musterabgleich von Dateinamen mit dem Parameter --pattern. Die unterstützten Muster lauten *, ?, [seq] und [!seq]. Weitere Informationen finden Sie in der Python-Dokumentation zum Unix-Musterabgleich von Dateinamen.

Der folgende Beispielcode enthält Ansatzbeispiele für einzelne und mehrere Downloads. Darüber hinaus veranschaulicht er einen vereinfachten Ansatz zum Durchsuchen aller Container nach bestimmten Dateien mithilfe eines Platzhalters. Da einige Umgebungen unter Umständen Tausende von Ressourcen aufweisen, wird die Verwendung des Parameters --num-results empfohlen.

Weitere Informationen finden Sie in der Referenz zu az storage blob download und 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

Verwalten von Blobeigenschaften und Metadaten

Ein Blob macht sowohl Systemeigenschaften als auch benutzerdefinierte Metadaten verfügbar. Systemeigenschaften sind in jeder Blob Storage-Ressource vorhanden. Einige davon sind schreibgeschützt, während andere gelesen oder festgelegt werden können. Darüber hinaus lassen sich einige Systemeigenschaften bestimmten HTTP-Standardheadern zuordnen.

Benutzerdefinierte Metadaten bestehen aus mindestens einem Name-Wert-Paar, das Sie für eine Blob Storage-Ressource angeben. Metadaten können verwendet werden, um zusätzliche Werte mit der Ressource zu speichern. Metadatenwerte sind für Ihre eigenen Zwecke bestimmt und haben keinen Einfluss auf das Verhalten der Ressource.

Lesen von Blobeigenschaften

Zum Lesen von Blobeigenschaften oder Metadaten müssen Sie zuerst das Blob aus dem Dienst abrufen. Verwenden Sie den Befehl az storage blob show, um die Eigenschaften und Metadaten eines Blobs abzurufen, nicht jedoch dessen Inhalt. Im folgenden Beispiel wird ein Blob abgerufen und seine Eigenschaften aufgelistet.

Weitere Informationen finden Sie in der Referenz zu 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

Lesen und Schreiben von Blob-Metadaten

Blob-Metadaten sind ein optionaler Satz von Name/Wert-Paaren, die einem Blob zugeordnet sind. Wie im vorherigen Beispiel dargestellt, sind am Anfang noch keine Metadaten mit einem Blob verknüpft, sie können jedoch bei Bedarf hinzugefügt werden. Verwenden Sie zum Lesen den Befehl az storage blob metadata show. Zum Aktualisieren von Blobmetadaten verwenden Sie az storage blob metadata update und geben ein Array von Schlüssel-Wert-Paaren an. Weitere Informationen finden Sie in der Referenz zu az storage blob metadata.

Weitere Informationen finden Sie in der Referenz zu az storage blob metadata.

Im folgenden Beispiel werden die Metadaten eines Blobs zuerst aktualisiert, dann festgelegt und anschließend abgerufen.

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

Kopiervorgänge für Blobs

Es gibt viele Szenarien, in denen das Kopieren von verschiedenen Blobs möglich ist. Die Beispiele in diesem Artikel sind auf Blockblobs beschränkt. Die Azure CLI stellt Befehle zur Verfügung, die je nach Ihren Anforderungen Vorgänge für eine oder für mehrere Ressourcen ausführen.

Verwenden Sie zum Kopieren eines bestimmten Blobs den Befehl az storage blob copy start, und geben Sie Werte für Quell- und Zielcontainer und Blobs an. Es ist auch möglich, einen URI (Uniform Resource Identifier), eine Freigabe oder eine Shared Access Signature (SAS) als Quelle anzugeben.

Sie können außerdem die Bedingungen angeben, unter denen das Blob kopiert wird. Diese Bedingungen können entweder für das Quell- oder das Zielblob festgelegt werden. Sie können auf das Datum der letzten Änderung, Tagdaten oder den ETag-Wert verweisen. Sie können z. B. Blobs, die nicht vor Kurzem geändert wurden, in einen separaten Container kopieren. Weitere Informationen finden Sie unter Angeben von bedingten Headern für Blobdienstvorgänge.

Sie können den Befehl az storage blob copy start-batch verwenden, um mehrere Blobs rekursiv zwischen Speichercontainern innerhalb desselben Speicherkontos zu kopieren. Dieser Befehl erfordert Werte für die Parameter --source-container und --destination-container und kann alle Dateien zwischen Quelle und Ziel kopieren. Wie andere CLI-Batchbefehle unterstützt dieser Befehl den Unix-Musterabgleich von Dateinamen mit dem Parameter --pattern. Die unterstützten Muster lauten *, ?, [seq] und [!seq]. Weitere Informationen finden Sie in der Python-Dokumentation zum Unix-Musterabgleich von Dateinamen.

Hinweis

Erwägen Sie die Verwendung von AzCopy, um die Handhabung zu vereinfachen und die Leistung zu steigern, insbesondere beim Kopieren von Blobs zwischen Speicherkonten. AzCopy ist ein Befehlszeilenhilfsprogramm, das Sie verwenden können, um Blobs oder Dateien in oder aus einem Speicherkonto zu kopieren. Erfahren Sie mehr über die ersten Schritte mit AzCopy.

Weitere Informationen finden Sie in der Referenz zu az storage blob copy.

Der folgende Beispielcode zeigt ein Beispiel für einfache und mehrfache Kopiervorgänge. Da einige Umgebungen unter Umständen Tausende von Ressourcen aufweisen, wird die Verwendung des Parameters --num-results empfohlen. Im ersten Beispiel wird das Blob secret-town-road.png aus dem Container photos in den Container locations kopiert. Beide Container befinden sich innerhalb desselben Speicherkontos. Durch das Ergebnis wird der Erfolg des Kopiervorgangs verifiziert.

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

Momentaufnahme von Blobs

Dem Basisblob zugeordnete Leases wirken sich nicht auf die Momentaufnahme aus. Sie können für eine Momentaufnahme keine Lease abrufen. Hier finden Sie weitere Informationen zu Blobmomentaufnahmen. Weitere Informationen finden Sie in der Referenz zu az storage blob snapshot.

Mit dem folgenden Beispielcode wird ein Blob aus einem Speichercontainer abgerufen und eine Momentaufnahme davon erstellt.

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

Festlegen des Blobtarifs

Wenn Sie die Ebene eines Blobs ändern, wird das Blob mit allen zugehörigen Daten in die Zielebene verschoben. Mit dem Befehl az storage blob set-tier können Sie zwischen den Ebenen Heiß, Kalt und Archiv wechseln.

Abhängig von Ihren Anforderungen können Sie auch den Vorgang Copy Blob verwenden, um einen Blob von einer Ebene in eine andere zu kopieren. Der Vorgang Copy Blob erstellt ein neues Blob in der gewünschten Ebene, während das Quellblob in der ursprünglichen Ebene verbleibt.

Die Änderung der Ebene von Kalt oder Heiß zu Archiv erfolgt praktisch sofort. Wenn sich ein Blob auf der Ebene Archiv befindet, gilt es als offline und kann nicht gelesen oder geändert werden. Bevor Sie die Daten eines archivierten Blobs lesen oder ändern können, müssen Sie es durch die Änderung seiner Ebene zu einer Online-Ebene wieder aktivieren. Weitere Informationen finden Sie unter Reaktivierung von Blobs aus der Archivebene.

Weitere Informationen finden Sie in der Referenz zu az storage blob set-tier.

Im folgenden Beispielcode wird die Ebene für ein einzelnes benanntes Blob im Container archive auf Heiß festgelegt.

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

Vorgänge mit Blob-Tags

Blobindextags vereinfachen die Verwaltung und Ermittlung von Daten. Bei Blob-Indextags handelt es sich um benutzerdefinierte Schlüssel-Wert-Indexattribute, die Sie auf die Blobs anwenden können. Nach der Konfiguration können Sie Objekte innerhalb eines einzelnen Containers oder über alle Container hinweg kategorisieren und suchen. Durch die Aktualisierung ihrer Indextags können Blobressourcen dynamisch kategorisiert werden, ohne dass eine Änderung der Containerorganisation erforderlich ist. Dieser Ansatz ermöglicht Ihnen einen flexiblen Umgang mit sich ändernden Datenanforderungen. Sie können sowohl Metadaten- als auch Indextags gleichzeitig verwenden. Weitere Informationen zu Indextags finden Sie unter Verwalten und Finden von Azure-Blobdaten mit Blobindextags.

Tipp

Das folgende Codebeispiel verwendet den Mustervergleich, um Text aus einer XML-Datei mit bekannter Struktur abzurufen. Das Beispiel wird verwendet, um einen vereinfachten Ansatz zum Hinzufügen von Blobtags mithilfe grundlegender Bash-Funktionen zu veranschaulichen. Bei der Verwendung von Daten für Produktionsworkloads wird immer die Verwendung eines aktuellen Datenanalysetools empfohlen.

Das folgende Beispiel veranschaulicht das Hinzufügen von Blob-Indextags zu einer Reihe von Blobs. Im Beispiel werden die Daten aus einer XML-Datei gelesen und zum Erstellen von Indextags für mehrere Blobs verwendet. Um den Beispielcode verwenden zu können, müssen Sie eine lokale blob-list.xml-Datei im Verzeichnis C:\temp erstellen. Die XML-Daten werden nachfolgend bereitgestellt.

Weitere Informationen finden Sie in der Referenz zu 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>

Der Beispielcode durchläuft die Zeilen innerhalb der XML-Datei. Es ermittelt das Element Venue und erstellt Variablen für die Werte Name und Type. Anschließend werden die verbleibenden Zeilen durchlaufen und Tags für jedes Blob erstellt, auf das von einem File-Knoten verwiesen wird.

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

Löschen von Blobs

Mit den Befehlen az storage blob delete und az storage blob delete-batch können Sie entweder ein einzelnes Blob oder eine Reihe von Blobs löschen. Wenn Sie mehrere Blobs löschen, können Sie bedingte Vorgänge, Schleifen oder andere Automatisierungen verwenden, wie in den folgenden Beispielen gezeigt.

Warnung

Die Ausführung der folgenden Beispiele kann dazu führen, dass Blobs dauerhaft gelöscht werden. Microsoft empfiehlt die Aktivierung des vorläufigen Löschens für Container, um Container und Blobs vor versehentlichem Löschen zu schützen. Weitere Informationen finden Sie unter Vorläufiges Löschen für Container.

Der folgende Beispielcode enthält ein Beispiel für Einzel- und Batchlöschvorgänge. Im ersten Beispiel wird ein einzelnes benanntes Blob gelöscht. Das zweite Beispiel veranschaulicht die Verwendung logischer Vorgänge in Bash zum Löschen mehrerer Blobs. Im dritten Beispiel wird der Befehl delete-batch verwendet, um alle Blobs im Format bennett-x mit Ausnahme von bennett-2 zu löschen.

Weitere Informationen finden Sie in der Referenz zu az storage blob delete und az storage blob delete-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 einigen Fällen können gelöschte Blobs wieder abgerufen werden. Wenn die Option zum vorläufigen Löschen ihres Speicherkontos aktiviert ist, gibt das Übergeben des --include d-Parameter Blobs zurück, die innerhalb des Aufbewahrungszeitraums des Kontos gelöscht wurden. Weitere Informationen zum vorläufigen Löschen finden Sie im Artikel Vorläufiges Löschen für Blobs.

Verwenden Sie die folgenden Beispiele, um eine Liste von Blobs abzurufen, die innerhalb des zugewiesenen Aufbewahrungszeitraums des Containers gelöscht wurden. Im ersten Beispiel wird eine Liste aller kürzlich gelöschten Blobs zusammen mit dem jeweiligen Löschdatum angezeigt. Im zweiten Beispiel werden alle gelöschten Blobs aufgelistet, die einem bestimmten Präfix entsprechen.

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

Wiederherstellen eines gelöschten Blobs

Wie im Abschnitt Auflisten von Blobs erwähnt, können Sie die Datenschutzoption für das vorläufige Löschen in Ihrem Speicherkonto konfigurieren. Wenn diese Option aktiviert ist, können Container, die innerhalb des zugewiesenen Aufbewahrungszeitraums gelöscht wurden, wiederhergestellt werden. Sie können außerdem die Versionsverwaltung verwenden, um für jede Wiederherstellung frühere Versionen Ihrer Blobs aufzubewahren.

Wenn sowohl die Blobversionsverwaltung als auch das vorläufige Löschen von Blobs aktiviert sind, wird beim Ändern, Überschreiben, Löschen oder Wiederherstellen eines Blobs automatisch eine neue Version erstellt. Welche Methode Sie zum Wiederherstellen eines gelöschten Blobs verwenden, hängt davon ab, ob für Ihr Speicherkonto die Versionsverwaltung aktiviert ist.

Im folgenden Codebeispiel werden alle vorläufig gelöschten Blobs wiederhergestellt, oder bei aktivierter Versionierung die neueste Version eines Blobs wiederhergestellt. Zunächst wird mithilfe des Befehls az storage account blob-service-properties show ermittelt, ob die Versionsverwaltung aktiviert ist.

Ist die Versionsverwaltung aktiviert, wird mithilfe des Befehls az storage blob list eine Liste aller eindeutig benannten Blobversionen abgerufen. Als Nächstes werden die Blobversionen in der Liste abgerufen und nach Datum sortiert. Wenn keine Versionen mit dem Attributwert isCurrentVersion gefunden werden, wird mithilfe des Befehls az storage blob copy start eine aktive Kopie der neuesten Version erstellt.

Bei deaktivierter Versionsverwaltung werden mithilfe des Befehls az storage blob undelete die einzelnen vorläufig gelöschten Blobs im Container wiederhergestellt.

Damit Sie dieses Beispiel nachvollziehen können, müssen Sie das vorläufige Löschen für mindestens eines Ihrer Speicherkonten aktivieren. Weitere Informationen über die Datenschutzoption „Vorläufiges Löschen“ finden Sie im Artikel Vorläufiges Löschen für Blobs oder in der Referenz zu az storage blob undelete.

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

Nächste Schritte