Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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. Bloby blokowe są idealne do przechowywania obrazów, dokumentów i innych typów danych, które nie są poddawane 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 magazynowania. Na potrzeby tego szybkiego startu utwórz konto magazynu w portalu Azure, programie Azure PowerShell lub interfejsie wiersza polecenia platformy Azure. Aby uzyskać pomoc dotyczącą tworzenia konta magazynowego, zobacz Tworzenie konta magazynowego.
Przygotowanie środowiska dla Azure CLI
Użyj środowiska Bash w Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Get started with Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Uwierzytelnianie na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure.
Przy wyświetleniu monitu zainstaluj rozszerzenie Azure CLI przy pierwszym użyciu. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Używanie rozszerzeń i zarządzanie nimi za pomocą interfejsu wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
- 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ć z poziomu Azure CLI, używając poświadczeń Microsoft Entra lub klucza dostępu do konta magazynowego. Korzystanie z poświadczeń Microsoft Entra jest zalecane, a w przykładach tego artykułu używany jest wyłącznie Microsoft Entra ID.
Polecenia Azure CLI dla operacji danych w usłudze Blob Storage obsługują parametr --auth-mode, który umożliwia określenie sposobu autoryzowania danej operacji. Ustaw parametr --auth-modelogin aby autoryzować przy użyciu poświadczeń Microsoft Entra. Tylko operacje na danych usługi Blob Storage obsługują parametr --auth-mode. 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 przesłaniem danych będzie potrzebny co najmniej jeden zasób typu kontener. W razie potrzeby użyj poniższego przykładu, aby utworzyć pojemnik do przechowywania. 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.
Prześlij bloby
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 załadować plik do bloba typu blokowego, 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 blob lub zastępuje oryginalny blob, jeśli istnieje.
Możesz użyć az storage blob upload-batch polecenia, aby rekursywnie przesłać wiele obiektów blob do kontenera przechowywania. Możesz użyć dopasowania wzorca nazw plików w systemie Unix, aby określić zakres plików do przesłania 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 polecenia az storage blob upload, aby załadować pojedynczy plik o nazwie. Plik źródłowy i docelowy kontener magazynu są określane za pomocą parametrów --file i --container-name.
Druga operacja demonstruje użycie polecenia az storage blob upload-batch do przesyłania 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świetl listę blobów
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 magazynowe. Aby uniknąć potencjalnego pobierania tysięcy blobów, 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 miękko usunięte blob, 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 wartość --num-results lub limit usługi, zwracany jest token kontynuacji. Ten token umożliwia korzystanie z wielu żądań do pobierania dowolnej liczby obiektów typu blob. 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 az storage blob list w celu pobrania następnego zestawu wyników.
Aby uzyskać więcej informacji, zobacz odniesienie 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
Pobierz blob
W zależności od przypadku użycia, użyjesz polecenia az storage blob download 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 magazynowego, użyj polecenia az storage blob download-batch. 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 oraz dokumentację az storage blob download batch.
#!/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ą mapowane na 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 użytku osobistego i nie wpływają na sposób działania 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 odwołanie 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 polecenia az storage blob metadata show. 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ą az storage blob metadata.
Aby uzyskać więcej informacji, zobacz dokumentację dotyczącą az storage blob metadata.
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ć blob różnych typów. Przykłady w tym artykule są ograniczone do blokó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 blob, użyj polecenia az storage blob copy start i określ wartości dla kontenerów źródłowych, docelowych oraz blobów. Jako źródła można również podać jednolity identyfikator zasobu (URI), zasób udostępniony lub sygnaturę dostępu współdzielonego (SAS).
Możesz również określić warunki, w których blob zostanie skopiowany. Te warunki można ustawić zarówno dla źródłowego, jak i docelowego bloba. Możesz odwołać się do ostatniej zmodyfikowanej daty, danych tagu lub wartości elementu ETag. Możesz na przykład skopiować do oddzielnego kontenera obiekty blob, które nie zostały ostatnio zmodyfikowane. Aby uzyskać więcej informacji, zobacz Określanie nagłówków warunkowych dla operacji usługi Blob.
Za pomocą polecenia az storage blob copy start-batch można rekursywnie kopiować wiele blobów między kontenerami w ramach tego samego konta magazynowego. 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 ze względu na zwiększoną łatwość i wydajność, zwłaszcza podczas kopiowania obiektów blob między kontami magazynu. AzCopy to narzędzie wiersza polecenia, którego można używać do kopiowania obiektów blob lub plików do lub z konta magazynowego. Dowiedz się więcej na temat rozpoczynania pracy z narzędziem AzCopy.
Aby uzyskać więcej informacji, zobacz referencje 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ą w tym samym koncie magazynowym. 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 blobów
Wszystkie dzierżawy skojarzone z podstawowym obiektem blob nie mają wpływu na migawkę. Nie można uzyskać licencji na migawkę. Przeczytaj więcej na temat migawek blobów. Aby uzyskać więcej informacji, zobacz odnośnik az storage blob snapshot.
Poniższy przykładowy kod pobiera obiekt blob z kontenera przechowywania 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
Ustaw warstwę obiektu blob
Podczas zmiany poziomu obiektu blob, przenosisz ten obiekt i wszystkie jego dane do docelowego poziomu. Poziom można zmienić między gorącym, chłodnym i archiwum za pomocą az storage blob set-tier 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 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 rehydratacji obiektów blob z warstwy archiwum.
Aby uzyskać więcej informacji, zobacz odnośnik az storage blob set-tier.
Poniższy przykładowy kod ustawia poziom aktywny dla pojedynczego, nazwanego bloba w określonym kontenerze 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
Operacje przy użyciu tagów blobów
Tagi indeksowe blob ułatwiają zarządzanie danymi i ich wyszukiwanie. Tagi indeksu blobów to atrybuty indeksu klucz-wartość definiowane przez użytkownika, które można zastosować do blobów. 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.
Tip
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 podstawowej funkcjonalności w Bashu. Korzystanie z faktycznego narzędzia do parsowania danych jest zawsze zalecane przy przetwarzaniu danych na potrzeby obciążeń produkcyjnych.
Poniższy przykład ilustruje, jak dodawać tagi indeksu do serii obiektów blob. Przykład odczytuje dane z pliku XML i używa ich do tworzenia tagów indeksu w kilku blobach. 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 odnośnik 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 iteruje po pozostałych wierszach i tworzy tagi dla każdego obiektu blob, do którego odwołuje się węzeł File.
#!/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ą poleceń az storage blob delete i az storage blob delete-batch można usunąć albo pojedynczy obiekt blob, albo serię obiektów blob. Podczas usuwania wielu obiektów blob można użyć operacji warunkowych, pętli lub innej automatyzacji, jak pokazano w przykładach poniżej.
Ostrzeżenie
Uruchomienie poniższych przykładów może trwale usunąć bloby. Microsoft zaleca włączenie miękkiego usuwania kontenerów, aby chronić kontenery i bloby przed przypadkowym usunięciem. Aby uzyskać więcej informacji, zobacz Miękkie usuwanie dla kontenerów.
Poniższy przykładowy kod zawiera przykład operacji usuwania pojedynczego i wsadowego. Pierwszy przykład usuwa pojedynczy, nazwany obiekt typu blob. Drugi przykład ilustruje użycie operacji logicznych w środowisku Bash do usuwania wielu blobów. 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 odzyskać bloby, które zostały usunięte. Jeśli opcja ochrony danych przez miękkie usunięcie dla konta magazynu jest włączona, przekazanie parametru --include d zwraca obiekty blob, które zostały usunięte w trakcie okresu przechowywania konta. Aby dowiedzieć się więcej na temat miękkiego usuwania, zapoznaj się z artykułem Miękkie usuwanie dla blobów.
Skorzystaj z poniższych przykładów, aby pobrać listę blobów usuniętych w okresie retencji związanym z kontenerem. W pierwszym przykładzie wyświetlana jest lista wszystkich obiektów blob usuniętych w ostatnim czasie oraz dat, kiedy 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}"
Przywróć usunięty obiekt blob
Jak wspomniano w sekcji Lista obiektów blob, możesz skonfigurować opcję ochrony danych poprzez miękkie usuwanie na swoim koncie przechowywania. Po włączeniu można przywrócić kontenery usunięte w skojarzonym okresie przechowywania. Możesz również użyć wersjonowania do utrzymania poprzednich wersji obiektów blob przy każdym odzyskiwaniu i przywracaniu.
Jeśli wersjonowanie obiektów blob i miękkie usuwanie obiektów blob są włączone, modyfikowanie, zastępowanie, usuwanie lub przywracanie obiektu blob automatycznie tworzy nową wersję. Metoda, którą użyjesz do przywrócenia usuniętego obiektu blob, zależy od tego, czy wersjonowanie jest włączone na Twoim koncie magazynowania.
Poniższy przykład kodu przywraca wszystkie miękko usunięte obiekty blob lub, jeśli włączono przechowywanie wersji, przywraca najnowszą wersję tego obiektu blob. Najpierw określa, czy obsługa wersji jest włączona przy pomocy polecenia az storage account blob-service-properties show.
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 wersjonowanie jest wyłączone, polecenie az storage blob undelete służy do przywracania każdego miękko usuniętego bloba w kontenerze.
Zanim będziesz mógł skorzystać z tego przykładu, musisz włączyć miękkie usuwanie na co najmniej jednym z kont pamięci masowej. Aby dowiedzieć się więcej na temat opcji ochrony danych soft delete, zapoznaj się z artykułem Usuwanie nietrwałe dla obiektów blob lub dokumentacją 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
- Wybieranie sposobu autoryzowania dostępu do danych obiektów blob za pomocą interfejsu wiersza polecenia platformy Azure
- Uruchamianie poleceń programu PowerShell przy użyciu poświadczeń usługi Microsoft Entra w celu dostępu do danych blob
- Zarządzanie kontenerami obiektów blob przy użyciu interfejsu wiersza polecenia