Menghapus dan memulihkan blob dengan Python
Artikel ini memperlihatkan cara menghapus blob menggunakan pustaka klien Azure Storage untuk Python, dan cara memulihkan blob yang dihapus sementara selama periode retensi.
Untuk mempelajari tentang menghapus blob menggunakan API asinkron, lihat Menghapus blob secara asinkron.
Prasyarat
- Langganan Azure - buat akun secara gratis
- Akun penyimpanan Azure - buat akun penyimpanan
- Python 3.8+
Menyiapkan lingkungan Anda
Jika Anda tidak memiliki proyek yang sudah ada, bagian ini menunjukkan kepada Anda cara menyiapkan proyek untuk bekerja dengan pustaka klien Azure Blob Storage untuk Python. Untuk detail selengkapnya, lihat Mulai menggunakan Azure Blob Storage dan Python.
Untuk bekerja dengan contoh kode dalam artikel ini, ikuti langkah-langkah ini untuk menyiapkan proyek Anda.
Memasang paket
Instal paket berikut menggunakan pip install
:
pip install azure-storage-blob azure-identity
Menambahkan pernyataan impor
Tambahkan pernyataan import
berikut:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
Authorization
Mekanisme otorisasi harus memiliki izin yang diperlukan untuk menghapus blob, atau untuk memulihkan blob yang dihapus sementara. Untuk otorisasi dengan MICROSOFT Entra ID (disarankan), Anda memerlukan peran bawaan Azure RBAC Kontributor Data Blob Penyimpanan atau yang lebih tinggi. Untuk mempelajari lebih lanjut, lihat panduan otorisasi untuk Hapus Blob (REST API) dan Batalkan Penghapusan Blob (REST API).
Membuat objek klien
Untuk menyambungkan aplikasi ke Blob Storage, buat instans BlobServiceClient. Contoh berikut menunjukkan cara membuat objek klien menggunakan DefaultAzureCredential
untuk otorisasi:
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential=credential)
Anda juga dapat membuat objek klien untuk kontainer atau blob tertentu, baik secara langsung atau dari BlobServiceClient
objek. Untuk mempelajari selengkapnya tentang membuat dan mengelola objek klien, lihat Membuat dan mengelola objek klien yang berinteraksi dengan sumber daya data.
Hapus blob
Catatan
Saat penghapusan sementara blob diaktifkan untuk akun penyimpanan, Anda tidak dapat melakukan penghapusan permanen menggunakan metode pustaka klien. Menggunakan metode dalam artikel ini, blob, versi blob, atau rekam jepret yang dihapus sementara tetap tersedia sampai periode retensi berakhir, saat itu dihapus secara permanen. Untuk mempelajari selengkapnya tentang operasi REST API yang mendasar, lihat Menghapus Blob (REST API).
Untuk menghapus blob, panggil metode berikut:
Contoh berikut menghapus blob:
def delete_blob(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
blob_client.delete_blob()
Jika blob memiliki rekam jepret terkait, Anda harus menghapus semua rekam jepretnya untuk menghapus blob. Contoh berikut menghapus blob dan rekam jepretnya:
def delete_blob_snapshots(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
blob_client.delete_blob(delete_snapshots="include")
Untuk menghapus hanya rekam jepret dan bukan blob itu sendiri, Anda dapat meneruskan parameter delete_snapshots="only"
.
Memulihkan blob yang dihapus
Penghapusan sementara blob melindungi blob individu dan versi, rekam jepret, serta metadatanya dari penghapusan atau penimpaan yang tidak disengaja dengan mempertahankan data yang dihapus dalam sistem selama jangka waktu tertentu. Selama periode retensi, Anda dapat memulihkan blob ke statusnya saat penghapusan. Setelah periode retensi kedaluwarsa, blob dihapus secara permanen. Untuk informasi selengkapnya tentang penghapusan sementara blob, lihat Penghapusan sementara untuk blob.
Anda dapat menggunakan pustaka klien Azure Storage untuk memulihkan blob atau rekam jepret yang dihapus untuk sementara.
Cara Anda memulihkan blob yang dihapus sementara tergantung pada apakah akun penyimpanan Anda mengaktifkan penerapan versi blob atau tidak. Untuk informasi selengkapnya tentang penerapan versi blob, lihat Penerapan versi blob. Lihat salah satu bagian berikut, bergantung pada skenario Anda:
Memulihkan objek yang dihapus untuk sementara saat penerapan versi dinonaktifkan
Untuk memulihkan blob yang dihapus saat penerapan versi dinonaktifkan, panggil metode berikut:
Metode ini memulihkan konten dan metadata blob yang dihapus sementara dan rekam jepret yang dihapus sementara terkait. Memanggil metode ini untuk blob yang belum dihapus tidak berpengaruh.
def restore_blob(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
blob_client.undelete_blob()
Memulihkan objek yang dihapus sementara saat penerapan versi diaktifkan
Jika akun penyimpanan dikonfigurasi untuk mengaktifkan penerapan versi blob, menghapus blob menyebabkan versi blob saat ini menjadi versi sebelumnya. Untuk memulihkan blob yang dihapus sementara saat penerapan versi diaktifkan, salin versi sebelumnya ke blob dasar. Anda dapat menggunakan metode berikut:
Contoh kode berikut mendapatkan versi terbaru dari blob yang dihapus, dan memulihkan versi terbaru dengan menyalinnya ke blob dasar:
def restore_blob_version(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
container_client = blob_service_client.get_container_client(container=container_name)
# Get a reference to the soft-deleted base blob and list all the blob versions
blob_client = container_client.get_blob_client(blob=blob_name)
blob_list = container_client.list_blobs(name_starts_with=blob_name, include=['deleted','versions'])
blob_versions = []
for blob in blob_list:
blob_versions.append(blob.version_id)
# Get the latest version of the soft-deleted blob
blob_versions.sort(reverse=True)
latest_version = blob_versions[0]
# Build the blob URI and add the version ID as a query string
versioned_blob_url = f"{blob_client.url}?versionId={latest_version}"
# Restore the latest version by copying it to the base blob
blob_client.start_copy_from_url(versioned_blob_url)
Menghapus blob secara asinkron
Pustaka klien Azure Blob Storage untuk Python mendukung penghapusan blob secara asinkron. Untuk mempelajari selengkapnya tentang persyaratan penyiapan proyek, lihat Pemrograman asinkron.
Ikuti langkah-langkah ini untuk menghapus blob menggunakan API asinkron:
Tambahkan pernyataan import berikut:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient
Tambahkan kode untuk menjalankan program menggunakan
asyncio.run
. Fungsi ini menjalankan coroutine yang diteruskan,main()
dalam contoh kami, dan mengelola perulanganasyncio
peristiwa. Koroutin dinyatakan dengan sintaks asinkron/tunggu. Dalam contoh ini, coroutine pertama-tamamain()
membuat tingkatBlobServiceClient
atas menggunakanasync with
, lalu memanggil metode yang menghapus blob. Perhatikan bahwa hanya klien tingkat atas yang perlu menggunakanasync with
, karena klien lain yang dibuat darinya berbagi kumpulan koneksi yang sama.async def main(): sample = BlobSamples() # TODO: Replace <storage-account-name> with your actual storage account name account_url = "https://<storage-account-name>.blob.core.windows.net" credential = DefaultAzureCredential() async with BlobServiceClient(account_url, credential=credential) as blob_service_client: await sample.delete_blob(blob_service_client, "sample-container", "sample-blob.txt") if __name__ == '__main__': asyncio.run(main())
Tambahkan kode untuk menghapus blob. Kode sama dengan contoh sinkron, kecuali bahwa metode dideklarasikan dengan
async
kata kunci danawait
kata kunci digunakan saat memanggildelete_blob
metode .async def delete_blob(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str): blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name) await blob_client.delete_blob()
Dengan pengaturan dasar ini, Anda dapat menerapkan contoh lain dalam artikel ini sebagai koroutin menggunakan sintaks asinkron/tunggu.
Sumber
Untuk mempelajari selengkapnya tentang cara menghapus blob dan memulihkan blob yang dihapus sementara menggunakan pustaka klien Azure Blob Storage untuk Python, lihat sumber daya berikut ini.
Sampel kode
- Lihat sampel kode sinkron atau asinkron dari artikel ini (GitHub)
Operasi REST API
Azure SDK untuk Python berisi pustaka yang dibangun di atas Azure REST API, memungkinkan Anda berinteraksi dengan operasi REST API melalui paradigma Python yang sudah dikenal. Metode pustaka klien untuk menghapus blob dan memulihkan blob yang dihapus menggunakan operasi REST API berikut:
- Menghapus Blob (REST API)
- Membatalkan Penghapusan Blob (REST API)
Sumber daya pustaka klien
Lihat juga
Konten terkait
- Artikel ini adalah bagian dari panduan pengembang Blob Storage untuk Python. Untuk mempelajari lebih lanjut, lihat daftar lengkap artikel panduan pengembang di Membangun aplikasi Python Anda.