Blok-blobs beheren met Azure CLI

Blob-opslag ondersteunt blok-blobs, toevoeg-blobs en pagina-blobs. Blok-blobs zijn geoptimaliseerd voor het efficiënt uploaden van grote hoeveelheden gegevens. Blok-blobs zijn ideaal voor het opslaan van afbeeldingen, documenten en andere typen gegevens die niet worden onderworpen aan willekeurige lees- en schrijfbewerkingen. In dit artikel wordt uitgelegd hoe u met blok-blobs kunt werken.

Vereisten

U hebt een Azure-abonnement nodig voor toegang tot Azure Storage. Als u nog geen abonnement hebt, maakt u een gratis account voordat u begint.

Alle toegang tot Azure Storage vindt plaats via een opslagaccount. Voor deze quickstart gaat u een opslagaccount maken met de Azure-portal, Azure PowerShell of Azure CLI. Zie voor meer informatie over het maken van een opslagaccount Een opslagaccount maken.

De omgeving voorbereiden op de Azure CLI

  • Voor dit artikel is versie 2.0.46 of hoger van Azure CLI vereist. Als u Azure Cloud Shell gebruikt, is de nieuwste versie al geïnstalleerd.

Toegang tot Blob Storage autoriseren

U kunt toegang tot Blob Storage vanuit de Azure CLI autoriseren met Microsoft Entra-referenties of met behulp van een toegangssleutel voor een opslagaccount. Het gebruik van Microsoft Entra-referenties wordt aanbevolen en in de voorbeelden van dit artikel wordt uitsluitend Microsoft Entra ID gebruikt.

Azure CLI-opdrachten voor gegevensbewerkingen voor Blob Storage ondersteunen de parameter --auth-mode, waarmee u kunt opgeven hoe een bepaalde bewerking moet worden geautoriseerd. Stel de --auth-mode parameter in om u aan te melden om te autoriseren met Microsoft Entra-referenties. Alleen Blob Storage-gegevensbewerkingen ondersteunen de parameter --auth-mode. Beheerbewerkingen, zoals het maken van een resourcegroep of opslagaccount, gebruiken automatisch Microsoft Entra-referenties voor autorisatie. Zie Kiezen hoe u toegang tot blobgegevens met Azure CLI kunt autoriseren voor meer informatie.

Voer de login opdracht uit om een browser te openen en verbinding te maken met uw Azure-abonnement.


az login

Een container maken

Alle blobgegevens worden opgeslagen in containers, dus u hebt ten minste één containerresource nodig voordat u gegevens kunt uploaden. Gebruik zo nodig het volgende voorbeeld om een opslagcontainer te maken. Zie Blob-containers beheren met behulp van Azure CLI voor meer informatie.


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

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

Wanneer u de voorbeelden in dit artikel gebruikt, moet u de tijdelijke aanduidingen tussen haakjes vervangen door uw eigen waarden. Zie Aanmelden met Azure CLI voor meer informatie over aanmelden bij Azure CLI.

Blobs uploaden

Azure CLI biedt opdrachten waarmee bewerkingen worden uitgevoerd op één resource of op meerdere resources, afhankelijk van uw vereisten.

Als u een bestand wilt uploaden naar een blok-blob, geeft u de vereiste parameterwaarden door aan de az storage blob upload opdracht. Geef het bronpad en de bestandsnaam op met de --file parameter en de naam van de doelcontainer met de --container-name parameter. U moet ook de --account-name parameter opgeven. Met deze opdracht maakt u een nieuwe blob of overschrijft u de oorspronkelijke blob als deze al bestaat.

U kunt de az storage blob upload-batch opdracht gebruiken om meerdere blobs recursief te uploaden naar een opslagcontainer. U kunt het overeenkomende Unix-bestandspatroon gebruiken om een reeks bestanden op te geven die u wilt uploaden met de --pattern parameter. De ondersteunde patronen zijn *, ?en [seq][!seq]. Raadpleeg de Python-documentatie over het overeenkomen van unix-bestandspatronen voor meer informatie.

In het volgende voorbeeld gebruikt de eerste bewerking de az storage blob upload opdracht om één benoemd bestand te uploaden. Het bronbestand en de doelopslagcontainer worden opgegeven met de --file en --container-name parameters.

