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
Gebruik de Bash-omgeving in Azure Cloud Shell. Zie quickstart voor Bash in Azure Cloud Shell voor meer informatie.
Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren. Als u in Windows of macOS werkt, kunt u Azure CLI uitvoeren in een Docker-container. Zie De Azure CLI uitvoeren in een Docker-container voor meer informatie.
Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht az login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Raadpleeg Aanmelden bij Azure CLI voor aanvullende aanmeldingsopties.
Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Raadpleeg Extensies gebruiken met Azure CLI voor meer informatie over extensies.
Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.
- 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 +%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
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. U kunt een virtuele map opgeven als onderdeel van de --prefix
parameter.
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 meerdere objecttypen te retourneren.
De --num-results
parameter kan worden gebruikt om het aantal 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 alle blobs binnen een opgegeven container. Bij de tweede benadering wordt de --prefix
parameter gebruikt om alle blobs in de containers weer te geven die beginnen met het opgegeven voorvoegsel. De derde methode gebruikt de --num-results
parameter om de geretourneerde resultaten te beperken en de --show-next-marker
parameter om het vervolgtoken in de resultaten op te nemen. Wanneer een vervolgtoken aanwezig is in de resultaten, wordt het doorgegeven aan de volgende aanroep om de volgende set resultaten op te az storage blob list
halen.
Zie de naslaginformatie over az storage blob list voor meer informatie.
#!/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
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
, --file
en --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 vele duizenden resources kunnen hebben, wordt het gebruik van de --num-results
parameter aanbevolen.
Zie de naslaginformatie 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 vele duizenden resources kunnen 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. Met de kopieer-blobbewerking maakt u 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 voorlopig verwijderen van uw opslagaccount is ingeschakeld, retourneert het doorgeven van de --include d
parameter 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 op met alle unieke blobversies. 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