Mengelola blob blok dengan Azure CLI

Penyimpanan blob mendukung blob blok, blob penambahan, dan blob halaman. Blob blok dioptimalkan untuk mengunggah data dalam jumlah besar secara efisien. Blok blob sangat cocok untuk menyimpan gambar, dokumen, dan jenis data lain yang tidak ditentukan pada operasi baca dan tulis yang acak. Artikel ini menjelaskan cara bekerja menggunakan blokir 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

Jika menggunakan contoh berikut, 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 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 menimpa blob asli 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 -d "7 days ago" '+%Y-%m-%dT%H:%MZ'`

path="C:\\temp\\"
filename="demo-file.txt"
imageFiles="*.png"
file="$path$filename"

#Upload a single named file
az storage blob upload \
    --file $file \
    --container-name $containerName \
    --account-name $storageAccount \
    --auth-mode login

#Upload multiple image files recursively
az storage blob upload-batch \
    --destination $containerName \
    --source $path \
    --pattern *.png \
    --account-name $storageAccount \
    --auth-mode login \
    --if-modified-since $lastModified

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.

Secara default, hanya blob yang ditampilkan dalam operasi listing. Dalam beberapa skenario, sebaiknya Anda meneruskan nilai untuk parameter --include guna menampilkan jenis objek tambahan seperti blob, snapshot, dan versi yang dihapus sementara. Nilai-nilai ini dapat digabungkan untuk menampilkan lebih dari beberapa jenis objek.

Parameter --num-results ini bisa digunakan untuk membatasi jumlah blob yang tidak difilter 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 beberapa permintaan untuk mengambil nomor blob apa pun. Informasi selengkapnya tersedia di Menghitung sumber daya blob.

Contoh berikut ini memperlihatkan beberapa pendekatan yang digunakan untuk menyediakan daftar blob. Pendekatan pertama mendaftarkan blob tunggal dalam sumber daya kontainer tertentu. Pendekatan kedua menggunakan parameter --prefix untuk mencantumkan semua blob di semua kontainer dengan awalan louis. Pencarian terbatas pada lima kontainer menggunakan parameter --num-results. Pendekatan ketiga menggunakan parameter --num-results dan --marker untuk membatasi pengambilan semua blob dalam kontainer.

Untuk informasi selengkapnya, lihat referensi az storage blob list.


#!/bin/bash
storageAccount="<storage-account>"
blobName="demo-file.txt"
containerName="demo-container"
blobPrefix="img-louis"
numResults=5

#Approach 1: List all blobs in a named container
az storage blob list \
    --container $containerName \
    --account-name $storageAccount \
    --prefix $blobName
    --auth-mode login

#Approach 2: Use the --prefix parameter to list blobs in all containers

containerList=$( \
    az storage container list \
        --query "[].name" \
        --num-results $numResults \
        --account-name $storageAccount \
        --auth-mode login \
        --output tsv 
)
for row in $containerList
do
    tmpName=$(echo $row | sed -e 's/\r//g')
    echo $tmpName
    az storage blob list \
        --prefix $blobPrefix \
        --container $tmpName \
        --account-name $storageAccount \
        --auth-mode login
done

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 akan 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 untuk file tertentu menggunakan kartubebas. Karena beberapa lingkungan mungkin memiliki ratusan ribu sumber daya, sebaiknya gunakan parameter --num-results.

Untuk informasi lainnya, lihat az storage blob download dan referensiaz 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

Mengelola properti blob dan metadata

Kontainer memperlihatkan properti sistem dan metadata yang ditentukan pengguna. Properti sistem ada pada setiap sumber daya Blob Storage. Beberapa properti bersifat baca-saja, sementara yang lain bisa dibaca atau diatur. Dibalik itu, 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 metadata dan properti blob, tetapi tidak dengan kontennya. Contoh berikut mengambil blob dan mendaftarkan 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

Membaca dan menulis 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-nilai. Untuk informasi selengkapnya, lihat referensi az storage blob metadata.

Untuk informasi lainnya, lihat referensi az storage blob metadata.

Contoh di bawah pertama-tama mempembarui lalu menerapkan metadata blob, lalu mengambilnya.

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

Terdapat banyak skenario di mana blob dengan jenis yang berbeda dapat disalin. Contoh dalam artikel ini terbatas untuk blob blok. 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 syarat penyalinan blob. 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 lama ini diubah ke kontainer 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 pendekatan operasi salinan tunggal dan beberapa operasi salinan. Karena beberapa lingkungan mungkin memiliki ratusan ribu sumber daya, sebaiknya gunakan parameter --num-results. 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

Mengambil salinan bayangan blob

Setiap sewa yang terkait dengan blob dasar tidak memengaruhi snapshot. Anda tidak dapat memperoleh sewa di snapshot. Baca selengkapnya tentang Salinan bayangan 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

Set tingkat 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 akan membuat blob baru di tingkat yang diinginkan sembari membiarkan blob sumber tetap berada di tingkat asli.

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

Untuk informasi lainnya, 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 ditentukan pengguna yang 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.

Tip

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 lainnya, 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 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 sementara untuk kontainer.

Kode sampel berikut memberikan contoh operasi penghapusan individual dan batch. Contoh pertama menghapus satu blob bernama. 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, pengambilan blob yang sudah dihapus dapat dilakukan. Jika opsi perlindungan data penghapusan sementara di akun penyimpanan diaktifkan, parameter dan nilai --include d akan mengembalikan blob yang dihapus dalam periode retensi akun. Untuk mempelajari selengkapnya tentang penghapusan sementara, lihat artikelPenghapusan sementara untuk blob.

Gunakan contoh berikut untuk mengambil daftar blob yang dihapus dalam periode retensi terkait 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 Mendaftarkan 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 akan bergantung pada apakah penerapan versi diaktifkan di akun penyimpanan Anda atau tidak.

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

Jika penerapan versi diaktifkan, perintah az storage blob list akan mengambil daftar semua versi blob yang memiliki nama unik. Selanjutnya, versi blob pada daftar diambil dan diurutkan menurut 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 sementara dan mengonfigurasikannya di minimal salah satu akun penyimpanan Anda. Untuk mempelajari selengkapnya tentang opsi perlindungan data dari penghapusan sementara, lihat artikel Penghapusan sementara 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