Sdílet prostřednictvím


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

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

Další kroky