Bagikan melalui


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

Atur 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

Otorisasi

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 Penyimpanan Blob atau yang lebih tinggi. Untuk mempelajari lebih lanjut, rujuk panduan otorisasi untuk Menghapus Blob (REST API) dan Membatalkan 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 yang dihapus sementara, versi blob, atau rekam jepret tetap tersedia sampai periode retensi berakhir, pada saat itu, akan 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 cuplikan dan bukan blob itu sendiri, Anda dapat meneruskan parameter delete_snapshots="only".

Memulihkan blob yang dihapus

Penghapusan sementara (soft delete) blob melindungi blob individu beserta versinya, rekaman jepret, dan 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 sementara.

Cara Anda memulihkan blob yang dihapus lunak tergantung pada apakah akun penyimpanan Anda mengaktifkan 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 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:

  1. Tambahkan pernyataan import berikut:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. Tambahkan kode untuk menjalankan program menggunakan asyncio.run. Fungsi ini menjalankan coroutine yang diteruskan, main() dalam contoh kami, dan mengelola loop asyncio peristiwa. Koroutin dinyatakan dengan sintaks asinkron/tunggu. Dalam contoh ini, coroutine pertama-tama main() membuat lapisan BlobServiceClient atas menggunakan async with, kemudian memanggil metode untuk menghapus blob. Perhatikan bahwa hanya klien tingkat atas yang perlu menggunakan async 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())
    
  3. Tambahkan kode untuk menghapus blob. Kode sama dengan contoh sinkron, kecuali bahwa metode dideklarasikan dengan async kata kunci dan await kata kunci digunakan saat memanggil delete_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 koroutine menggunakan sintaks async/await.

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

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:

Sumber daya pustaka klien

Lihat juga

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