Bagikan melalui


Mengelola blob blok dengan Azure CLI

Penyimpanan blob mendukung blob blok, blob penambahan, dan blob halaman. Block blob dioptimalkan untuk mengunggah data dalam jumlah besar secara efisien. Blob blok sangat cocok untuk menyimpan gambar, dokumen, dan jenis data lain yang tidak dikenai operasi baca dan tulis secara acak. Artikel ini menjelaskan cara bekerja dengan block blob.

Prasyarat

Untuk mengakses Azure Storage, Anda perlu berlangganan Azure. Jika Anda belum berlangganan, buat akun gratis sebelum memulai.

Semua akses ke Azure Storage dilakukan melalui akun penyimpanan. Untuk mulai cepat ini, Anda dapat membuat akun penyimpanan menggunakan portal Azure, Azure PowerShell, atau Azure CLI. Untuk bantuan membuat akun penyimpanan, lihat Membuat akun penyimpanan.

Persiapkan lingkungan Anda untuk Azure CLI

  • Artikel ini memerlukan Azure CLI versi 2.0.46 atau versi terbaru. Jika menggunakan Azure Cloud Shell, versi terbaru sudah terinstal.

Izinkan akses ke penyimpanan Blob

Anda dapat mengotorisasi akses ke penyimpanan Blob dari Azure CLI baik dengan kredensial Microsoft Entra atau dengan menggunakan kunci akses akun penyimpanan. Menggunakan kredensial Microsoft Entra disarankan, dan contoh artikel ini menggunakan ID Microsoft Entra secara eksklusif.

Perintah Azure CLI untuk operasi data terhadap penyimpanan Blob mendukung --auth-mode parameter, yang memungkinkan Anda menentukan cara memberi izin operasi tertentu. Atur --auth-mode parameter untuk masuk untuk mengotorisasi dengan kredensial Microsoft Entra. Hanya operasi data penyimpanan Blob yang mendukung --auth-mode parameter. Operasi manajemen, seperti membuat grup sumber daya atau akun penyimpanan, secara otomatis menggunakan kredensial Microsoft Entra untuk otorisasi. Untuk informasi selengkapnya, lihat Memilih cara mengizinkan akses ke data blob dengan Azure CLI.

Jalankan perintah login untuk membuka browser dan menyambungkan ke langganan Azure Anda.


az login

Membuat kontainer

Semua data blob disimpan dalam kontainer, jadi Anda akan membutuhkan setidaknya satu kontainer sumber daya sebelum dapat mengunggah data. Jika diperlukan, gunakan contoh berikut ini untuk membuat kontainer penyimpanan. Untuk informasi selengkapnya, lihat Mengelola kontainer blob menggunakan 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

Ketika menggunakan contoh yang terdapat dalam artikel ini, Anda perlu mengganti nilai tempat penampung dalam tanda kurung siku dengan nilai Anda sendiri. Untuk informasi selengkapnya tentang proses masuk ke Azure dengan Azure CLI, lihat Masuk dengan Azure CLI.

Unggah beberapa blob

Azure CLI menawarkan perintah yang menjalankan operasi pada satu sumber daya atau beberapa sumber daya, bergantung pada persyaratan Anda.

Untuk mengunggah file ke blob blok, berikan nilai parameter yang diperlukan ke perintah az storage blob upload. Sediakan nama file dan jalur sumber dengan parameter --file, dan nama tujuan kontainer dengan parameter --container-name. Anda juga harus menyediakan parameter --account-name. Perintah ini membuat blob baru atau menggantikan blob yang awal jika sudah ada.

Anda dapat menggunakan perintah az storage blob upload-batch untuk mengunggah beberapa blob secara rekursif ke kontainer penyimpanan. Anda dapat menggunakan pencocokan pola nama file Unix dan menentukan rentang file untuk diunggah dengan parameter --pattern. Pola yang didukung adalah *, ?, [seq], dan [!seq]. Untuk mempelajari selengkapnya, lihat dokumentasi Python terkait pencocokan pola nama file Unix.

