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 kapsayıcı kiralamalarının nasıl oluşturulacağı ve yönetileceğini gösterilmektedir. kapsayıcı kiralamalarını almak, yenilemek, serbest bırakmak ve kesmek için istemci kitaplığını kullanabilirsiniz.
Zaman uyumsuz API'leri kullanarak blob kapsayıcısını kiralama hakkında bilgi edinmek için bkz . Kapsayıcıları 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
İçeri aktarma deyimleri ekleme
Aşağıdaki import deyimlerini ekleyin:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, BlobLeaseClient
Yetkilendirme
Yetkilendirme mekanizması, kapsayıcı kiralaması ile çalışmak için gerekli izinlere sahip olmalıdır. Microsoft Entra Id ile yetkilendirme için (önerilir), Azure RBAC yerleşik rolü Depolama Blob Verileri Katkıda Bulunanı veya üzeri gerekir. Daha fazla bilgi edinmek için Bkz. Kira Kapsayıcısı (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 nesneden 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.
Kapsayıcı kiralamaları hakkında
Kiralama, silme işlemleri için bir kapsayıcı üzerinde kilit oluşturur ve yönetir. Kilit süresi 15-60 saniye veya sonsuz olabilir. Kapsayıcıdaki kiralama, kapsayıcıya özel silme erişimi sağlar. Kapsayıcı kiralaması yalnızca Kapsayıcıyı Sil REST API'sini silme işlemini kullanarak kapsayıcıyı silme özelliğini denetler. Etkin kiralaması olan bir kapsayıcıyı silmek için, istemcinin silme isteğiyle birlikte etkin kira kimliğini içermesi gerekir. Kira kimliği olmadan kiralanan bir kapsayıcıda diğer tüm kapsayıcı işlemleri başarılı olur. Kapsayıcı geçici silmeyi etkinleştirdiyseniz silinen kapsayıcıları geri yükleyebilirsiniz.
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.
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 blob kiralamaları hakkında daha fazla bilgi edinmek için bkz . Python ile blob kiralamaları oluşturma ve yönetme.
Kiralama alma
Bir kapsayıcı kirası aldığınızda, kodunuzun kapsayıcı üzerinde çalışmak için kullanabileceği bir kira kimliği alırsınız. Kapsayıcının zaten etkin bir kirası varsa, 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:
ContainerClient sınıfından aşağıdaki yöntemi kullanarak da kiralama alabilirsiniz:
Aşağıdaki örnek bir kapsayıcıda 30 saniyelik kira alır:
def acquire_container_lease(self, blob_service_client: BlobServiceClient, container_name):
# Instantiate a ContainerClient
container_client = blob_service_client.get_container_client(container=container_name)
# Acquire a 30-second lease on the container
lease_client = container_client.acquire_lease(30)
return lease_client
Kiralamayı yenileme
İstekte belirtilen kira kimliği kapsayıcıyla ilişkilendirilmiş kira kimliğiyle eşleşiyorsa kapsayıcı kirasını yenileyebilirsiniz. Kiralama süresi dolsa bile, kapsayıcının süresi dolduğundan bu yana yeniden kiralanmamış olması durumunda kira 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 kapsayıcı için kirayı yeniler:
def renew_container_lease(self, lease_client: BlobLeaseClient):
# Renew a lease on the container
lease_client.renew()
Kirayı serbest bırakma
İstekte belirtilen kira kimliği, kapsayıcıyla ilişkilendirilmiş kira kimliğiyle eşleşiyorsa kapsayıcı kiralamasını serbest bırakabilirsiniz. Kiranın serbest bırakılması, başka bir istemcinin yayın tamamlandıktan hemen sonra kapsayıcı için kira almasını sağlar.
Kiralamayı serbest bırakmak için aşağıdaki yöntemi kullanabilirsiniz:
Aşağıdaki örnek, bir kapsayıcıda kirayı serbest bırakır:
def release_container_lease(self, lease_client: BlobLeaseClient):
# Release a lease on the container
lease_client.release()
Kirayı kesme
Kapsayıcının etkin bir kirası varsa kapsayıcı 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 kapsayıcıdaki kirayı keser:
def break_container_lease(self, lease_client: BlobLeaseClient):
# Break a lease on the container
lease_client.break_lease()
Kapsayıcıları zaman uyumsuz kiralama
Python için Azure Blob Depolama istemci kitaplığı, kapsayıcıları 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 kapsayıcı kiralamak için şu adımları izleyin:
Aşağıdaki içeri 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,main()örneğimizde geçirilen eş yordamları çalıştırır ve olay döngüsünü yönetirasyncio. Eş yordamlar zaman uyumsuz/await söz dizimi ile bildirilir. Bu örnekte,main()coroutine önce kullanarakBlobServiceClienten üst düzeyiasync witholuşturur, ardından kapsayıcı kirası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 = 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: lease_client = await sample.acquire_container_lease(blob_service_client, "sample-container") if __name__ == '__main__': asyncio.run(main())Kapsayıcı kirası almak için kod ekleyin. Kod, zaman uyumlu örnekle aynıdır, ancak yöntemi anahtar sözcüğüyle
asyncbildirilir veawaityöntemi çağrılırkenacquireanahtar sözcüğü kullanılır.async def acquire_container_lease(self, blob_service_client: BlobServiceClient, container_name): # Instantiate a ContainerClient container_client = blob_service_client.get_container_client(container=container_name) # Acquire a 30-second lease on the container lease_client = BlobLeaseClient(container_client) await lease_client.acquire(lease_duration=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ş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 |
| Bozuk | Kira bozuldu ve kesme süresi doldu. |
acquire, release ve break |
Kiralamanın süresi dolduğunda, kapsayıcı yeniden değiştirilene veya 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. İstek başarısız olursa, istemci kapsayıcının yeniden kiralandığını veya kiralamanın son etkin olması nedeniyle kapsayıcının silindiğini bilir.
Bir kiranın süresi açıkça serbest bırakılmak yerine sona eriyorsa, kapsayıcı için yeni bir kiralamanın alınabilmesi için istemcinin bir dakika kadar beklemesi gerekebilir. Ancak istemci, süresi dolan kira kimliğiyle kiralamayı hemen yenileyebilir.
Kaynaklar
Python için Azure Blob Depolama istemci kitaplığını kullanarak kapsayıcı kiralama hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın.
Kod örnekleri
- Bu makaledeki (GitHub) zaman uyumlu veya zaman uyumsuz kod örneklerini 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. Kapsayıcı kiralamak için istemci kitaplığı yöntemleri aşağıdaki REST API işlemini kullanır:
- Kira Kapsayıcısı (REST API)
İ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.