Bagikan melalui


Membuat dan mengelola sewa blob dengan Python

Artikel ini memperlihatkan cara membuat dan mengelola sewa blob menggunakan pustaka klien Azure Storage untuk Python. Anda dapat menggunakan pustaka klien untuk memperoleh, memperbarui, merilis, dan memutuskan sewa blob.

Untuk mempelajari tentang menyewa blob menggunakan API asinkron, lihat Menyewa blob secara asinkron.

Prasyarat

Siapkan 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, BlobLeaseClient

Otorisasi

Mekanisme otorisasi harus memiliki izin yang diperlukan untuk pengelolaan sewa blob. 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 Lease 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.

Tentang penyewaan blob

Perjanjian sewa menciptakan dan mengelola penguncian akses pada blob untuk operasi penulisan dan penghapusan. Durasi penguncian bisa 15 hingga 60 detik, atau bisa tak terbatas. Sewa pada blob menyediakan akses tulis dan hapus eksklusif ke blob. Untuk menulis ke blob dengan penyewaan aktif, klien harus menyertakan ID penyewaan aktif bersama permintaan tulis.

Untuk mempelajari selengkapnya tentang status sewa dan kapan Anda dapat melakukan tindakan tertentu pada sewa, lihat Status sewa dan tindakan.

Semua operasi kontainer diizinkan pada kontainer yang menyertakan blob dengan sewa aktif, termasuk Hapus Kontainer. Oleh karena itu, kontainer dapat dihapus bahkan jika blob di dalamnya memiliki sewa aktif. Gunakan operasi Sewa Kontainer untuk mengontrol hak untuk menghapus kontainer.

Operasi sewa ditangani oleh kelas BlobLeaseClient , yang menyediakan klien yang berisi semua operasi sewa untuk blob dan kontainer. Untuk mempelajari selengkapnya tentang sewa kontainer menggunakan pustaka klien, lihat Membuat dan mengelola sewa kontainer dengan Python.

Mendapatkan sewa

Ketika Anda memperoleh hak sewa blob, Anda mendapatkan ID sewa yang dapat digunakan oleh kode Anda untuk beroperasi pada blob. Jika blob sudah memiliki sewa aktif, Anda hanya dapat meminta sewa baru dengan menggunakan ID sewa aktif. Namun, Anda dapat menentukan durasi sewa baru.

Untuk memperoleh sewa, buat instans kelas BlobLeaseClient , lalu gunakan metode berikut:

Anda juga dapat memperoleh sewa pada blob dengan membuat instans BlobClient, dan menggunakan metode berikut:

Berikut adalah contoh yang mendapatkan sewa selama 30 detik untuk sebuah blob:

def acquire_blob_lease(self, blob_service_client: BlobServiceClient, container_name):
    # Instantiate a BlobClient
    blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")

    # Acquire a 30-second lease on the blob
    lease_client = blob_client.acquire_lease(30)

    return lease_client

Memperpanjang sewa

Anda dapat memperbarui sewa blob apabila ID sewa yang ditentukan dalam permintaan cocok dengan ID sewa yang terkait dengan blob. Sewa dapat diperpanjang bahkan jika telah kedaluwarsa, selama blob belum dimodifikasi atau disewakan lagi sejak kedaluwarsa sewa tersebut. Saat Anda memperbarui sewa, durasi sewa diatur ulang.

Untuk memperbarui sewa, gunakan metode berikut:

Contoh berikut memperbarui penyewaan untuk blob:

def renew_blob_lease(self, lease_client: BlobLeaseClient):
    # Renew a lease on a blob
    lease_client.renew()

Melepaskan sewa

Anda dapat merilis sewa blob jika ID sewa yang ditentukan pada permintaan cocok dengan ID sewa yang terkait dengan blob. Melepaskan sewa memungkinkan klien lain untuk memperoleh sewa untuk blob segera setelah rilis selesai.

Anda dapat membatalkan sewa menggunakan metode berikut:

Contoh berikut melepaskan sewa dari sebuah blob:

def release_blob_lease(self, lease_client: BlobLeaseClient):
    # Release a lease on a blob
    lease_client.release()

Memutuskan sewa