Dalam contoh berikut, operasi pertama menggunakan perintah az storage blob upload untuk mengunggah satu file yang memiliki nama. Kontainer penyimpanan tujuan dan file sumber ditentukan dengan parameter --file dan parameter --container-name.

Operasi kedua menunjukkan penggunaan perintah az storage blob upload-batch untuk mengunggah beberapa file. Parameter --if-modified-since memastikan bahwa hanya file yang dimodifikasi dalam tujuh hari terakhir yang akan diunggah. Nilai yang disediakan oleh parameter ini harus disertakan dalam format 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

Daftar blob

Secara default, perintah az storage blob list mencantumkan semua blob yang disimpan dalam kontainer. Anda dapat menggunakan berbagai pendekatan untuk menyempurnakan cakupan pencarian Anda. Tidak ada batasan jumlah kontainer atau blob yang dapat dimiliki akun penyimpanan. Untuk berpotensi menghindari pengambilan ribuan blob, sebaiknya batasi jumlah data yang dikembalikan.

Gunakan parameter --prefix untuk memilih satu file yang diketahui atau rentang file yang namanya dimulai dengan string yang ditentukan. Anda dapat menentukan direktori virtual sebagai bagian --prefix dari parameter .

Secara default, hanya blob yang ditampilkan dalam operasi listing. Dalam beberapa skenario, Anda mungkin ingin meneruskan nilai untuk parameter --include agar dapat mengembalikan jenis objek tambahan seperti blob yang dihapus lembut, cuplikan, dan versi. Nilai-nilai ini dapat digabungkan untuk mengembalikan beberapa jenis objek.

Parameter --num-results dapat digunakan untuk membatasi jumlah blob yang dikembalikan dari kontainer. Batas layanan sebesar 5.000 diberlakukan pada semua sumber daya Azure. Batas ini memastikan bahwa jumlah data yang dapat dikelola diambil dan tidak mempengaruhi performa. Jika jumlah blob yang dikembalikan melebihi nilai --num-results atau batas layanan, token kelanjutan akan dikembalikan. Token ini memungkinkan Anda menggunakan sejumlah permintaan untuk mengambil sejumlah besar blob. Informasi selengkapnya tersedia di Menghitung sumber daya blob.

Contoh berikut ini memperlihatkan beberapa pendekatan yang digunakan untuk menyediakan daftar blob. Pendekatan pertama mencantumkan semua blob dalam kontainer tertentu. Pendekatan kedua menggunakan --prefix parameter untuk mencantumkan semua blob dalam kontainer yang dimulai dengan awalan yang ditentukan. Pendekatan ketiga menggunakan --num-results parameter untuk membatasi hasil yang dikembalikan dan --show-next-marker parameter untuk menyertakan token kelanjutan dalam hasil. Ketika token kelanjutan ada dalam hasil, token tersebut diteruskan ke panggilan ke az storage blob list berikutnya untuk mengambil serangkaian hasil berikutnya.

Untuk informasi selengkapnya, lihat referensi 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

Mengunduh blob

Bergantung pada kasus penggunaan, Anda akan menggunakan perintah az storage blob download atau az storage blob download-batch untuk mengunduh blob. Untuk mengunduh blob tertentu, panggil langsung perintah az storage blob download dan teruskan nilai untuk parameter --container-name, --file, dan --name. Blob diunduh ke direktori shell secara default, tetapi lokasi alternatif dapat ditentukan. Operasi tersebut akan gagal disertai dengan kesalahan jika jalur Anda tentukan tidak ada.

Untuk mengunduh beberapa blob secara rekursif dari kontainer penyimpanan, gunakan perintah az storage blob download-batch. Perintah ini mendukung pencocokan pola nama file Unix dengan parameter --pattern. Pola yang didukung adalah *, ?, [seq], dan [!seq]. Untuk mempelajari selengkapnya, lihat dokumentasi Python terkait pencocokan pola nama file Unix.

Contoh kode berikut ini memberikan contoh pendekatan pengunduhan tunggal dan pengunduhan beberapa kali. Alat ini juga menawarkan pendekatan yang lebih sederhana untuk mencari semua kontainer terhadap file tertentu menggunakan karakter pengganti. Karena beberapa lingkungan dapat memiliki ribuan sumber daya, menggunakan --num-results parameter disarankan.

