Blokkblobok kezelése az Azure CLI-vel

A Blob Storage támogatja a blokkblobokat, a hozzáfűző blobokat és a lapblobokat. A blokkblobok nagy mennyiségű adat hatékony feltöltésére vannak optimalizálva. A blokkblobok ideálisak képek, dokumentumok és más típusú adatok tárolására, amelyek nem tartoznak véletlenszerű olvasási és írási műveletek hatálya alá. Ez a cikk a blokkblobok működését ismerteti.

Előfeltételek

Az Azure Storage eléréséhez Azure-előfizetésre lesz szüksége. Ha még nem rendelkezik előfizetéssel, a kezdés előtt hozzon létre egy ingyenes fiókot .

Az Azure Storage-hoz való minden hozzáférés egy tárfiókon keresztül történik. Ebben a rövid útmutatóban hozzon létre egy tárfiókot az Azure Portal, az Azure PowerShell vagy az Azure CLI használatával. A tárfiókok létrehozásával kapcsolatban lásd : Tárfiók létrehozása.

A környezet előkészítése az Azure CLI-hez

  • Ez a cikk az Azure CLI 2.0.46-os vagy újabb verzióját igényli. Az Azure Cloud Shell használata esetén a legújabb verzió már telepítve van.

Blob Storage-hozzáférés engedélyezése

A Blob Storage-hoz való hozzáférést az Azure CLI-ből engedélyezheti a Microsoft Entra hitelesítő adataival vagy egy tárfiók hozzáférési kulcsával. A Microsoft Entra hitelesítő adatainak használata ajánlott, és a jelen cikk példái kizárólag a Microsoft Entra-azonosítót használják.

A Blob Storage-beli adatműveletek Azure CLI-parancsai támogatják a --auth-mode paramétert, amely lehetővé teszi egy adott művelet engedélyezésének megadását. Állítsa be a paramétert --auth-mode úgy, hogy a Microsoft Entra hitelesítő adataival engedélyezze a bejelentkezést . A paramétert csak a --auth-mode Blob Storage-adatműveletek támogatják. Az olyan felügyeleti műveletek, mint például egy erőforráscsoport vagy tárfiók létrehozása, automatikusan a Microsoft Entra hitelesítő adatait használják az engedélyezéshez. További információ: A blobadatokhoz való hozzáférés engedélyezése az Azure CLI-vel.

Futtassa a login parancsot egy böngésző megnyitásához és az Azure-előfizetéshez való csatlakozáshoz.


az login

Tároló létrehozása

Minden blobadat tárolókban van tárolva, ezért az adatok feltöltéséhez legalább egy tárolóerőforrásra lesz szüksége. Ha szükséges, az alábbi példában hozzon létre egy tárolót. További információ: Blobtárolók kezelése az Azure CLI használatával.


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

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

Ha a cikkben szereplő példákat használja, a zárójelben szereplő helyőrző értékeket a saját értékeire kell cserélnie. Az Azure CLI-vel való bejelentkezéssel kapcsolatos további információkért lásd: Bejelentkezés az Azure CLI-vel.

Blobok feltöltése

Az Azure CLI olyan parancsokat kínál, amelyek a követelményektől függően egy erőforráson vagy több erőforráson hajtanak végre műveleteket.

Ha egy fájlt fel szeretne tölteni egy blokkblobba, adja át a szükséges paraméterértékeket a az storage blob upload parancsnak. Adja meg a forrás elérési útját és a fájl nevét a --file paraméterrel, valamint a céltároló nevét a --container-name paraméterrel. A paramétert is meg kell adnia --account-name . Ez a parancs létrehoz egy új blobot, vagy felülírja az eredeti blobot, ha már létezik.

