Udostępnij za pośrednictwem


Zarządzanie blokowymi obiektami blob za pomocą interfejsu wiersza polecenia platformy Azure

Usługa Blob Storage obsługuje blokowe, uzupełnialne i stronicowe obiekty blob. Blokowe obiekty blob są zoptymalizowane pod kątem wydajnego przekazywania dużych ilości danych. Blokowe obiekty blob są idealne do przechowywania obrazów, dokumentów i innych typów danych, które nie podlegają losowym operacjom odczytu i zapisu. W tym artykule wyjaśniono, jak pracować z blokowymi obiektami blob.

Wymagania wstępne

Aby uzyskać dostęp do usługi Azure Storage, potrzebujesz subskrypcji platformy Azure. Jeśli nie masz jeszcze subskrypcji, przed rozpoczęciem utwórz bezpłatne konto .

Cały dostęp do usługi Azure Storage odbywa się za pośrednictwem konta magazynu. Na potrzeby tego samouczka Szybki start utwórz konto magazynu przy użyciu witryny Azure Portal, programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure. Aby uzyskać pomoc dotyczącą tworzenia konta magazynu, zobacz Tworzenie konta magazynu.

Przygotowywanie środowiska dla interfejsu wiersza polecenia platformy Azure

  • Ten artykuł wymaga wersji 2.0.46 lub nowszej interfejsu wiersza polecenia platformy Azure. W przypadku korzystania z usługi Azure Cloud Shell najnowsza wersja jest już zainstalowana.

Autoryzowanie dostępu do usługi Blob Storage

Dostęp do usługi Blob Storage można autoryzować za pomocą interfejsu wiersza polecenia platformy Azure przy użyciu poświadczeń firmy Microsoft lub klucza dostępu do konta magazynu. Korzystanie z poświadczeń firmy Microsoft Entra jest zalecane, a w przykładach tego artykułu są używane wyłącznie identyfikator Microsoft Entra ID.

Polecenia interfejsu wiersza polecenia platformy Azure dla operacji danych w usłudze Blob Storage obsługują --auth-mode parametr, który umożliwia określenie sposobu autoryzowania danej operacji. --auth-mode Ustaw parametr , aby zalogować się do autoryzacji przy użyciu poświadczeń firmy Microsoft Entra. Parametr obsługuje --auth-mode tylko operacje na danych usługi Blob Storage. Operacje zarządzania, takie jak tworzenie grupy zasobów lub konta magazynu, automatycznie używają poświadczeń firmy Microsoft Entra do autoryzacji. Aby uzyskać więcej informacji, zobacz Wybieranie sposobu autoryzowania dostępu do danych obiektów blob za pomocą interfejsu wiersza polecenia platformy Azure.

Uruchom polecenie , login aby otworzyć przeglądarkę i połączyć się z subskrypcją platformy Azure.


az login

Tworzenie kontenera

Wszystkie dane obiektów blob są przechowywane w kontenerach, więc przed przekazaniem danych będzie potrzebny co najmniej jeden zasób kontenera. W razie potrzeby użyj poniższego przykładu, aby utworzyć kontener magazynu. Aby uzyskać więcej informacji, zobacz Zarządzanie kontenerami obiektów blob przy użyciu interfejsu wiersza polecenia platformy Azure.


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

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

Korzystając z przykładów zawartych w tym artykule, musisz zastąpić wartości symboli zastępczych w nawiasach własnymi wartościami. Aby uzyskać więcej informacji na temat logowania się do platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.

Przekazywanie obiektów blob

Interfejs wiersza polecenia platformy Azure oferuje polecenia, które wykonują operacje na jednym zasobie lub na wielu zasobach, w zależności od wymagań.

Aby przekazać plik do blokowego obiektu blob, przekaż wymagane wartości parametrów az storage blob upload do polecenia. Podaj ścieżkę źródłową i nazwę pliku z parametrem --file oraz nazwę kontenera docelowego z parametrem --container-name . Należy również podać --account-name parametr . To polecenie tworzy nowy obiekt blob lub zastępuje oryginalny obiekt blob, jeśli już istnieje.

Możesz użyć az storage blob upload-batch polecenia , aby rekursywnie przekazać wiele obiektów blob do kontenera magazynu. Możesz użyć dopasowania wzorca nazwy pliku systemu Unix, aby określić zakres plików do przekazania za pomocą parametru --pattern . Obsługiwane wzorce to *, , ?[seq]i [!seq]. Aby dowiedzieć się więcej, zapoznaj się z dokumentacją języka Python dotyczącą dopasowywania wzorca nazwy pliku systemu Unix.