Untuk informasi selengkapnya, kunjungi az storage blob download dan az storage blob download batch referensi.

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

Mengelola properti blob dan metadata

Sebuah objek penyimpanan menunjukkan kedua properti sistem dan metadata yang ditentukan oleh pengguna. Properti sistem ada pada setiap sumber daya Blob Storage. Beberapa properti bersifat baca-saja, sementara yang lain bisa dibaca atau diubah. Di balik layar, beberapa properti sistem memetakan ke header HTTP standar tertentu.

Metadata yang ditentukan pengguna terdiri dari satu atau beberapa pasangan nama-nilai yang Anda tentukan untuk sumber daya Blob Storage. Anda dapat menggunakan metadata untuk menyimpan nilai tambahan dengan sumber daya. Nilai metadata ditujukan untuk Anda sendiri, dan tidak memengaruhi perilaku sumber daya.

Membaca properti blob

Untuk membaca properti blob atau metadata, Anda harus mengambil blob dari layanan terlebih dahulu. Gunakan perintah az storage blob show untuk mengambil properti dan metadata blob, tetapi tidak kontennya. Contoh berikut mengambil blob dan menampilkan propertinya.

Untuk informasi selengkapnya, lihat referensi 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

Baca dan tulis metadata blob

Metadata blob adalah kumpulan pasangan nama/nilai opsional yang terkait dengan blob. Seperti yang diperlihatkan dalam contoh sebelumnya, pada awalnya tidak ada metadata yang terkait dengan blob, meskipun dapat ditambahkan ketika diperlukan. Untuk membaca, gunakan perintah az storage blob metadata show. Untuk memperbarui metadata blob, Anda akan menggunakan az storage blob metadata update dan menyediakan array pasangan kunci dan nilai. Untuk informasi selengkapnya, lihat referensi az storage blob metadata.

Untuk informasi selengkapnya, lihat referensi az storage blob metadata.

Contoh di bawah ini pertama-tama memperbarui metadata blob, lalu mengonfirmasinya, dan kemudian mengambilnya kembali.

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

Operasi penyalinan untuk blok data biner besar

Ada banyak skenario di mana blob dari berbagai jenis dapat disalin. Contoh dalam artikel ini terbatas pada blok blob. Azure CLI menawarkan perintah yang menjalankan operasi pada satu sumber daya atau beberapa sumber daya, bergantung pada persyaratan Anda.

Untuk menyalin blob tertentu, gunakan perintah az storage blob copy start dan tentukan nilai untuk kontainer serta blob sumber dan tujuan. Anda juga dapat mencantumkan pengidentifikasi sumber daya seragam (URI), akses bersama, atau tanda tangan akses bersama (SAS) sebagai sumbernya.

Anda juga dapat menentukan kondisi di mana blob akan disalin. Syarat ini dapat diatur untuk blob sumber atau tujuan. Anda dapat mereferensikan tanggal terakhir diubah, data tag, atau nilai ETag. Misalnya, Anda dapat memilih untuk menyalin blob yang belum dimodifikasi baru-baru ini ke wadah terpisah. Untuk informasi selengkapnya, lihat Menentukan header kondisional untuk operasi Blob service.

Anda dapat menggunakan perintah az storage blob copy start-batch untuk menyalin beberapa blob secara rekursif antarkontainer penyimpanan dalam akun penyimpanan yang sama. Perintah ini memerlukan nilai untuk parameter --source-container dan --destination-container, dan dapat menyalin semua file antara sumber dan tujuan. Seperti perintah batch CLI lainnya, perintah ini mendukung pencocokan pola nama file Unix dengan parameter --pattern. Pola yang didukung adalah *, ?, [seq], dan [!seq]. Untuk mempelajari selengkapnya, lihat dokumentasi Python terkait pencocokan pola nama file Unix.

Catatan

Pertimbangkan penggunaan AzCopy untuk kemudahan dan performa, terutama saat menyalin blob antar akun penyimpanan. AzCopy adalah utilitas baris perintah yang dapat Anda gunakan untuk menyalin gumpalan atau file ke atau dari akun penyimpanan. Cari tahu selengkapnya tentang cara Mulai menggunakan AzCopy.