A parancs használatával az storage blob upload-batch rekurzív módon feltölthet több blobot egy tárolóba. A Unix fájlnévminta egyeztetésével megadhat egy fájltartományt, amelyet fel szeretne tölteni a --pattern paraméterrel. A támogatott minták a következők*: , ?[seq]és [!seq]. További információkért tekintse meg a Unix-fájlnévminta-egyeztetés Python-dokumentációját.

Az alábbi példában az első művelet a az storage blob upload parancs használatával tölt fel egyetlen, elnevezett fájlt. A forrásfájl és a céltároló tárolója a --file paraméterekkel együtt --container-name van megadva.

A második művelet azt mutatja be, hogy a az storage blob upload-batch parancs több fájl feltöltésére használható. A --if-modified-since paraméter biztosítja, hogy csak az elmúlt hét napon belül módosított fájlok legyenek feltöltve. A paraméter által megadott értéket UTC formátumban kell megadni.


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

Blobok listázása

Alapértelmezés szerint a parancs felsorolja a az storage blob list tárolóban tárolt összes blobot. A keresés hatókörének finomításához különböző megközelítéseket használhat. A tárfiókok tárolóinak vagy blobjainak száma nincs korlátozva. A több ezer blob lekérésének elkerülése érdekében érdemes korlátozni a visszaadott adatok mennyiségét.

--prefix A paraméterrel kijelölhet egyetlen ismert fájlt vagy egy olyan fájltartományt, amelynek a neve egy meghatározott sztringgel kezdődik.

Alapértelmezés szerint csak a blobok jelennek meg egy listaelem-műveletben. Bizonyos esetekben érdemes lehet átadni egy értéket a --include paraméternek, amely további típusú objektumokat, például helyreállíthatóan törölt blobokat, pillanatképeket és verziókat ad vissza. Ezek az értékek kombinálhatók több objektumtípusnál is.

A --num-results paraméter a tárolóból visszaadott szűretlen blobok számának korlátozására használható. Az összes Azure-erőforrásra 5000 szolgáltatási korlát vonatkozik. Ez a korlát biztosítja, hogy kezelhető mennyiségű adat legyen lekérve, és hogy a teljesítmény ne legyen hatással a teljesítményre. Ha a visszaadott blobok száma meghaladja az értéket vagy a --num-results szolgáltatási korlátot, a rendszer egy folytatási jogkivonatot ad vissza. Ez a jogkivonat lehetővé teszi, hogy több kérést használjon tetszőleges számú blob lekéréséhez. További információ a bloberőforrások számbavételéről.

Az alábbi példa számos módszert mutat be a blobok listájának megadására. Az első megközelítés egyetlen blobot sorol fel egy adott tárolóerőforráson belül. A második megközelítés a --prefix paraméterrel listáz minden blobot az összes tárolóban, egy louis előtaggal. A keresés a paramétert használó öt tárolóra korlátozódik --num-results . A harmadik megközelítés a tárolón belüli összes blob lekérésének korlátozására használ --num-results és --marker paramétereket.

További információkért tekintse meg az az storage bloblista-referenciát .


#!/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 letöltése

A használati esettől függően a blobok letöltéséhez használhatja a parancsot vagy az storage blob download-batch a az storage blob download parancsot. Az egyes blobok letöltéséhez hívja meg közvetlenül a az storage blob download parancsot, és adja át a --container-name, --fileés --name paraméterek értékeit. A blob alapértelmezés szerint le lesz töltve a rendszerhéjkönyvtárba, de megadhat egy másik helyet. Ha a megadott elérési út nem létezik, a művelet sikertelen lesz.

Ha több blobot szeretne rekurzív módon letölteni egy tárolóból, használja a az storage blob download-batch parancsot. Ez a parancs támogatja a Paraméterrel egyező Unix fájlnévmintát --pattern . A támogatott minták a következők*: , ?[seq]és [!seq]. További információkért tekintse meg a Unix-fájlnévminta-egyeztetés Python-dokumentációját.