W poniższym przykładzie pierwsza operacja używa az storage blob upload polecenia , aby przekazać pojedynczy nazwany plik. Źródłowy kontener magazynu i docelowy plik są określane za pomocą parametrów --file i --container-name .

Druga operacja demonstruje użycie az storage blob upload-batch polecenia do przekazania wielu plików. Parametr --if-modified-since gwarantuje, że zostaną przekazane tylko pliki zmodyfikowane w ciągu ostatnich siedmiu dni. Wartość podana przez ten parametr musi być podana w formacie 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

Wyświetlanie listy obiektów blob

Domyślnie polecenie az storage blob list wyświetla listę wszystkich obiektów blob przechowywanych w kontenerze. Do uściślenia zakresu wyszukiwania można użyć różnych metod. Nie ma żadnych ograniczeń dotyczących liczby kontenerów lub obiektów blob, które może mieć konto magazynu. Aby potencjalnie uniknąć pobierania tysięcy obiektów blob, warto ograniczyć ilość zwracanych danych.

Użyj parametru --prefix , aby wybrać jeden znany plik lub zakres plików, których nazwy zaczynają się od zdefiniowanego ciągu. W ramach parametru --prefix można określić katalog wirtualny.

Domyślnie w operacji wyświetlania listy są zwracane tylko obiekty blob. W niektórych scenariuszach możesz przekazać wartość parametru --include w celu zwrócenia dodatkowych typów obiektów, takich jak obiekty blob usunięte nietrwale, migawki i wersje. Te wartości można połączyć w celu zwrócenia wielu typów obiektów.

Parametr --num-results może służyć do ograniczania liczby obiektów blob zwracanych z kontenera. Limit usługi 5000 jest nakładany na wszystkie zasoby platformy Azure. Ten limit gwarantuje, że możliwe do zarządzania ilości danych zostaną pobrane i że wydajność nie będzie mieć wpływu. Jeśli liczba zwracanych obiektów blob przekracza --num-results wartość lub limit usługi, zwracany jest token kontynuacji. Ten token umożliwia pobranie dowolnej liczby obiektów blob przy użyciu wielu żądań. Więcej informacji można znaleźć w temacie Wyliczanie zasobów obiektów blob.

W poniższym przykładzie przedstawiono kilka podejść używanych do udostępniania listy obiektów blob. Pierwsze podejście zawiera listę wszystkich obiektów blob w określonym kontenerze. Drugie podejście używa parametru --prefix , aby wyświetlić listę wszystkich obiektów blob w kontenerach rozpoczynających się od określonego prefiksu. Trzecie podejście używa parametru --num-results w celu ograniczenia zwróconych wyników i parametru --show-next-marker w celu uwzględnienia tokenu kontynuacji w wynikach. Gdy token kontynuacji jest obecny w wynikach, jest przekazywany do kolejnego wywołania w celu az storage blob list pobrania następnego zestawu wyników.

Aby uzyskać więcej informacji, zobacz dokumentację 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

Pobieranie obiektu blob

W zależności od przypadku użycia użyjesz az storage blob download polecenia lub az storage blob download-batch , aby pobrać obiekty blob. Aby pobrać pojedynczy obiekt blob, wywołaj az storage blob download polecenie bezpośrednio i przekaż wartości parametrów --container-name, --filei --name . Obiekt blob jest domyślnie pobierany do katalogu powłoki, ale można określić alternatywną lokalizację. Operacja zakończy się niepowodzeniem z powodu błędu, jeśli określona ścieżka nie istnieje.

Aby rekursywnie pobrać wiele obiektów blob z kontenera az storage blob download-batch magazynu, użyj polecenia . To polecenie obsługuje wzorzec nazwy pliku systemu Unix pasujący do parametru --pattern . Obsługiwane wzorce to *, , ?[seq]i [!seq]. Aby dowiedzieć się więcej, zapoznaj się z dokumentacją języka Python dotyczącą dopasowywania wzorca nazwy pliku systemu Unix.

Poniższy przykładowy kod zawiera przykład podejścia zarówno do pojedynczego, jak i wielokrotnego pobierania. Oferuje również uproszczone podejście do wyszukiwania wszystkich kontenerów dla określonych plików przy użyciu symbolu wieloznakowego. Ponieważ niektóre środowiska mogą mieć wiele tysięcy zasobów, zaleca się użycie parametru --num-results .