Untuk informasi selengkapnya, lihat referensi az storage blob copy.

Sampel kode berikut memberikan contoh dari operasi penyalinan tunggal dan operasi penyalinan ganda. Karena beberapa lingkungan dapat memiliki ribuan sumber daya, menggunakan --num-results parameter disarankan. Contoh pertama menyalin blob secret-town-road.png dari kontainer foto ke kontainer lokasi. Kedua kontainer berada dalam akun penyimpanan yang sama. Hasil tersebut memverifikasi keberhasilan operasi penyalinan.

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

Membuat cuplikan blob

Setiap sewa yang terkait dengan blob dasar tidak akan memengaruhi snapshot. Anda tidak dapat menyewa gambar sementara. Baca selengkapnya tentang Snapshot Blob. Untuk informasi selengkapnya, lihat referensi az storage blob snapshot.

Sampel kode berikut mengambil blob dari kontainer penyimpanan dan membuat salinan bayangannya.

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

Atur tingkat lapisan blob

Saat mengubah tingkat blob, Anda memindahkan blob tersebut dan semua datanya ke tingkat target. Anda dapat mengubah tingkat antara panas, dingin, dan arsip dengan az storage blob set-tier perintah .

Bergantung pada kebutuhan, Anda juga dapat menggunakan operasi Salin Blob untuk menyalin blob dari satu tingkat ke tingkat lainnya. Operasi Salin Blob membuat blob baru di tingkat yang diinginkan sambil meninggalkan blob sumber tetap berada di tingkat asli.

Mengubah tingkatan dari dingin atau panas ke arsip dilakukan hampir seketika. Setelah blob dipindahkan ke tingkat arsip , blob dianggap offline dan tidak dapat dibaca atau dimodifikasi. Sebelum Anda dapat membaca atau mengubah data blob yang diarsipkan, Anda harus merehidrasi data tersebut ke tingkatan online. Baca lebih lanjut tentang rehidrasi Blob dari lapisan arsip.

Untuk informasi selengkapnya, lihat referensi az storage blob set-tier.

Kode sampel berikut mengatur tingkat ke panas untuk satu blob bernama dalam archive kontainer.

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

Operasi menggunakan tag blob

Tag indeks blob memudahkan penemuan dan pengelolaan data. Tag indeks blob adalah atribut indeks nilai kunci yang dapat ditentukan oleh pengguna dan dapat Anda terapkan ke blob. Setelah dikonfigurasi, Anda dapat mengkategorikan dan menemukan objek dalam kontainer individual atau seluruh kontainer. Sumber daya blob dapat dikategorikan secara dinamis dengan memperbarui tag indeksnya tanpa memerlukan perubahan dalam organisasi kontainer. Pendekatan ini menawarkan cara fleksibel untuk mengatasi perubahan persyaratan data. Anda bisa menggunakan metadata dan tag indeks secara bersamaan. Untuk informasi selengkapnya tentang tag index, lihat Mengelola dan menemukan data Azure Blob dengan tag indeks blob.

Tips

Sampel kode yang diberikan di bawah menggunakan pencocokan pola untuk mendapatkan teks dari file XML yang memiliki struktur yang diketahui. Contoh ini digunakan untuk mengilustrasikan pendekatan yang disederhanakan untuk menambahkan tag blob menggunakan fungsi Bash dasar. Penggunaan alat penguraian data aktual selalu direkomendasikan saat menggunakan data untuk beban kerja produksi.

Contoh berikut ini menggambarkan cara menambahkan tag indeks blob ke serangkaian blob. Contoh tersebut membaca data dari file XML dan menggunakannya untuk membuat tag indeks di beberapa blob. Untuk menggunakan kode sampel, buat file lokal blob-list.xml di direktori C:\temp. Data XML disediakan di bawah ini.

Untuk informasi selengkapnya, lihat referensi 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>

