Aracılığıyla paylaş


Python ile blob kiralamaları oluşturma ve yönetme

Bu makalede, Python için Azure Depolama istemci kitaplığını kullanarak blob kiraları oluşturma ve yönetme işlemleri gösterilmektedir. blob kiralamalarını almak, yenilemek, serbest bırakmak ve kesmek için istemci kitaplığını kullanabilirsiniz.

Zaman uyumsuz API'leri kullanarak blob kiralama hakkında bilgi edinmek için bkz . Blobları zaman uyumsuz olarak kiralama.

Önkoşullar

  • Bu makalede, Python için Azure Blob Depolama istemci kitaplığıyla çalışmak üzere ayarlanmış bir projeniz olduğu varsayılır. Paket yükleme, deyim ekleme import ve yetkili istemci nesnesi oluşturma dahil olmak üzere projenizi ayarlama hakkında bilgi edinmek için bkz. Azure Blob Depolama ve Python'ı kullanmaya başlama.
  • Yetkilendirme mekanizmasının blob kiralaması ile çalışma izinleri olmalıdır. Daha fazla bilgi edinmek için aşağıdaki REST API işlemi için yetkilendirme kılavuzuna bakın:

Blob kiralamaları hakkında

Kiralama, yazma ve silme işlemleri için blob üzerinde kilit oluşturur ve yönetir. Kilit süresi 15-60 saniye veya sonsuz olabilir. Blob üzerindeki kiralama, bloba özel yazma ve silme erişimi sağlar. Etkin kiralaması olan bir bloba yazmak için, istemcinin yazma isteğiyle etkin kira kimliğini içermesi gerekir.

Kira durumları hakkında daha fazla bilgi edinmek ve bir kiralamada belirli bir eylemi ne zaman gerçekleştirebileceğinizi öğrenmek için bkz . Kira durumları ve eylemleri.

Kapsayıcıyı Sil de dahil olmak üzere etkin kiralaması olan blobları içeren bir kapsayıcıda tüm kapsayıcı işlemlerine izin verilir. Bu nedenle, kapsayıcı içindeki bloblar etkin kiralara sahip olsa bile silinebilir. Kapsayıcı silme haklarını denetlemek için Kira Kapsayıcısı işlemini kullanın.

Kira işlemleri bloblar ve kapsayıcılar için tüm kiralama işlemlerini içeren bir istemci sağlayan BlobLeaseClient sınıfı tarafından işlenir. İstemci kitaplığını kullanarak kapsayıcı kiralamaları hakkında daha fazla bilgi edinmek için bkz . Python ile kapsayıcı kiraları oluşturma ve yönetme.

Kiralama alma

Blob kiralaması aldığınızda, kodunuzun blob üzerinde çalışmak için kullanabileceği bir kira kimliği alırsınız. Blob zaten etkin bir kiraya sahipse, yalnızca etkin kira kimliğini kullanarak yeni kiralama isteyebilirsiniz. Ancak, yeni bir kira süresi belirtebilirsiniz.

Kiralama almak için BlobLeaseClient sınıfının bir örneğini oluşturun ve aşağıdaki yöntemi kullanın:

BlobClient örneğini oluşturup aşağıdaki yöntemi kullanarak blob üzerinde kiralama da alabilirsiniz:

Aşağıdaki örnek bir blob için 30 saniyelik kira alır:

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

Kiralamayı yenileme

İstekte belirtilen kira kimliği blobla ilişkilendirilmiş kira kimliğiyle eşleşiyorsa blob kiralamasını yenileyebilirsiniz. Bu kiralamanın süresi dolduğundan bu yana blob yeniden değiştirilmediği veya kiralanmamış olduğu sürece kiralama süresi dolmuş olsa bile yenilenebilir. Kiralamayı yenilediğinizde kiralama süresi sıfırlanır.

Kiralamayı yenilemek için aşağıdaki yöntemi kullanın:

Aşağıdaki örnek bir blob için kirayı yeniler:

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

Kirayı serbest bırakma

İstekte belirtilen kira kimliği blobla ilişkilendirilmiş kira kimliğiyle eşleşiyorsa blob kiralamasını serbest bırakabilirsiniz. Kiranın serbest bırakılması, başka bir istemcinin yayın tamamlandıktan hemen sonra blob için kira almasını sağlar.

Kiralamayı serbest bırakmak için aşağıdaki yöntemi kullanabilirsiniz:

Aşağıdaki örnek, kirayı bir blob üzerinde serbest bırakır:

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

Kirayı kesme

Blobda etkin bir kira varsa blob kirasını bozabilirsiniz. Herhangi bir yetkili istek kirayı bozabilir; eşleşen bir kira kimliği belirtmek için istek gerekli değildir. Kira bozulduktan sonra yenilenemez ve kirayı bozmak, özgün kiralamanın süresi dolana veya serbest bırakılana kadar bir süre için yeni bir kiranın alınmasına engel olur.