Aby uzyskać więcej informacji, zobacz az storage blob download i az storage blob download batch reference (Dokumentacja usługi az storage blob download wsadowej).

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

Zarządzanie właściwościami i metadanymi obiektów blob

Obiekt blob uwidacznia zarówno właściwości systemu, jak i metadane zdefiniowane przez użytkownika. Właściwości systemu istnieją w każdym zasobie usługi Blob Storage. Niektóre właściwości są tylko do odczytu, podczas gdy inne mogą być odczytywane lub ustawiane. Pod osłonami niektóre właściwości systemu są mapowanie na niektóre standardowe nagłówki HTTP.

Metadane zdefiniowane przez użytkownika składają się z co najmniej jednej pary nazwa-wartość określonej dla zasobu usługi Blob Storage. Za pomocą metadanych można przechowywać dodatkowe wartości z zasobem. Wartości metadanych są przeznaczone do własnych celów i nie mają wpływu na zachowanie zasobu.

Odczytywanie właściwości obiektu blob

Aby odczytać właściwości obiektu blob lub metadane, musisz najpierw pobrać obiekt blob z usługi. Użyj polecenia , az storage blob show aby pobrać właściwości i metadane obiektu blob, ale nie jego zawartość. Poniższy przykład pobiera obiekt blob i wyświetla jego właściwości.

Aby uzyskać więcej informacji, zobacz dokumentację az storage blob show .

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

Odczytywanie i zapisywanie metadanych obiektu blob

Metadane obiektu blob to opcjonalny zestaw par nazw/wartości skojarzonych z obiektem blob. Jak pokazano w poprzednim przykładzie, początkowo nie ma żadnych metadanych skojarzonych z obiektem blob, ale można go dodać w razie potrzeby. Aby odczytać, użyj az storage blob metadata show polecenia . Aby zaktualizować metadane obiektu blob, użyjesz az storage blob metadata update i podasz tablicę par klucz-wartość. Aby uzyskać więcej informacji, zobacz dokumentację dotyczącą metadanych obiektu blob usługi az storage.

Aby uzyskać więcej informacji, zobacz dokumentację dotyczącą metadanych obiektu blob usługi az storage.

Poniższy przykład najpierw aktualizuje, a następnie zatwierdza metadane obiektu blob, a następnie pobiera je.

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

Operacje kopiowania dla obiektów blob

Istnieje wiele scenariuszy, w których można skopiować obiekty blob różnych typów. Przykłady w tym artykule są ograniczone do blokowych obiektów blob. Interfejs wiersza polecenia platformy Azure oferuje polecenia, które wykonują operacje na jednym zasobie lub na wielu zasobach, w zależności od wymagań.

Aby skopiować określony obiekt blob, użyj az storage blob copy start polecenia i określ wartości dla kontenerów źródłowych i docelowych oraz obiektów blob. Jako źródła można również podać jednolity identyfikator zasobu (URI), udział lub sygnaturę dostępu współdzielonego (SAS).

Można również określić warunki, w których obiekt blob zostanie skopiowany. Te warunki można ustawić dla źródłowego lub docelowego obiektu blob. Możesz odwołać się do ostatniej zmodyfikowanej daty, danych tagu lub wartości elementu ETag. Możesz na przykład skopiować obiekty blob, które nie zostały ostatnio zmodyfikowane do oddzielnego kontenera. Aby uzyskać więcej informacji, zobacz Określanie nagłówków warunkowych dla operacji usługi Blob Service.

Za pomocą az storage blob copy start-batch polecenia można rekursywnie kopiować wiele obiektów blob między kontenerami magazynu na tym samym koncie magazynu. To polecenie wymaga wartości parametrów --source-container i --destination-container i i może skopiować wszystkie pliki między źródłem i miejscem docelowym. Podobnie jak w przypadku innych poleceń wsadowych interfejsu wiersza polecenia, to polecenie obsługuje wzorzec nazwy pliku systemu Unix zgodny z parametrem --pattern . Obsługiwane wzorce to *, , ?[seq]i [!seq]. Aby dowiedzieć się więcej, zapoznaj się z dokumentacją języka Python dotyczącą dopasowywania wzorca nazwy pliku systemu Unix.

Uwaga