De tweede bewerking toont het gebruik van de az storage blob upload-batch opdracht om meerdere bestanden te uploaden. De --if-modified-since parameter zorgt ervoor dat alleen bestanden die in de afgelopen zeven dagen zijn gewijzigd, worden geüpload. De waarde die door deze parameter wordt opgegeven, moet worden opgegeven in de UTC-indeling.


#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"
lastModified=`date -d "7 days ago" '+%Y-%m-%dT%H:%MZ'`

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

Blobs vermelden

Met de az storage blob list opdracht worden standaard alle blobs weergegeven die zijn opgeslagen in een container. U kunt verschillende benaderingen gebruiken om het bereik van uw zoekopdracht te verfijnen. Er is geen beperking voor het aantal containers of blobs dat een opslagaccount kan hebben. Om te voorkomen dat duizenden blobs worden opgehaald, is het een goed idee om de hoeveelheid geretourneerde gegevens te beperken.

Gebruik de --prefix parameter om één bekend bestand of een bereik van bestanden te selecteren waarvan de namen beginnen met een gedefinieerde tekenreeks.

Standaard worden alleen blobs geretourneerd in een vermeldingsbewerking. In sommige scenario's wilt u mogelijk een waarde doorgeven voor de --include parameter om extra typen objecten te retourneren, zoals voorlopig verwijderde blobs, momentopnamen en versies. Deze waarden kunnen worden gecombineerd om meer dan meerdere objecttypen te retourneren.

De --num-results parameter kan worden gebruikt om het aantal niet-gefilterde blobs te beperken dat wordt geretourneerd vanuit een container. Er wordt een servicelimiet van 5000 opgelegd voor alle Azure-resources. Deze limiet zorgt ervoor dat beheerbare hoeveelheden gegevens worden opgehaald en dat de prestaties niet worden beïnvloed. Als het aantal geretourneerde blobs de --num-results waarde of de servicelimiet overschrijdt, wordt een vervolgtoken geretourneerd. Met dit token kunt u meerdere aanvragen gebruiken om een willekeurig aantal blobs op te halen. Meer informatie is beschikbaar over het inventariseren van blobresources.

In het volgende voorbeeld ziet u verschillende methoden die worden gebruikt om een lijst met blobs te bieden. De eerste benadering bevat één blob binnen een specifieke containerresource. De tweede benadering gebruikt de --prefix parameter om alle blobs in alle containers weer te geven met een voorvoegsel van Louis. De zoekopdracht is beperkt tot vijf containers met behulp van de --num-results parameter. De derde benadering gebruikt --num-results en --marker parameters om het ophalen van alle blobs in een container te beperken.

Zie de naslaginformatie over az storage blob list voor meer informatie.


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

#Approach 1: List all blobs in a named container
az storage blob list \
    --container $containerName \
    --account-name $storageAccount \
    --prefix $blobName
    --auth-mode login

#Approach 2: Use the --prefix parameter to list blobs in all containers

