Menghapus dan memulihkan kontainer blob dengan Python

Artikel ini memperlihatkan cara menghapus kontainer dengan pustaka klien Azure Storage untuk Python. Jika Anda telah mengaktifkan penghapusan sementara kontainer, Anda dapat memulihkan kontainer yang dihapus.

Untuk mempelajari tentang menghapus kontainer blob menggunakan API asinkron, lihat Menghapus kontainer secara asinkron.

Prasyarat

  • Artikel ini mengasumsikan Anda sudah menyiapkan proyek untuk bekerja dengan pustaka klien Azure Blob Storage untuk Python. Untuk mempelajari tentang menyiapkan proyek Anda, termasuk penginstalan paket, menambahkan import pernyataan, dan membuat objek klien resmi, lihat Mulai menggunakan Azure Blob Storage dan Python.
  • Mekanisme otorisasi harus memiliki izin untuk menghapus kontainer blob, atau untuk memulihkan kontainer yang dihapus sementara. Untuk mempelajari lebih lanjut, lihat panduan otorisasi untuk operasi REST API berikut:

Menghapus kontainer

Untuk menghapus kontainer di Python, gunakan metode berikut dari kelas BlobServiceClient :

Anda juga dapat menghapus kontainer menggunakan metode berikut dari kelas ContainerClient :

Setelah menghapus kontainer, Anda tidak dapat membuat wadah dengan nama yang sama setidaknya selama 30 detik. Mencoba membuat kontainer dengan nama yang sama akan gagal dengan kode 409 (Conflict)kesalahan HTTP . Operasi lain pada kontainer atau blob yang dikandungnya akan gagal dengan kode 404 (Not Found)kesalahan HTTP .

Contoh berikut menggunakan BlobServiceClient objek untuk menghapus kontainer yang ditentukan:

def delete_container(self, blob_service_client: BlobServiceClient, container_name):
    container_client = blob_service_client.get_container_client(container=container_name)
    container_client.delete_container()

Contoh berikut menunjukkan cara menghapus semua kontainer yang dimulai dengan awalan tertentu:

def delete_container_prefix(self, blob_service_client: BlobServiceClient):
    container_list = list(blob_service_client.list_containers(name_starts_with="test-"))
    assert len(container_list) >= 1

    for container in container_list:
        # Find containers with the specified prefix and delete
        container_client = blob_service_client.get_container_client(container=container.name)
        container_client.delete_container()

Memulihkan kontainer yang dihapus

Saat penghapusan sementara kontainer diaktifkan untuk akun penyimpanan, kontainer yang dihapus dan kontennya dapat dipulihkan dalam periode retensi tertentu. Untuk mempelajari selengkapnya tentang penghapusan sementara kontainer, lihat Mengaktifkan dan mengelola penghapusan sementara untuk kontainer. Anda dapat memulihkan kontainer yang dihapus sementara dengan memanggil metode BlobServiceClient kelas berikut:

Contoh berikut menemukan kontainer yang dihapus, mendapatkan versi kontainer yang dihapus, lalu meneruskan versi ke dalam undelete_container metode untuk memulihkan kontainer.

def restore_deleted_container(self, blob_service_client: BlobServiceClient, container_name):
    container_list = list(
        blob_service_client.list_containers(include_deleted=True))
    assert len(container_list) >= 1

    for container in container_list:
        # Find the deleted container and restore it
        if container.deleted and container.name == container_name:
            restored_container_client = blob_service_client.undelete_container(
                deleted_container_name=container.name, deleted_container_version=container.version)

Menghapus kontainer secara asinkron

Pustaka klien Azure Blob Storage untuk Python mendukung penghapusan kontainer blob secara asinkron. Untuk mempelajari selengkapnya tentang persyaratan penyiapan proyek, lihat Pemrograman asinkron.

Ikuti langkah-langkah ini untuk menghapus kontainer 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 perulangan asyncio peristiwa. Koroutin dinyatakan dengan sintaks asinkron/tunggu. Dalam contoh ini, main() coroutine pertama-tama membuat tingkat BlobServiceClient atas menggunakan async with, lalu memanggil metode yang menghapus kontainer. 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 = ContainerSamples()
    
        # 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_container(blob_service_client, "sample-container")
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Tambahkan kode untuk menghapus kontainer. Kode sama dengan contoh sinkron, kecuali bahwa metode dideklarasikan dengan async kata kunci dan await kata kunci digunakan saat memanggil delete_container metode .

    async def delete_container(self, blob_service_client: BlobServiceClient, container_name):
        container_client = blob_service_client.get_container_client(container=container_name)
        await container_client.delete_container()
    

Dengan pengaturan dasar ini, Anda dapat menerapkan contoh lain dalam artikel ini sebagai koroutin menggunakan sintaks asinkron/tunggu.

Sumber daya

Untuk mempelajari selengkapnya tentang menghapus kontainer menggunakan pustaka klien Azure Blob Storage untuk Python, lihat sumber daya berikut ini.

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 atau memulihkan kontainer menggunakan operasi REST API berikut:

Sampel kode

Sumber daya pustaka klien

Baca juga