Az alábbi mintakód egy és több letöltési módszert is mutat be. Emellett egyszerűsített módszert is kínál az összes tárolóban egy helyettesítő karakter használatával adott fájlok keresésére. Mivel egyes környezetek több ezer erőforrással rendelkezhetnek, a paraméter használata --num-results ajánlott.

További információ: az storage blob download and az storage blob download batch 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

Blobtulajdonságok és metaadatok kezelése

A blobok a rendszertulajdonságokat és a felhasználó által definiált metaadatokat is elérhetővé teszik. A rendszertulajdonságok minden Blob Storage-erőforráson léteznek. Egyes tulajdonságok írásvédettek, míg mások írásvédettek vagy beállíthatók. A borítók alatt egyes rendszertulajdonságok bizonyos szabványos HTTP-fejlécekre vannak leképezve.

A felhasználó által definiált metaadatok egy vagy több, a Blob Storage-erőforráshoz megadott név-érték párból állnak. Metaadatok használatával további értékeket tárolhat az erőforrással. A metaadat-értékek saját célra szolgálnak, és nem befolyásolják az erőforrás viselkedését.

Blobtulajdonságok olvasása

A blob tulajdonságainak vagy metaadatainak olvasásához először le kell kérnie a blobot a szolgáltatásból. az storage blob show A parancs használatával lekérheti a blob tulajdonságait és metaadatait, a tartalmát azonban nem. Az alábbi példa lekéri a blobot, és felsorolja annak tulajdonságait.

További információ: az 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

Blob metaadatainak olvasása és írása

A blob metaadatai a blobhoz társított név-érték párok választható készletei. Ahogy az előző példában is látható, a blobokhoz kezdetben nincsenek metaadatok társítva, de szükség esetén hozzáadható. Az olvasáshoz használja a az storage blob metadata show parancsot. A blob metaadatainak frissítéséhez kulcs-érték párokat fog használni az storage blob metadata update és megadni. További információkért tekintse meg az az storage blob metaadatainak hivatkozását .

További információkért tekintse meg az az storage blob metaadatainak hivatkozását .

Az alábbi példa először frissíti, majd véglegesíti egy blob metaadatait, majd lekéri.

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

Blobok másolási műveletei

Számos forgatókönyv van, amelyekben különböző típusú blobok másolhatók. A cikkben szereplő példák a blobok blokkolására korlátozódnak. Az Azure CLI olyan parancsokat kínál, amelyek a követelményektől függően egy erőforráson vagy több erőforráson hajtanak végre műveleteket.

Egy adott blob másolásához használja a parancsot, és adja meg a az storage blob copy start forrás- és céltárolók és blobok értékeit. Forrásként egységes erőforrás-azonosítót (URI), megosztást vagy közös hozzáférésű jogosultságkódot (SAS) is megadhat.

Megadhatja a blob másolásának feltételeit is. Ezek a feltételek a forrás- vagy célblobra is beállíthatók. Hivatkozhat az utolsó módosított dátumra, címkeadatokra vagy ETag-értékre. Dönthet például úgy, hogy a legutóbb nem módosított blobokat külön tárolóba másolja. További információ: Feltételes fejlécek megadása blobszolgáltatás-műveletekhez.

A parancs használatával az storage blob copy start-batch több blobot is újrakurzívan másolhat ugyanazon tárfiók tárolói között. Ez a parancs a paraméterek és --destination-container a --source-container paraméterek értékeit igényli, és az összes fájlt átmásolhatja a forrás és a cél között. A parancssori felület más kötegelt parancsaihoz hasonlóan ez a parancs is támogatja a --pattern paraméterrel egyező Unix-fájlnévmintát. A támogatott minták a következők*: , ?[seq]és [!seq]. További információkért tekintse meg a Unix-fájlnévminta-egyeztetés Python-dokumentációját.

Feljegyzés