Rozważ użycie narzędzia AzCopy w celu ułatwienia i wydajności, zwłaszcza podczas kopiowania obiektów blob między kontami magazynu. AzCopy to narzędzie wiersza polecenia, przy użyciu którego można kopiować obiekty blob lub pliki do lub z konta magazynu. Dowiedz się więcej na temat rozpoczynania pracy z narzędziem AzCopy.

Aby uzyskać więcej informacji, zobacz dokumentację az storage blob copy .

Poniższy przykładowy kod zawiera przykład operacji kopiowania pojedynczego i wielu. Ponieważ niektóre środowiska mogą mieć wiele tysięcy zasobów, zaleca się użycie parametru --num-results . Pierwszy przykład kopiuje obiekt blob secret-town-road.png z kontenera photos do kontenera locations . Oba kontenery istnieją na tym samym koncie magazynu. Wynik weryfikuje powodzenie operacji kopiowania.

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

Migawki obiektów blob

Wszystkie dzierżawy skojarzone z podstawowym obiektem blob nie mają wpływu na migawkę. Nie można uzyskać dzierżawy migawki. Przeczytaj więcej na temat migawek obiektów blob. Aby uzyskać więcej informacji, zobacz dokumentację az storage blob snapshot .

Poniższy przykładowy kod pobiera obiekt blob z kontenera magazynu i tworzy jego migawkę.

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

Ustawianie warstwy obiektu blob

Podczas zmiany warstwy obiektu blob przenosisz obiekt blob i wszystkie jego dane do warstwy docelowej. Warstwę między gorącą, chłodną i archiwum można zmienić za az storage blob set-tier pomocą polecenia .

W zależności od wymagań można również użyć operacji kopiowania obiektu blob, aby skopiować obiekt blob z jednej warstwy do innej. Operacja kopiowania obiektu blob tworzy nowy obiekt blob w żądanej warstwie, pozostawiając źródłowy obiekt blob pozostaje w oryginalnej warstwie.

Zmiana warstw z chłodnej lub gorącej na archiwum odbywa się niemal natychmiast. Po przeniesieniu obiektu blob do warstwy Archiwum jest uważany za offline i nie można go odczytać ani zmodyfikować. Zanim będzie można odczytać lub zmodyfikować zarchiwizowane dane obiektu blob, należy przywrócić je do warstwy online. Przeczytaj więcej na temat ponownego wypełniania obiektów blob z warstwy Archiwum.

Aby uzyskać więcej informacji, zobacz dokumentację az storage blob set-tier .

Poniższy przykładowy kod ustawia warstwę gorącą dla pojedynczego, nazwanego obiektu blob w kontenerzearchive.

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

Operacje przy użyciu tagów obiektów blob

Tagi indeksu obiektów blob ułatwiają zarządzanie danymi i odnajdywanie. Tagi indeksu obiektów blob to atrybuty indeksu klucz-wartość zdefiniowane przez użytkownika, które można zastosować do obiektów blob. Po skonfigurowaniu można kategoryzować i znajdować obiekty w pojedynczym kontenerze lub we wszystkich kontenerach. Zasoby obiektów blob można dynamicznie kategoryzować, aktualizując tagi indeksów bez konieczności zmiany organizacji kontenerów. Takie podejście oferuje elastyczny sposób radzenia sobie ze zmieniającymi się wymaganiami dotyczącymi danych. Jednocześnie można używać tagów metadanych i indeksów. Aby uzyskać więcej informacji na temat tagów indeksu, zobacz Zarządzanie danymi obiektów blob platformy Azure i znajdowanie ich za pomocą tagów indeksu obiektów blob.

Napiwek

Poniższy przykład kodu używa dopasowania wzorca do uzyskiwania tekstu z pliku XML o znanej strukturze. Przykład służy do zilustrowania uproszczonego podejścia do dodawania tagów obiektów blob przy użyciu podstawowych funkcji powłoki Bash. Korzystanie z rzeczywistego narzędzia do analizowania danych jest zawsze zalecane w przypadku korzystania z danych w przypadku obciążeń produkcyjnych.

Poniższy przykład ilustruje sposób dodawania tagów indeksu obiektów blob do serii obiektów blob. Przykład odczytuje dane z pliku XML i używa go do tworzenia tagów indeksu w kilku obiektach blob. Aby użyć przykładowego kodu, utwórz lokalny plik blob-list.xml w katalogu C:\temp . Poniżej podano dane XML.

Aby uzyskać więcej informacji, zobacz dokumentację az storage blob set-tier .

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