Kode sampel melakukan iterasi baris dalam file XML. Kode tersebut menempatkan elemen Tempat dan membuat variabel untuk nilai Nama dan Jenis. Lalu, kode melakukan iterasi melalui baris yang tersisa dan membuat tag untuk setiap blob yang direferensikan oleh node 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

Hapus objek penyimpanan (blob)

Anda dapat menghapus satu blob atau serangkaian blob dengan perintah az storage blob delete dan az storage blob delete-batch. Saat menghapus beberapa blob, Anda dapat menggunakan operasi bersyarat, pengulangan, atau otomatisasi lainnya seperti yang ditunjukkan dalam contoh di bawah.

Peringatan

Menjalankan contoh berikut dapat menghapus blob secara permanen. Microsoft merekomendasikan Anda mengaktifkan penghapusan sementara kontainer untuk melindungi kontainer dan blob dari penghapusan yang tidak disengaja. Untuk informasi selengkapnya, lihat Penghapusan lembut untuk kontainer.

Kode sampel berikut memberikan contoh operasi penghapusan individual dan batch. Contoh pertama menghapus satu blob yang diberi nama. Contoh kedua mengilustrasikan penggunaan operasi logis di Bash untuk menghapus beberapa blob. Contoh ketiga menggunakan perintah delete-batch untuk menghapus semua blob dengan format bennet-x , kecuali bennett-2.

Untuk informasi selengkapnya, lihat referensi az storage blob delete dan 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

Dalam beberapa kasus, blob yang sudah dihapus dapat diambil kembali. Jika opsi perlindungan data penghapusan lembut dari akun penyimpanan Anda diaktifkan, penerusan parameter --include d akan mengembalikan blob yang telah dihapus dalam periode retensi akun. Untuk mempelajari selengkapnya tentang penghapusan lembut, lihat artikel Penghapusan lembut untuk blob.

Gunakan contoh berikut untuk mengambil daftar blob yang dihapus di dalam periode penyimpanan yang terkait dengan kontainer. Contoh pertama menampilkan daftar semua blob yang baru saja dihapus dan tanggal waktu penghapusan. Contoh kedua mencantumkan semua blob yang dihapus, yang cocok dengan awalan tertentu.

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

Memulihkan blob yang dihapus

Seperti yang telah disebutkan di Daftar blob, Anda dapat mengonfigurasi opsi proteksi data penghapusan sementara pada akun penyimpanan Anda. Jika diaktifkan, kontainer yang telah dihapus dalam periode retensi terkait dapat dipulihkan. Anda juga dapat menggunakan penerapan versi untuk mempertahankan versi blob sebelumnya untuk setiap pemulihan dan restorasi.

Jika penerapan versi blob dan penghapusan sementara blob diaktifkan, maka memodifikasi, menimpa, menghapus, atau memulihkan blob akan secara otomatis membuat versi yang baru. Metode yang akan Anda gunakan untuk memulihkan blob yang dihapus bergantung pada apakah pengelolaan versi diaktifkan di akun penyimpanan Anda.

Sampel kode berikut memulihkan semua blob yang dihapus sementara atau memulihkan versi terbaru dari suatu blob jika fitur versi diaktifkan. Ini pertama-tama menentukan apakah pengelolaan versi diaktifkan dengan perintah az storage account blob-service-properties show.

Jika penerapan versi diaktifkan, perintah az storage blob list mengambil daftar dari semua versi blob yang bernama unik. Selanjutnya, versi blob dari daftar diambil dan diurutkan berdasarkan tanggal. Jika tidak ada versi yang ditemukan dengan nilai atribut isCurrentVersion, perintah az storage blob copy start akan digunakan untuk membuat salinan aktif dari versi terbaru blob.

Jika penerapan versi dinonaktifkan, perintah az storage blob undelete akan digunakan untuk memulihkan setiap blob yang dihapus sementara dalam kontainer.

Agar dapat mengikuti contoh ini, Anda harus mengaktifkan penghapusan lunak di minimal salah satu akun penyimpanan Anda. Untuk mempelajari selengkapnya tentang opsi perlindungan data penghapusan lunak, silakan lihat artikel Penghapusan Lunak untuk Blob atau referensi 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

Langkah berikutnya