containerList=$( \
    az storage container list \
        --query "[].name" \
        --num-results $numResults \
        --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 list \
        --prefix $blobPrefix \
        --container $tmpName \
        --account-name $storageAccount \
        --auth-mode login
done

Blob downloaden

Afhankelijk van uw use-case gebruikt u de az storage blob download of az storage blob download-batch opdracht om blobs te downloaden. Als u een afzonderlijke blob wilt downloaden, roept u de az storage blob download opdracht rechtstreeks aan en geeft u waarden door voor de --container-name, --fileen --name parameters. De blob wordt standaard gedownload naar de shell-map, maar er kan een alternatieve locatie worden opgegeven. De bewerking mislukt met een fout als het opgegeven pad niet bestaat.

Als u recursief meerdere blobs uit een opslagcontainer wilt downloaden, gebruikt u de az storage blob download-batch opdracht. Deze opdracht ondersteunt het unix-bestandsnaampatroon dat overeenkomt met de --pattern parameter. De ondersteunde patronen zijn *, ?en [seq][!seq]. Raadpleeg de Python-documentatie over het overeenkomen van unix-bestandspatronen voor meer informatie.

De volgende voorbeeldcode biedt een voorbeeld van een enkele en meerdere downloadmethoden. Het biedt ook een vereenvoudigde benadering voor het doorzoeken van alle containers naar specifieke bestanden met behulp van een jokerteken. Omdat sommige omgevingen mogelijk vele duizenden resources hebben, wordt het gebruik van de --num-results parameter aanbevolen.

Zie de naslaginformatie over az storage blob download en az storage blob download batchreference voor meer informatie.

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

Blob-eigenschappen en -metagegevens beheren

Een blob toont zowel systeemeigenschappen als door de gebruiker gedefinieerde metagegevens. Er bestaan systeemeigenschappen op elke Blob Storage-resource. Sommige eigenschappen zijn alleen-lezen, terwijl andere kunnen worden gelezen of ingesteld. Onder de covers zijn sommige systeemeigenschappen toegewezen aan bepaalde standaard HTTP-headers.

Door de gebruiker gedefinieerde metagegevens bestaan uit een of meer naam-waardeparen die u opgeeft voor een Blob Storage-resource. U kunt metagegevens gebruiken om extra waarden op te slaan met de resource. Metagegevenswaarden zijn voor uw eigen doeleinden en hebben geen invloed op het gedrag van de resource.

Blob-eigenschappen lezen

Als u blobeigenschappen of metagegevens wilt lezen, moet u eerst de blob ophalen uit de service. Gebruik de az storage blob show opdracht om de eigenschappen en metagegevens van een blob op te halen, maar niet de inhoud ervan. In het volgende voorbeeld wordt een blob opgehaald en worden de eigenschappen ervan vermeld.

Zie de naslaginformatie az storage blob show voor meer informatie.

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

Blobmetagegevens lezen en schrijven

Blobmetagegevens is een optionele set naam-/waardeparen die zijn gekoppeld aan een blob. Zoals in het vorige voorbeeld wordt weergegeven, zijn er in eerste instantie geen metagegevens gekoppeld aan een blob, maar deze kunnen indien nodig worden toegevoegd. Als u wilt lezen, gebruikt u de az storage blob metadata show opdracht. Als u blobmetagegevens wilt bijwerken, gebruikt az storage blob metadata update en levert u een matrix van sleutel-waardeparen op. Zie de naslaginformatie over az storage blob metadata voor meer informatie.

Zie de naslaginformatie over az storage blob metadata voor meer informatie.

In het onderstaande voorbeeld worden eerst de metagegevens van een blob bijgewerkt en vervolgens opgehaald.

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

Kopieerbewerkingen voor blobs

Er zijn veel scenario's waarin blobs van verschillende typen kunnen worden gekopieerd. Voorbeelden in dit artikel zijn beperkt tot blok-blobs. Azure CLI biedt opdrachten waarmee bewerkingen worden uitgevoerd op één resource of op meerdere resources, afhankelijk van uw vereisten.

Als u een specifieke blob wilt kopiëren, gebruikt u de az storage blob copy start opdracht en geeft u waarden op voor bron- en doelcontainers en -blobs. Het is ook mogelijk om een URI (Uniform Resource Identifier), Share of Shared Access Signature (SAS) als bron op te geven.

U kunt ook de voorwaarden opgeven waaronder de blob wordt gekopieerd. Deze voorwaarden kunnen worden ingesteld voor de bron- of doel-blob. U kunt verwijzen naar de laatst gewijzigde datum, taggegevens of ETag-waarde. U kunt er bijvoorbeeld voor kiezen om blobs te kopiëren die niet onlangs zijn gewijzigd in een afzonderlijke container. Zie Voorwaardelijke headers opgeven voor blobservicebewerkingen voor meer informatie.

U kunt de az storage blob copy start-batch opdracht gebruiken om recursief meerdere blobs tussen opslagcontainers binnen hetzelfde opslagaccount te kopiëren. Voor deze opdracht zijn waarden voor de --source-container en --destination-container parameters vereist en kunnen alle bestanden tussen de bron en het doel worden gekopieerd. Net als andere CLI-batchopdrachten ondersteunt deze opdracht het unix-bestandsnaampatroon dat overeenkomt met de --pattern parameter. De ondersteunde patronen zijn *, ?en [seq][!seq]. Raadpleeg de Python-documentatie over het overeenkomen van unix-bestandspatronen voor meer informatie.

Notitie

Overweeg het gebruik van AzCopy voor gemak en prestaties, met name bij het kopiëren van blobs tussen opslagaccounts. AzCopy is een opdrachtregelprogramma dat u kunt gebruiken om blobs of bestanden te kopiëren vanuit of naar een opslagaccount. Meer informatie over hoe u aan de slag gaat met AzCopy.

Zie de naslaginformatie az storage blob copy voor meer informatie.

De volgende voorbeeldcode bevat een voorbeeld van zowel één als meerdere kopieerbewerkingen. Omdat sommige omgevingen mogelijk vele duizenden resources hebben, wordt het gebruik van de --num-results parameter aanbevolen. In het eerste voorbeeld wordt de secret-town-road.png blob gekopieerd van de container foto's naar de container met locaties. Beide containers bevinden zich in hetzelfde opslagaccount. Het resultaat controleert het succes van de kopieerbewerking.

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

Momentopname-blobs

Leases die zijn gekoppeld aan de basis-blob, hebben geen invloed op de momentopname. U kunt geen lease verkrijgen voor een momentopname. Lees meer over Blob-momentopnamen. Zie de naslaginformatie over az storage blob snapshot voor meer informatie.

Met de volgende voorbeeldcode wordt een blob opgehaald uit een opslagcontainer en wordt er een momentopname van gemaakt.

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

Bloblaag instellen

Wanneer u de laag van een blob wijzigt, verplaatst u de blob en alle bijbehorende gegevens naar de doellaag. U kunt de laag wijzigen tussen dynamisch, statisch en archief met de az storage blob set-tier opdracht.

Afhankelijk van uw vereisten kunt u ook de kopieer-blobbewerking gebruiken om een blob van de ene laag naar de andere te kopiëren. De kopieer-blobbewerking maakt een nieuwe blob in de gewenste laag terwijl de bron-blob in de oorspronkelijke laag blijft staan.

Het wijzigen van lagen van statisch of dynamisch naar archief vindt vrijwel onmiddellijk plaats. Nadat een blob naar de archieflaag is verplaatst, wordt deze beschouwd als offline en kan deze niet worden gelezen of gewijzigd. Voordat u de gegevens van een gearchiveerde blob kunt lezen of wijzigen, moet u deze reactiveren naar een onlinelaag. Lees meer over rehydratatie van blobs vanuit de archieflaag.

Zie de naslaginformatie az storage blob set-tier voor meer informatie.

Met de volgende voorbeeldcode wordt de laag ingesteld op dynamisch voor één benoemde blob in de archive container.

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

Bewerkingen met blobtags

Blob-indextags maken gegevensbeheer en detectie eenvoudiger. Blob-indextags zijn door de gebruiker gedefinieerde indexkenmerken die u op uw blobs kunt toepassen. Zodra deze is geconfigureerd, kunt u objecten in een afzonderlijke container of in alle containers categoriseren en zoeken. Blob-resources kunnen dynamisch worden gecategoriseerd door hun indextags bij te werken zonder dat er een wijziging in de containerorganisatie nodig is. Deze aanpak biedt een flexibele manier om te kunnen omgaan met veranderende gegevensvereisten. U kunt zowel metagegevens als indextags tegelijk gebruiken. Zie Azure Blob-gegevens beheren en zoeken met blobindextags voor meer informatie over indextags.

Tip

In het onderstaande codevoorbeeld wordt gebruikgemaakt van patroonkoppeling om tekst te verkrijgen uit een XML-bestand met een bekende structuur. Het voorbeeld wordt gebruikt om een vereenvoudigde benadering te illustreren voor het toevoegen van blobtags met behulp van eenvoudige Bash-functionaliteit. Het gebruik van een echt hulpprogramma voor het parseren van gegevens wordt altijd aanbevolen bij het gebruik van gegevens voor productieworkloads.

In het volgende voorbeeld ziet u hoe u blobindextags toevoegt aan een reeks blobs. In het voorbeeld worden gegevens uit een XML-bestand gelezen en gebruikt voor het maken van indextags op verschillende blobs. Als u de voorbeeldcode wilt gebruiken, maakt u een lokaal blob-list.xml-bestand in de map C:\temp . Hieronder vindt u de XML-gegevens.

Zie de naslaginformatie az storage blob set-tier voor meer informatie.

<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>

De voorbeeldcode herhaalt de regels in het XML-bestand. Hiermee wordt het element Venue gevonden en worden variabelen gemaakt voor de waarden Naam en Type . Vervolgens worden de resterende regels herhaald en worden tags gemaakt voor elke blob waarnaar wordt verwezen door een File knooppunt.

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

Blobs verwijderen

U kunt één blob of reeks blobs verwijderen met de az storage blob delete en az storage blob delete-batch opdrachten. Wanneer u meerdere blobs verwijdert, kunt u voorwaardelijke bewerkingen, lussen of andere automatisering gebruiken, zoals wordt weergegeven in de onderstaande voorbeelden.

Waarschuwing

Als u de volgende voorbeelden uitvoert, kunnen blobs definitief worden verwijderd. Microsoft raadt aan om voorlopig verwijderen van containers in te schakelen om containers en blobs te beschermen tegen onbedoelde verwijdering. Zie Voorlopig verwijderen voor containers voor meer informatie.

De volgende voorbeeldcode bevat een voorbeeld van zowel afzonderlijke als batchverwerkbewerkingen. In het eerste voorbeeld wordt één benoemde blob verwijderd. In het tweede voorbeeld ziet u het gebruik van logische bewerkingen in Bash om meerdere blobs te verwijderen. In het derde voorbeeld wordt de delete-batch opdracht gebruikt om alle blobs met de indeling bennett-x te verwijderen, met uitzondering van bennett-2.

Zie de naslaginformatie az storage blob delete en az storage blob delete-batch voor meer informatie.

#!/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 sommige gevallen is het mogelijk om blobs op te halen die zijn verwijderd. Als de optie voor gegevensbeveiliging voor voorlopig verwijderen van uw opslagaccount is ingeschakeld, retourneert de --include d parameter en waarde blobs die zijn verwijderd binnen de bewaarperiode van het account. Raadpleeg het artikel Voorlopig verwijderen voor blobs voor meer informatie over voorlopig verwijderen.

Gebruik de volgende voorbeelden om een lijst met blobs op te halen die zijn verwijderd binnen de gekoppelde bewaarperiode van de container. In het eerste voorbeeld ziet u een lijst met alle onlangs verwijderde blobs en de datums waarop ze zijn verwijderd. In het tweede voorbeeld worden alle verwijderde blobs weergegeven die overeenkomen met een specifiek voorvoegsel.

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

Een verwijderde blob herstellen

Zoals vermeld in de sectie Lijst-blobs , kunt u de optie voor gegevensbeveiliging voor voorlopig verwijderen configureren voor uw opslagaccount. Wanneer deze optie is ingeschakeld, is het mogelijk om containers te herstellen die zijn verwijderd binnen de bijbehorende bewaarperiode. U kunt versiebeheer ook gebruiken om eerdere versies van uw blobs te onderhouden voor elk herstel en herstel.

Als versiebeheer van blobs en voorlopig verwijderen van blobs beide zijn ingeschakeld, wordt automatisch een nieuwe versie gemaakt door een blob te wijzigen, te overschrijven, te verwijderen of te herstellen. De methode die u gebruikt om een verwijderde blob te herstellen, is afhankelijk van of versiebeheer is ingeschakeld voor uw opslagaccount.

In het volgende codevoorbeeld worden alle voorlopig verwijderde blobs hersteld of, als versiebeheer is ingeschakeld, wordt de nieuwste versie van een blob hersteld. Eerst wordt bepaald of versiebeheer is ingeschakeld met de az storage account blob-service-properties show opdracht.

Als versiebeheer is ingeschakeld, haalt de az storage blob list opdracht een lijst met alle unieke blobversies op. Vervolgens worden de blobversies in de lijst opgehaald en gesorteerd op datum. Als er geen versies worden gevonden met de isCurrentVersion kenmerkwaarde, wordt de az storage blob copy start opdracht gebruikt om een actieve kopie te maken van de nieuwste versie van de blob.

Als versiebeheer is uitgeschakeld, wordt de az storage blob undelete opdracht gebruikt om elke voorlopig verwijderde blob in de container te herstellen.

Voordat u dit voorbeeld kunt volgen, moet u voorlopig verwijderen inschakelen voor ten minste één van uw opslagaccounts. Raadpleeg het artikel Voorlopig verwijderen voor blobs of de naslaginformatie az storage blob undelete voor meer informatie over de optie voor gegevensbeveiliging voor voorlopig verwijderen.

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

Volgende stappen