Przykładowy kod iteruje wiersze w pliku XML. Lokalizuje element Venue i tworzy zmienne dla wartości Nazwa i Typ . Następnie wykonuje iterację po pozostałych wierszach i tworzy tagi dla każdego obiektu blob, do których File odwołuje się węzeł.

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

Usuwać obiekty blob

Za pomocą az storage blob delete poleceń i az storage blob delete-batch można usunąć pojedynczy obiekt blob lub serię obiektów blob. Podczas usuwania wielu obiektów blob można użyć operacji warunkowych, pętli lub innego automatyzacji, jak pokazano w poniższych przykładach.

Ostrzeżenie

Uruchomienie poniższych przykładów może trwale usunąć obiekty blob. Firma Microsoft zaleca włączenie usuwania nietrwałego kontenera w celu ochrony kontenerów i obiektów blob przed przypadkowym usunięciem. Aby uzyskać więcej informacji, zobacz Usuwanie nietrwałe dla kontenerów.

Poniższy przykładowy kod zawiera przykład operacji usuwania pojedynczego i wsadowego. Pierwszy przykład usuwa pojedynczy, nazwany obiekt blob. Drugi przykład ilustruje użycie operacji logicznych w powłoce Bash do usuwania wielu obiektów blob. Trzeci przykład używa delete-batch polecenia , aby usunąć wszystkie obiekty blob z formatem bennett-x, z wyjątkiem bennett-2.

Aby uzyskać więcej informacji, zobacz dokumentację az storage blob delete i az storage blob delete-batch .

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

W niektórych przypadkach można pobrać obiekty blob, które zostały usunięte. Jeśli opcja ochrony danych usuwania nietrwałego konta magazynu jest włączona, przekazanie parametru --include d zwraca obiekty blob, które zostały usunięte w okresie przechowywania konta. Aby dowiedzieć się więcej na temat usuwania nietrwałego, zapoznaj się z artykułem Usuwanie nietrwałe dla obiektów blob.

Skorzystaj z poniższych przykładów, aby pobrać listę obiektów blob usuniętych w skojarzonym okresie przechowywania kontenera. W pierwszym przykładzie jest wyświetlana lista wszystkich ostatnio usuniętych obiektów blob oraz daty, w których zostały usunięte. W drugim przykładzie wymieniono wszystkie usunięte obiekty blob pasujące do określonego prefiksu.

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

Przywracanie usuniętego obiektu blob

Jak wspomniano w sekcji Lista obiektów blob , możesz skonfigurować opcję ochrony danych usuwania nietrwałego na koncie magazynu. Po włączeniu można przywrócić kontenery usunięte w skojarzonym okresie przechowywania. Możesz również użyć przechowywania wersji do obsługi poprzednich wersji obiektów blob dla każdego odzyskiwania i przywracania.

Jeśli obsługa wersji obiektów blob i usuwanie nietrwałe obiektów blob są włączone, modyfikowanie, zastępowanie, usuwanie lub przywracanie obiektu blob automatycznie tworzy nową wersję. Metoda używana do przywrócenia usuniętego obiektu blob zależy od tego, czy obsługa wersji jest włączona na koncie magazynu.

Poniższy przykładowy kod przywraca wszystkie nietrwałe obiekty blob lub, jeśli włączono przechowywanie wersji, przywraca najnowszą wersję obiektu blob. Najpierw określa, czy obsługa wersji jest włączona za az storage account blob-service-properties show pomocą polecenia .

Jeśli obsługa wersji jest włączona, az storage blob list polecenie pobiera listę wszystkich unikatowo nazwanych wersji obiektów blob. Następnie wersje obiektów blob na liście są pobierane i uporządkowane według daty. Jeśli nie znaleziono wersji z wartością atrybutu isCurrentVersion , az storage blob copy start polecenie służy do tworzenia aktywnej kopii najnowszej wersji obiektu blob.

Jeśli przechowywanie wersji jest wyłączone, az storage blob undelete polecenie służy do przywracania każdego obiektu blob usuniętego nietrwale w kontenerze.

Zanim będzie można skorzystać z tego przykładu, należy włączyć usuwanie nietrwałe na co najmniej jednym z kont magazynu. Aby dowiedzieć się więcej na temat opcji ochrony danych usuwania nietrwałego, zapoznaj się z artykułem Usuwanie nietrwałe dla obiektów blob lub odwołaniem az storage blob undelete .

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

Następne kroki