Anda dapat memutus sewa blob jika blob tersebut memiliki sewa yang masih aktif. Setiap permintaan yang diotorisasi dapat menghentikan sewa; permintaan tidak harus mencantumkan ID sewa yang cocok. Sewa tidak dapat diperbarui setelah dilanggar, dan pelanggaran sewa mencegah sewa baru dibuat untuk jangka waktu tertentu sebelum sewa asli kedaluwarsa atau dilepas.

Anda dapat memutuskan sewa dengan menggunakan metode berikut:

Contoh berikut menunjukkan cara memutus perjanjian sewa pada blob:

def break_blob_lease(self, lease_client: BlobLeaseClient):
    # Break a lease on a blob
    lease_client.break_lease()

Mengalokasikan blob secara asinkron

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

Ikuti langkah-langkah berikut untuk menyewa blob menggunakan API asinkron:

  1. Tambahkan pernyataan import berikut:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient, BlobLeaseClient
    
  2. Tambahkan kode untuk menjalankan program menggunakan asyncio.run. Fungsi ini menjalankan coroutine yang diteruskan, main() dalam contoh kami, dan mengelola perulangan asyncio peristiwa. Korutin dideklarasikan dengan sintaks async/await. Dalam contoh ini, main() coroutine pertama-tama membuat level teratas BlobServiceClient menggunakan async with, lalu memanggil metode untuk memperoleh sewa 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:
            lease_client = await sample.acquire_blob_lease(blob_service_client, "sample-container")
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Tambahkan kode untuk memperoleh sewa blob. Kode sama dengan contoh sinkron, kecuali bahwa metode dideklarasikan dengan async kata kunci dan await kata kunci digunakan saat memanggil acquire_lease metode .

    async def acquire_blob_lease(self, blob_service_client: BlobServiceClient, container_name):
        # Instantiate a BlobClient
        blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
    
        # Acquire a 30-second lease on the blob
        lease_client = await blob_client.acquire_lease(30)
    
        return lease_client
    

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

Status dan tindakan sewa

Diagram berikut menunjukkan lima status sewa, dan perintah atau peristiwa yang menyebabkan perubahan status sewa.

Sebuah diagram yang menunjukkan keadaan sewa blob dan pemicu perubahan keadaan.

Tabel berikut mencantumkan lima status sewa, memberikan deskripsi singkat masing-masing, dan mencantumkan tindakan sewa yang diizinkan dalam status tertentu. Tindakan sewa ini menyebabkan transisi status, seperti yang ditunjukkan dalam diagram.

kondisi sewa Deskripsi Tindakan sewa diizinkan
Tersedia Kontrak sewa tidak terkunci dan dapat diperoleh. acquire
Disewakan Kontrak terkunci. acquire (id sewa yang sama saja), renew, , change, releasedan break
Kedaluwarsa Durasi sewa telah kedaluwarsa. acquire, renew, release, dan break
Berita Terkini Kontrak sewa telah dibatalkan, tetapi kontrak akan tetap terkunci sampai periode pembatalan berakhir. release dan break
Terputus Kontrak sewa telah diputus, dan masa pemutusan telah kedaluwarsa. acquire, release, dan break

Ketika sewa kedaluwarsa, ID sewa dipertahankan oleh layanan Blob sampai blob dimodifikasi atau disewakan lagi. Klien dapat mencoba memperbarui atau melepaskan sewa menggunakan ID sewa yang kedaluwarsa. Jika operasi ini berhasil, klien tahu bahwa blob tidak mengalami perubahan sejak ID sewa terakhir kali valid. Jika permintaan gagal, klien tahu bahwa blob telah dimodifikasi, atau blob disewakan kembali sejak terakhir kali sewanya aktif. Klien kemudian harus mendapatkan sewa baru untuk objek blob.

Jika sewa kedaluwarsa daripada dirilis secara eksplisit, klien mungkin perlu menunggu hingga satu menit sebelum sewa baru dapat diperoleh untuk blob. Namun, klien dapat segera memperbarui sewa dengan ID sewa mereka jika blob belum dimodifikasi.

Sewa tidak dapat diberikan untuk rekam jepret blob, karena rekam jepret bersifat baca-saja. Meminta sewa terhadap cuplikan menghasilkan kode status 400 (Bad Request).

Sumber

Untuk mempelajari selengkapnya tentang mengelola sewa blob 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 mengelola sewa blob 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.