Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Python için Azure Depolama istemci kitaplığını kullanarak blob kiralamalarının nasıl oluşturulacağı ve yönetileceğini gösterilmektedir. blob kira sözleşmelerini almak, yenilemek, 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
- Azure aboneliği - ücretsiz bir abonelik oluşturun
- Azure depolama hesabı - depolama hesabı oluşturma
- Python 3.8+
Ortamınızı ayarlama
Mevcut bir projeniz yoksa, bu bölümde Python için Azure Blob Depolama istemci kitaplığıyla çalışmak üzere bir projenin nasıl ayarlanacağı gösterilir. Diğer ayrıntılar için bkz. Azure Blob Depolama ve Python'ı kullanmaya başlama.
Bu makaledeki kod örnekleriyle çalışmak için projenizi ayarlamak için bu adımları izleyin.
Paketleri yükleme
kullanarak pip installaşağıdaki paketleri yükleyin:
pip install azure-storage-blob azure-identity
İçe aktarma ifadeleri ekle
Aşağıdaki import deyimlerini ekleyin:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, BlobLeaseClient
Yetkilendirme
Yetkilendirme mekanizmasının blob kiralaması ile çalışmak için gerekli izinlere sahip olması gereklidir. Microsoft Entra ID ile yetkilendirme için (önerilir), Azure RBAC yerleşik rolü Storage Blob Verisi Katkıda Bulunan veya daha üstü gerekir. Daha fazla bilgi edinmek için bkz. Kira Blobu (REST API) yetkilendirme kılavuzu.
İstemci nesnesi oluşturma
Bir uygulamayı Blob Depolama'ya bağlamak için bir BlobServiceClient örneği oluşturun. Aşağıdaki örnekte yetkilendirme için kullanarak DefaultAzureCredential bir istemci nesnesinin nasıl oluşturulacağı gösterilmektedir:
# 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)
Ayrıca, doğrudan veya belirli kapsayıcılar veya BlobServiceClient için istemci nesneleri oluşturabilirsiniz. İstemci nesneleri oluşturma ve yönetme hakkında daha fazla bilgi edinmek için bkz . Veri kaynaklarıyla etkileşim kuran istemci nesneleri oluşturma ve yönetme.
Blob kiralamaları hakkında
Kiralama, yazma ve silme işlemleri için blob üzerinde kilit oluşturur ve kilidi yönetir. Kilit süresi 15-60 saniye veya sonsuz olabilir. Blob kiralaması, blob üzerinde özel yazma ve silme erişimi sağlar. Etkin kiralaması olan bir bloba yazmak için, istemci yazma isteğiyle birlikte etkin kiralama kimliğini de eklemelidir.
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.
Bloklar üzerinde etkin kiralama olan bir kapsayıcı üzerinde Kapsayıcıyı Sil de dahil olmak üzere tüm kapsayıcı işlemlerine izin verilir. Bu nedenle, kapsayıcı içindeki bloblar etkin kiralara sahip olsa bile silinebilir. Kapsayıcıyı silme haklarını kontrol etmek için Kira Kapsayıcı 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 Python ile kapsayıcı kiraları oluşturma ve yönetme başlıklı makaleye bakın.
Kiralama sözleşmesi edinme
Blob kiralaması edindiğinizde, kodunuzun blob üzerinde işlem yapmak için kullanabileceği bir kira ID'si 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 bir kira süresi edinir:
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. Kiralamanın süresi dolmuş olsa bile, bu süre sona erdiğinden beri blob değiştirilmediyse veya tekrar kiralanmadıysa kiralama 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 kira süresini yeniler:
def renew_blob_lease(self, lease_client: BlobLeaseClient):
# Renew a lease on a blob
lease_client.renew()
Kira sözleşmesini feshet
İstekte belirtilen kira kimliği blobla ilişkili kira kimliğiyle eşleştiğinde blob kirasını iptal edebilirsiniz. Kiranın boşaltılması, başka bir istemcinin serbest bırakma işlemi tamamlandıktan hemen sonra blob için kira talep etmesini sağlar.
Kiralamayı sonlandırmak için aşağıdaki yöntemi kullanabilirsiniz:
Aşağıdaki örnek, bir blob üzerindeki kira hakkını boşaltır:
def release_blob_lease(self, lease_client: BlobLeaseClient):
# Release a lease on a blob
lease_client.release()
Kira sözleşmesini bozmak
Blob üzerinde etkin bir kira varsa blob kiralaması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:
- BlobLeaseClient.break_lease - Kiralama işlemini sonlandırmak için kullanılan fonksiyon
Aşağıdaki örnek bir blob üzerindeki kirayı fesheder:
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:
Aşağıdaki içe aktarma deyimlerini ekleyin:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient, BlobLeaseClientkullanarak
asyncio.runprogramı çalıştırmak için kod ekleyin. Bu işlev, örneğimizdemain()geçirilen eş yordamı çalıştırır veasyncioolay döngüsünü yönetir. Korotinler async/await söz dizimi ile bildirilir. Bu örnekte,main()coroutine önceBlobServiceClientkullanarak en üst düzeyasync witholuş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())Blob kiralaması almak için kod ekleyin. Kod, zaman uyumlu örnekle aynıdır; ancak yöntem
asyncanahtar kelimesiyle bildirilir veawaityöntemi çağrılırkenacquire_leaseanahtar kelimesi 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 kurulum ile, bu makaledeki diğer örnekleri async/await sözdizimi kullanarak eş yordamlar 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ş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 sözleşmesi kilitlendi. |
acquire (yalnızca aynı kira kimliği), renew, change, releaseve break |
| Süresi Doldu | Kiralama süresi doldu. |
acquire, renew, release ve break |
| Son Dakika | Kira sözleşmesi feshedilmiştir, ancak mola süresi dolana kadar kilitli kalmaya devam edecektir. |
release ve break |
| Bozuk | Kira sözleşmesi ihlal edildi ve fesih süresi sona erdi. |
acquire, release ve 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 kiralama son olarak aktif olduğundan bu yana tekrar kiralandığını bilir. İstemcinin daha sonra blob üzerinde yeni bir kiralama yapması 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 göre kiralama isteğinde bulunmak durum kodu 400 (Bad Request) ile sonuçlanır.
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.
Kod örnekleri
- Bu makaledeki zaman uyumlu veya zaman uyumsuz kod örneklerini (GitHub) görüntüleyin.
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:
İstemci kitaplığı kaynakları
Ayrıca bkz.
İlgili içerik
- Bu makale, Python için Blob Depolama geliştirici kılavuzunun bir parçasıdır. Daha fazla bilgi edinmek için Python uygulamanızı oluşturma makalesinde geliştirici kılavuzu makalelerinin tam listesine bakın.