Fontolja meg az AzCopy használatát az egyszerűség és a teljesítmény érdekében, különösen akkor, ha blobokat másol a tárfiókok között. Az AzCopy egy parancssori segédprogram, amellyel blobokat és fájlokat másolhat a tárfiókok között. További információ az AzCopy használatának első lépéseiről.

További információkért lásd az az storage blob másolási referenciát.

Az alábbi mintakód egy és több másolási műveletre is mutat példát. Mivel egyes környezetek több ezer erőforrással rendelkezhetnek, a paraméter használata --num-results ajánlott. Az első példa átmásolja a secret-town-road.png blobot a fényképek tárolójából a helyek tárolóba. Mindkét tároló ugyanabban a tárfiókban található. Az eredmény ellenőrzi a másolási művelet sikerességét.

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

Pillanatkép-blobok

Az alapblobhoz társított bérletek nem befolyásolják a pillanatképet. Pillanatképen nem szerezhet be bérletet. További információ a Blob-pillanatképekről. További információ: az az storage blob snapshot reference .

Az alábbi mintakód lekéri a blobot egy tárolóból, és pillanatképet hoz létre róla.

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

Blobszint beállítása

Amikor módosítja egy blob szintjét, áthelyezi a blobot és annak összes adatát a célszintre. A paranccsal módosíthatja a réteget a gyakori elérésű, a ritka elérésű és az az storage blob set-tier archiválás között.

A követelményektől függően a Blob másolása művelettel is másolhat blobokat az egyik rétegből a másikba. A Blob másolása művelet létrehoz egy új blobot a kívánt szinten, miközben a forrásblob az eredeti szinten marad.

A ritka elérésű vagy a gyakori elérésűrőlaz archív szintre való váltás szinte azonnal megtörténik. Miután a blob átkerül az archív szintre, offline állapotúnak minősül, és nem olvasható és nem módosítható. Mielőtt elolvashatja vagy módosíthatja egy archivált blob adatait, újra kell hidratálnia azokat egy online szintre. További információ a blobrehidratálásról az archív szintről.

További információ: az az storage blob set-tier reference.

Az alábbi mintakód a tárolóban lévő egyetlen, elnevezett blob esetében állítja be a archive szintet gyakori elérésűre.

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

Blobcímkéket használó műveletek

A blobindexcímkék megkönnyítik az adatkezelést és a felderítést. A blobindex-címkék felhasználó által definiált kulcs-érték index attribútumok, amelyeket a blobokra alkalmazhat. A konfigurálás után kategorizálhatja és megkeresheti az objektumokat egy adott tárolóban vagy az összes tárolóban. A bloberőforrások dinamikusan kategorizálhatók az indexcímkék frissítésével anélkül, hogy módosítást kellene igényelniük a tárolószervezetben. Ez a megközelítés rugalmas módot kínál a változó adatkövetelmények kezelésére. Egyszerre használhat metaadat- és indexcímkéket is. További információ az indexcímkékről: Azure Blob-adatok kezelése és megkeresése blobindexcímkékkel.

Tipp.

Az alábbi kódminta mintamegfeleltetés használatával kér le szöveget egy ismert struktúrával rendelkező XML-fájlból. A példa a blobcímkék egyszerű Bash-funkcióval történő hozzáadásának egyszerűsített megközelítését szemlélteti. A tényleges adatelemző eszköz használata mindig ajánlott az éles számítási feladatokhoz szükséges adatok felhasználásakor.

Az alábbi példa bemutatja, hogyan adhat hozzá blobindexcímkéket blobok sorozatához. A példa adatokat olvas be egy XML-fájlból, és arra használja, hogy indexcímkéket hozzon létre több blobon. A mintakód használatához hozzon létre egy helyi blob-list.xml fájlt a C:\temp könyvtárban. Az XML-adatok alább olvashatók.

További információ: az 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>