Aşağıdaki yöntemi kullanarak kirayı bozabilirsiniz:

Aşağıdaki örnek bir blob üzerindeki kirayı keser:

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

Blobları zaman uyumsuz olarak kiralama

Python için Azure Blob Depolama istemci kitaplığı, blobları zaman uyumsuz olarak kiralamayı destekler. Proje kurulum gereksinimleri hakkında daha fazla bilgi edinmek için bkz . Zaman uyumsuz programlama.

Zaman uyumsuz API'leri kullanarak blob kiralamak için şu adımları izleyin:

  1. Aşağıdaki içeri aktarma deyimlerini ekleyin:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient, BlobLeaseClient
    
  2. kullanarak asyncio.runprogramı çalıştırmak için kod ekleyin. Bu işlev, main() örneğimizde geçirilen eş yordamları çalıştırır ve olay döngüsünü yönetir asyncio . Eş yordamlar zaman uyumsuz/await söz dizimi ile bildirilir. Bu örnekte, main() coroutine önce kullanarak async withen üst düzeyi BlobServiceClient oluşturur, ardından blob kiralamasını alan yöntemi çağırır. Yalnızca en üst düzey istemcinin kullanması async withgerektiğini unutmayın; bu istemciden oluşturulan diğer istemciler aynı bağlantı havuzunu paylaşır.

    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. Blob kiralaması almak için kod ekleyin. Kod, zaman uyumlu örnekle aynıdır, ancak yöntemi anahtar sözcüğüyle async bildirilir ve await yöntemi çağrılırken acquire_lease anahtar sözcüğü kullanılır.

    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
    

Bu temel kurulumla, bu makaledeki diğer örnekleri zaman uyumsuz/await söz dizimini kullanarak eş yordam olarak uygulayabilirsiniz.

Kira durumları ve eylemleri

Aşağıdaki diyagramda, kiralamanın beş durumu ve kiralama durumu değişikliklerine neden olan komutlar veya olaylar gösterilmektedir.

A diagram showing blob lease states and state change triggers.

Aşağıdaki tabloda beş kira durumu listelenmiştir, her birinin kısa bir açıklaması verilmiştir ve belirli bir durumda izin verilen kiralama eylemleri listelenmiştir. Bu kiralama eylemleri, diyagramda gösterildiği gibi durum geçişlerine neden olur.

Kira durumu Açıklama kira eylemlerine izin verilir
Kullanılabilir Kiranın kilidi açık ve satın alınabiliyor. acquire
Kiralanan Kira kilitli. acquire (yalnızca aynı kira kimliği), renew, change, releaseve break
Süresi Doldu Kiralama süresi doldu. acquire, renew, releaseve break
Kırma Kira bozulmuştur, ancak mola süresi dolana kadar kira kilitlenmeye devam edecektir. release ve break
Kırık Kira bozuldu ve kesme süresi doldu. acquire, releaseve break

Kiralamanın süresi dolduğunda, blob değiştirilene veya yeniden kiralanana kadar kira kimliği Blob hizmeti tarafından korunur. İstemci, süresi dolan kira kimliğini kullanarak kiralamayı yenilemeye veya serbest bırakmaya çalışabilir. Bu işlem başarılı olursa istemci, kira kimliği son geçerli olduğundan beri blob'un değiştirilmediğini bilir. İstek başarısız olursa, istemci blob'un değiştirildiğini veya kiralamanın son etkin olması nedeniyle blobu yeniden kiralandığını bilir. İstemcinin daha sonra blob üzerinde yeni bir kira alması gerekir.

Bir kiranın süresi açıkça yayımlanmak yerine sona eriyorsa, blob için yeni bir kiralamanın alınabilmesi için istemcinin bir dakika kadar beklemesi gerekebilir. Ancak blob değiştirilmediyse istemci kira kimliğini kullanarak kiralamayı hemen yenileyebilir.

Anlık görüntüler salt okunur olduğundan blob anlık görüntüsü için kira verilemiyor. Anlık görüntüye karşı kiralama isteğinde bulunarak durum kodu 400 (Bad Request)elde edin.

Kaynaklar

Python için Azure Blob Depolama istemci kitaplığını kullanarak blob kiralarını yönetme hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın.

REST API işlemleri

Python için Azure SDK, Azure REST API'sinin üzerinde derlenmiş kitaplıklar içerir ve tanıdık Python paradigmalarıyla REST API işlemleriyle etkileşim kurmanızı sağlar. Blob kiralamalarını yönetmek için istemci kitaplığı yöntemleri aşağıdaki REST API işlemini kullanır:

Kod örnekleri

İstemci kitaplığı kaynakları

Ayrıca bkz.