Správa objektů blob bloku pomocí Azure CLI
Úložiště objektů blob podporuje objekty blob bloku, doplňovací objekty blob a objekty blob stránky. Objekty blob bloku jsou optimalizované pro efektivní nahrávání velkých objemů dat. Objekty blob bloku jsou ideální pro ukládání obrázků, dokumentů a jiných typů dat, které nejsou předmětem náhodných operací čtení a zápisu. Tento článek vysvětluje, jak pracovat s objekty blob bloku.
Požadavky
Pro přístup ke službě Azure Storage budete potřebovat předplatné Azure. Pokud ještě nemáte předplatné, vytvořte si před zahájením bezplatný účet .
Veškerý přístup ke službě Azure Storage probíhá prostřednictvím účtu úložiště. Pro účely tohoto rychlého startu vytvořte účet úložiště pomocí webu Azure Portal, Azure PowerShellu nebo Azure CLI. Nápovědu k vytvoření účtu úložiště najdete v tématu Vytvoření účtu úložiště.
Příprava prostředí pro rozhraní příkazového řádku Azure
Použijte prostředí Bash v Azure Cloud Shellu. Další informace najdete v tématu Rychlý start pro Bash v Azure Cloud Shellu.
Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, nainstalujte Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Docker. Další informace najdete v tématu Jak spustit Azure CLI v kontejneru Dockeru.
Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení najdete v tématu Přihlášení pomocí Azure CLI.
Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.
Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.
- Tento článek vyžaduje verzi 2.0.46 nebo novější azure CLI. Pokud používáte Azure Cloud Shell, je už nainstalovaná nejnovější verze.
Autorizace přístupu k úložišti objektů blob
Přístup k úložišti objektů blob můžete autorizovat z Azure CLI pomocí přihlašovacích údajů Microsoft Entra nebo pomocí přístupového klíče účtu úložiště. Doporučuje se používat přihlašovací údaje Microsoft Entra a příklady tohoto článku používají výhradně ID Microsoft Entra.
Příkazy Azure CLI pro operace s daty v úložišti objektů blob podporují --auth-mode
parametr, který umožňuje určit, jak autorizovat danou operaci. --auth-mode
Nastavte parametr pro přihlášení pro autorizaci pomocí přihlašovacích údajů Microsoft Entra. Parametr podporují --auth-mode
pouze operace úložiště objektů blob. Operace správy, jako je například vytvoření skupiny prostředků nebo účtu úložiště, k autorizaci automaticky používají přihlašovací údaje Microsoft Entra. Další informace najdete v tématu Volba způsobu autorizace přístupu k datům objektů blob pomocí Azure CLI.
Spuštěním login
příkazu otevřete prohlížeč a připojte se k předplatnému Azure.
az login
Vytvoření kontejneru
Všechna data objektů blob jsou uložená v kontejnerech, takže před nahráním dat budete potřebovat aspoň jeden prostředek kontejneru. V případě potřeby vytvořte kontejner úložiště pomocí následujícího příkladu. Další informace najdete v tématu Správa kontejnerů objektů blob pomocí 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
Pokud použijete příklady zahrnuté v tomto článku, budete muset nahradit zástupné hodnoty v hranatých závorkách vlastními hodnotami. Další informace o přihlášení k Azure pomocí Azure CLI najdete v tématu Přihlášení pomocí Azure CLI.
Nahrání objektů blob
Azure CLI nabízí příkazy, které provádějí operace s jedním nebo několika prostředky v závislosti na vašich požadavcích.
Pokud chcete nahrát soubor do objektu blob bloku, předejte do příkazu požadované hodnoty az storage blob upload
parametrů. Zadejte zdrojovou cestu a název souboru s parametrem --file
a název cílového kontejneru s parametrem --container-name
. Budete také muset zadat --account-name
parametr. Tento příkaz vytvoří nový objekt blob nebo přepíše původní objekt blob, pokud už existuje.
Pomocí příkazu můžete az storage blob upload-batch
rekurzivně nahrát více objektů blob do kontejneru úložiště. Můžete použít vzor názvu souboru unixu určit rozsah souborů k nahrání s parametrem --pattern
. Podporované vzory jsou *
, ?
, [seq]
a [!seq]
. Další informace najdete v dokumentaci Pythonu k porovnávání vzorů názvů souborů systému Unix.
V následujícím příkladu první operace použije az storage blob upload
příkaz k nahrání jednoho pojmenovaného souboru. Zdrojový soubor a cílový kontejner úložiště jsou zadané pomocí --file
parametrů a --container-name
parametrů.
Druhá operace ukazuje použití az storage blob upload-batch
příkazu k nahrání více souborů. Parametr --if-modified-since
zajistí, že se nahrají jenom soubory změněné během posledních sedmi dnů. Hodnota zadaná tímto parametrem musí být zadána ve formátu UTC.
#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"
lastModified=$(date +%Y:%m:%d -d "7 days ago")
path="C:\\temp\\"
filename="demo-file.txt"
imageFiles="*.png"
file="$path$filename"
#Upload a single named file
az storage blob upload \
--file $file \
--container-name $containerName \
--account-name $storageAccount \
--auth-mode login
#Upload multiple image files recursively
az storage blob upload-batch \
--destination $containerName \
--source $path \
--pattern *.png \
--account-name $storageAccount \
--auth-mode login \
--if-modified-since $lastModified
Výpis objektů blob
Ve výchozím nastavení příkaz az storage blob list
vypíše všechny objekty blob uložené v kontejneru. Rozsah hledání můžete upřesnit pomocí různých přístupů. Počet kontejnerů nebo objektů blob, které může mít účet úložiště, neexistuje žádné omezení. Pokud se chcete vyhnout načítání tisíců objektů blob, je vhodné omezit množství vrácených dat.
Pomocí parametru --prefix
vyberte jeden známý soubor nebo rozsah souborů, jejichž názvy začínají definovaným řetězcem. Jako součást parametru --prefix
můžete zadat virtuální adresář.
Ve výchozím nastavení se v operaci výpisu vrátí jenom objekty blob. V některých scénářích můžete chtít předat hodnotu parametru --include
, která vrátí další typy objektů, jako jsou obnovitelné odstraněné objekty blob, snímky a verze. Tyto hodnoty lze zkombinovat a vrátit více typů objektů.
Parametr --num-results
lze použít k omezení počtu objektů blob vrácených z kontejneru. Pro všechny prostředky Azure se ukládá limit služby 5 000. Tento limit zajišťuje, aby se načetly spravovatelné objemy dat a že to nemá vliv na výkon. Pokud počet vrácených objektů blob překročí --num-results
hodnotu nebo limit služby, vrátí se token pro pokračování. Tento token umožňuje použít více požadavků k načtení libovolného počtu objektů blob. Další informace jsou k dispozici pro výčet prostředků objektů blob.
Následující příklad ukazuje několik přístupů používaných k poskytnutí seznamu objektů blob. První přístup vypíše všechny objekty blob v zadaném kontejneru. Druhý přístup pomocí parametru --prefix
vypíše všechny objekty blob v kontejnerech, které začínají zadanou předponou. Třetí přístup používá --num-results
parametr k omezení vrácených výsledků a --show-next-marker
parametru k zahrnutí tokenu pokračování do výsledků. Pokud ve výsledcích existuje token pro pokračování, předá se následnému volání, které az storage blob list
načte další sadu výsledků.
Další informace najdete v referenčních informacích k příkazu az storage blob list .
#!/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
Stažení objektu blob
V závislosti na vašem případu použití použijete ke stažení objektů blob příkaz az storage blob download
nebo az storage blob download-batch
příkaz. Pokud chcete stáhnout jednotlivé objekty blob, zavolejte az storage blob download
příkaz přímo a předejte hodnoty pro --container-name
--file
, a --name
parametry. Objekt blob se ve výchozím nastavení stáhne do adresáře prostředí, ale můžete zadat alternativní umístění. Operace selže s chybou, pokud zadaná cesta neexistuje.
Pokud chcete rekurzivně stáhnout více objektů blob z kontejneru úložiště, použijte az storage blob download-batch
příkaz. Tento příkaz podporuje vzor názvu souboru unixu odpovídající parametru --pattern
. Podporované vzory jsou *
, ?
, [seq]
a [!seq]
. Další informace najdete v dokumentaci Pythonu k porovnávání vzorů názvů souborů systému Unix.
Následující ukázkový kód poskytuje příklad přístupu ke stažení s jedním i několika způsoby stažení. Nabízí také zjednodušený přístup k vyhledávání všech kontejnerů pro konkrétní soubory pomocí zástupných znaků. Vzhledem k tomu, že některá prostředí můžou mít mnoho tisíc prostředků, doporučuje se použít --num-results
parametr.
Další informace najdete v tématu az storage blob download a az storage blob downloadbatch reference.
#!/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
Správa vlastností a metadat objektů blob
Objekt blob zveřejňuje systémové vlastnosti i uživatelsky definovaná metadata. Pro každý prostředek blob Storage existují systémové vlastnosti. Některé vlastnosti jsou jen pro čtení, zatímco jiné můžou být jen pro čtení nebo nastavení. Pod popisky se některé systémové vlastnosti mapují na určité standardní hlavičky HTTP.
Uživatelsky definovaná metadata se skládají z jednoho nebo více dvojic název-hodnota, které zadáte pro prostředek blob Storage. Metadata můžete použít k uložení dalších hodnot s prostředkem. Hodnoty metadat jsou určené pro vlastní účely a nemají vliv na chování prostředku.
Čtení vlastností objektu blob
Pokud chcete číst vlastnosti objektu blob nebo metadata, musíte nejprve načíst objekt blob ze služby. az storage blob show
Pomocí příkazu načtěte vlastnosti a metadata objektu blob, ale ne jeho obsah. Následující příklad načte objekt blob a vypíše jeho vlastnosti.
Další informace najdete v tématu az storage blob show reference.
#!/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
Čtení a zápis metadat objektů blob
Metadata objektů blob jsou volitelná sada dvojic názvů a hodnot přidružených k objektu blob. Jak je znázorněno v předchozím příkladu, nejsou k objektu blob zpočátku přidružena žádná metadata, i když je možné ho přidat v případě potřeby. Ke čtení použijte az storage blob metadata show
příkaz. Pokud chcete aktualizovat metadata objektů blob, použijete az storage blob metadata update
a zadáte pole párů klíč-hodnota. Další informace najdete v referenčních informacích k příkazu az storage blob metadat .
Další informace najdete v referenčních informacích k příkazu az storage blob metadat .
Následující příklad nejprve aktualizuje a pak potvrdí metadata objektu blob a pak ho načte.
#!/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
Operace kopírování pro objekty blob
Existuje mnoho scénářů, ve kterých je možné kopírovat objekty blob různých typů. Příklady v tomto článku jsou omezené na objekty blob bloku. Azure CLI nabízí příkazy, které provádějí operace s jedním nebo několika prostředky v závislosti na vašich požadavcích.
Pokud chcete zkopírovat konkrétní objekt blob, použijte az storage blob copy start
příkaz a zadejte hodnoty pro zdrojové a cílové kontejnery a objekty blob. Jako zdroj je také možné zadat identifikátor URI (Uniform Resource Identifier), sdílenou složku nebo sdílený přístupový podpis (SAS).
Můžete také zadat podmínky, za kterých se objekt blob zkopíruje. Tyto podmínky je možné nastavit pro zdrojový nebo cílový objekt blob. Můžete odkazovat na datum poslední změny, data značek nebo hodnotu značky ETag. Můžete se například rozhodnout kopírovat objekty blob, které nebyly nedávno změněny do samostatného kontejneru. Další informace najdete v tématu Určení podmíněných hlaviček pro operace služby Blob Service.
Pomocí příkazu můžete az storage blob copy start-batch
rekurzivně kopírovat více objektů blob mezi kontejnery úložiště ve stejném účtu úložiště. Tento příkaz vyžaduje hodnoty pro parametry --source-container
a --destination-container
může kopírovat všechny soubory mezi zdrojem a cílem. Stejně jako ostatní dávkové příkazy rozhraní příkazového řádku podporuje tento příkaz vzor názvu souboru unixu odpovídající parametru --pattern
. Podporované vzory jsou *
, ?
, [seq]
a [!seq]
. Další informace najdete v dokumentaci Pythonu k porovnávání vzorů názvů souborů systému Unix.
Poznámka:
Zvažte použití nástroje AzCopy pro usnadnění a výkon, zejména při kopírování objektů blob mezi účty úložiště. AzCopy je nástroj příkazového řádku, pomocí kterého můžete kopírovat objekty blob nebo soubory do nebo z účtu úložiště. Přečtěte si další informace o tom, jak začít používat AzCopy.
Další informace najdete v referenčních informacích k příkazu az storage blob copy .
Následující ukázkový kód poskytuje příklad jedné i více operací kopírování. Vzhledem k tomu, že některá prostředí můžou mít mnoho tisíc prostředků, doporučuje se použít --num-results
parametr. První příklad zkopíruje objekt blob secret-town-road.png z kontejneru fotografií do kontejneru umístění . Oba kontejnery existují ve stejném účtu úložiště. Výsledek ověří úspěch operace kopírování.
#!/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
Objekty blob snímků
Všechna zapůjčení přidružená k základnímu objektu blob nemají vliv na snímek. Zapůjčení snímku není možné získat. Přečtěte si další informace o snímcích objektů blob. Další informace najdete v referenčních informacích k příkazu az storage blob snapshot .
Následující ukázkový kód načte objekt blob z kontejneru úložiště a vytvoří jeho snímek.
#!/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
Nastavení úrovně objektu blob
Když změníte úroveň objektu blob, přesunete objekt blob a všechna její data do cílové úrovně. Pomocí příkazu můžete změnit úroveň mezi horkou, studenou a archivní az storage blob set-tier
úrovní.
V závislosti na vašich požadavcích můžete také použít operaci kopírování objektu blob ke kopírování objektu blob z jedné vrstvy do druhé. Operace kopírování objektu blob vytvoří nový objekt blob v požadované vrstvě, zatímco zdrojový objekt blob zůstane v původní úrovni.
Změna vrstev ze studené nebo horké na archivní probíhá téměř okamžitě. Po přesunutí objektu blob do archivní úrovně se považuje za offline a nedá se číst ani upravovat. Než budete moct číst nebo upravovat data archivovaného objektu blob, budete je muset dosadit do online vrstvy. Přečtěte si další informace o dosazování objektů blob z archivní úrovně.
Další informace najdete v tématu az storage blob set-tier reference.
Následující ukázkový kód nastaví úroveň na horkou pro jeden pojmenovaný objekt blob v rámci kontejneru archive
.
#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"
az storage blob set-tier
--container-name $containerName \
--name Blue-Moon.mp3 \
--tier Hot \
--account-name $storageAccount \
--auth-mode login
Operace s využitím značek objektů blob
Značky indexu objektů blob usnadňují správu a zjišťování dat. Značky indexu objektů blob jsou uživatelsky definované atributy indexu klíč-hodnota, které můžete použít u objektů blob. Po nakonfigurování můžete kategorizovat a vyhledávat objekty v rámci jednotlivého kontejneru nebo napříč všemi kontejnery. Prostředky objektů blob je možné dynamicky kategorizovat aktualizací jejich indexových značek bez nutnosti změny v organizaci kontejneru. Tento přístup nabízí flexibilní způsob, jak se vypořádat s měnícími se požadavky na data. Současně můžete používat metadata i indexové značky. Další informace o značkách indexu najdete v tématu Správa a vyhledání dat objektů blob v Azure pomocí značek indexu objektů blob.
Tip
Následující ukázka kódu používá porovnávání vzorů k získání textu ze souboru XML se známou strukturou. Příklad se používá k ilustraci zjednodušeného přístupu pro přidávání značek objektů blob pomocí základních funkcí Bash. Použití skutečného nástroje pro analýzu dat se vždy doporučuje při využívání dat pro produkční úlohy.
Následující příklad ukazuje, jak přidat značky indexu objektů blob do řady objektů blob. Příklad čte data ze souboru XML a používá je k vytvoření indexových značek na několika objektech blob. Pokud chcete použít ukázkový kód, vytvořte v adresáři C:\temp místní blob-list.xml soubor. Níže jsou uvedena data XML.
Další informace najdete v tématu az storage blob set-tier reference.
<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>
Vzorový kód iteruje řádky v souboru XML. Vyhledá prvek Venue a vytvoří proměnné pro hodnoty Name a Type. Pak iteruje zbývající řádky a vytvoří značky pro každý objekt blob, na který File
odkazuje uzel.
#!/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
Odstraňovat objekty blob
Pomocí příkazů a příkazů můžete odstranit jeden objekt blob nebo řadu objektů blob az storage blob delete
az storage blob delete-batch
. Při odstraňování více objektů blob můžete použít podmíněné operace, smyčky nebo jinou automatizaci, jak je znázorněno v následujících příkladech.
Upozorňující
Spuštění následujících příkladů může trvale odstranit objekty blob. Microsoft doporučuje povolit obnovitelné odstranění kontejneru, aby chránil kontejnery a objekty blob před náhodným odstraněním. Další informace najdete v tématu Obnovitelné odstranění kontejnerů.
Následující ukázkový kód poskytuje příklad jednotlivých i dávkových operací odstranění. První příklad odstraní jeden pojmenovaný objekt blob. Druhý příklad znázorňuje použití logických operací v Bash k odstranění více objektů blob. Třetí příklad používá delete-batch
příkaz k odstranění všech objektů blob s formátem bennett-x s výjimkou bennett-2.
Další informace najdete v tématu az storage blob delete a az storage blob delete-batch reference.
#!/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
V některých případech je možné načíst odstraněné objekty blob. Pokud je povolená možnost obnovitelného odstranění dat vašeho účtu úložiště, předáním parametru --include d
se vrátí objekty blob, které byly odstraněny během doby uchování účtu. Další informace o obnovitelném odstranění najdete v článku o obnovitelném odstranění objektů blob .
Pomocí následujících příkladů můžete načíst seznam objektů blob odstraněných v rámci přidružené doby uchovávání dat kontejneru. První příklad zobrazí seznam všech nedávno odstraněných objektů blob a kalendářních dat, ke kterým byly odstraněny. Druhý příklad zobrazí seznam všech odstraněných objektů blob odpovídajících určité předponě.
#!/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}"
Obnovení odstraněného objektu blob
Jak je uvedeno v části Seznam objektů blob , můžete u svého účtu úložiště nakonfigurovat možnost ochrany dat obnovitelného odstranění. Pokud je tato možnost povolená, je možné obnovit kontejnery odstraněné během přidružené doby uchovávání informací. Správu verzí můžete také použít k údržbě předchozích verzí objektů blob pro každé obnovení a obnovení.
Pokud jsou povolené správa verzí objektů blob i obnovitelné odstranění objektů blob, pak změny, přepsání, odstranění nebo obnovení objektu blob automaticky vytvoří novou verzi. Metoda, kterou použijete k obnovení odstraněného objektu blob, závisí na tom, jestli je ve vašem účtu úložiště povolená správa verzí.
Následující ukázka kódu obnoví všechny obnovitelně odstraněné objekty blob nebo pokud je povolená správa verzí, obnoví nejnovější verzi objektu blob. Nejprve určuje, jestli je povolená správa verzí pomocí az storage account blob-service-properties show
příkazu.
Pokud je povolená správa verzí, az storage blob list
příkaz načte seznam všech jednoznačně pojmenovaných verzí objektů blob. V dalším kroku se verze objektů blob v seznamu načtou a seřadí podle data. Pokud nejsou nalezeny žádné verze s hodnotou atributu isCurrentVersion
, az storage blob copy start
příkaz se použije k vytvoření aktivní kopie nejnovější verze objektu blob.
Pokud je správa verzí zakázaná, az storage blob undelete
příkaz se použije k obnovení každého obnovitelně odstraněného objektu blob v kontejneru.
Než budete moct postupovat podle tohoto příkladu, budete muset povolit obnovitelné odstranění alespoň u jednoho z vašich účtů úložiště. Další informace o možnosti obnovitelného odstranění dat najdete v článku obnovitelného odstranění objektů blob nebo příkazu az storage blob undelete reference.
#!/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