A mintakód iterálja az XML-fájl sorait. Megkeresi a Helyszín elemet, és változókat hoz létre a Név és a Típus értékhez. Ezután végigvezeti a fennmaradó sorokat, és címkéket hoz létre a csomópontok által File hivatkozott blobokhoz.

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

Blobok törlése

A parancsokkal az storage blob deleteaz storage blob delete-batch egyetlen blobot vagy blobsorozatot is törölhet. Több blob törlésekor használhat feltételes műveleteket, hurkokat vagy egyéb automatizálásokat az alábbi példákban látható módon.

Figyelmeztetés

Az alábbi példák futtatása véglegesen törölheti a blobokat. A Microsoft javasolja a tárolók helyreállítható törlésének engedélyezését a tárolók és blobok véletlen törlés elleni védelméhez. További információ: Tárolók helyreállítható törlése.

Az alábbi mintakód egyéni és kötegelt törlési műveletekre is mutat példát. Az első példa egyetlen blobot töröl. A második példa azt szemlélteti, hogy a Bashben a logikai műveletek több blob törlésére használhatók. A harmadik példa a bennett-x formátumú blobok törlésére használja a delete-batch parancsot, kivéve a bennett-2 formátumot.

További információkért tekintse meg az az storage blob delete és az az storage blob delete-batch referenciát.

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

Bizonyos esetekben lehetséges a törölt blobok lekérése. Ha a tárfiók helyreállítható törlési adatvédelmi lehetősége engedélyezve van, a paraméter és az --include d érték a fiók megőrzési időszakán belül törölt blobokat adja vissza. A helyreállítható törléssel kapcsolatos további információkért tekintse meg a blobok helyreállítható törléséről szóló cikket.

Az alábbi példák segítségével lekérheti a tárolóhoz társított megőrzési időszakon belül törölt blobok listáját. Az első példa megjeleníti az összes legutóbb törölt blob listáját, valamint azokat a dátumokat, amelyeken törölték őket. A második példa felsorolja az összes törölt blobot, amelyek megfelelnek egy adott előtagnak.

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

Törölt blob visszaállítása

A Blobok listája szakaszban leírtaknak megfelelően konfigurálhatja a helyreállítható törlési adatvédelmi beállítást a tárfiókban. Ha engedélyezve van, a kapcsolódó megőrzési időszakon belül törölt tárolók visszaállíthatók. Verziószámozással is fenntarthatja a blobok korábbi verzióit minden helyreállításhoz és helyreállításhoz.

Ha a blob verziószámozása és a blob helyreállítható törlése is engedélyezve van, akkor a blobok módosítása, felülírása, törlése vagy visszaállítása automatikusan létrehoz egy új verziót. A törölt blobok visszaállításához használt módszer attól függ, hogy engedélyezve van-e a verziószámozás a tárfiókban.

Az alábbi kódminta visszaállítja az összes helyreállíthatóan törölt blobot, vagy ha engedélyezve van a verziószámozás, visszaállítja a blob legújabb verzióját. Először meghatározza, hogy a verziószámozás engedélyezve van-e a az storage account blob-service-properties show paranccsal.

Ha engedélyezve van a verziószámozás, a parancs lekéri az az storage blob list összes egyedileg elnevezett blobverzió listáját. Ezután a lista blobverziói dátum szerint lesznek lekérve és rendezve. Ha az attribútumértékkel isCurrentVersion nem található verzió, a az storage blob copy start parancs a blob legújabb verziójának aktív másolatát készíti el.

Ha a verziószámozás le van tiltva, a az storage blob undelete parancs a tárolóban lévő összes helyreállíthatóan törölt blob visszaállítására szolgál.

A példa követéséhez engedélyeznie kell a helyreállítható törlést legalább egy tárfiókon. A helyreállítható törlés adatvédelmi beállításával kapcsolatos további információkért tekintse meg a blobok helyreállítható törléséről szóló cikket vagy az az storage blob undelete hivatkozását .

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

Következő lépések