Blob-leases maken en beheren met Python
In dit artikel wordt beschreven hoe u blobleases maakt en beheert met behulp van de Azure Storage-clientbibliotheek voor Python. U kunt de clientbibliotheek gebruiken om blob-leases te verkrijgen, vernieuwen, vrijgeven en verbreken.
Zie Lease-blobs asynchroon voor meer informatie over het leasen van een blob met behulp van asynchrone API's.
Vereisten
- Azure-abonnement: u kunt een gratis abonnement nemen
- Azure Storage-account: maak een opslagaccount
- Python 3.8+
Uw omgeving instellen
Als u geen bestaand project hebt, ziet u in deze sectie hoe u een project instelt voor gebruik met de Azure Blob Storage-clientbibliotheek voor Python. Zie Aan de slag met Azure Blob Storage en Python voor meer informatie.
Als u wilt werken met de codevoorbeelden in dit artikel, volgt u deze stappen om uw project in te stellen.
Pakketten installeren
Installeer de volgende pakketten met behulp van pip install
:
pip install azure-storage-blob azure-identity
Importinstructies toevoegen
Voeg de volgende import
instructies toe:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, BlobLeaseClient
Autorisatie
Het autorisatiemechanisme moet over de benodigde machtigingen beschikken om te kunnen werken met een blob-lease. Voor autorisatie met Microsoft Entra ID (aanbevolen) hebt u ingebouwde Azure RBAC-rol Opslagblobgegevensbijdrager of hoger nodig. Zie de autorisatierichtlijnen voor Lease Blob (REST API) voor meer informatie.
Een clientobject maken
Als u een app wilt verbinden met Blob Storage, maakt u een exemplaar van BlobServiceClient. In het volgende voorbeeld ziet u hoe u een clientobject maakt met behulp van DefaultAzureCredential
autorisatie:
# 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)
U kunt ook clientobjecten maken voor specifieke containers of blobs, rechtstreeks of vanuit het BlobServiceClient
object. Zie Clientobjecten maken en beheren die interactie hebben met gegevensbronnen voor meer informatie over het maken en beheren van clientobjecten.
Over blob-leases
Een lease maakt en beheert een vergrendeling op een blob voor schrijf- en verwijderbewerkingen. De vergrendelingsduur kan 15 tot 60 seconden zijn of kan oneindig zijn. Een lease op een blob biedt exclusieve schrijf- en verwijdertoegang tot de blob. Als u wilt schrijven naar een blob met een actieve lease, moet een client de actieve lease-id met de schrijfaanvraag opnemen.
Zie Leasestatussen en acties voor meer informatie over leasestatussen en wanneer u een bepaalde actie voor een lease kunt uitvoeren.
Alle containerbewerkingen zijn toegestaan voor een container met blobs met een actieve lease, inclusief Delete Container. Daarom kan een container worden verwijderd, zelfs als blobs in deze container actieve leases hebben. Gebruik de leasecontainerbewerking om rechten te beheren om een container te verwijderen.
Leasebewerkingen worden verwerkt door de BlobLeaseClient-klasse , die een client biedt die alle leasebewerkingen voor blobs en containers bevat. Zie Containerleases maken en beheren met Python voor meer informatie over containerleases met behulp van de clientbibliotheek.
Een lease verkrijgen
Wanneer u een blob-lease verkrijgt, verkrijgt u een lease-id die uw code kan gebruiken om op de blob te werken. Als de blob al een actieve lease heeft, kunt u alleen een nieuwe lease aanvragen met behulp van de actieve lease-id. U kunt echter een nieuwe leaseduur opgeven.
Als u een lease wilt verkrijgen, maakt u een exemplaar van de blobLeaseClient-klasse en gebruikt u vervolgens de volgende methode:
U kunt ook een lease op een blob verkrijgen door een exemplaar van BlobClient te maken en de volgende methode te gebruiken:
In het volgende voorbeeld wordt een lease van 30 seconden voor een blob verkregen:
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
Een lease verlengen
U kunt een blob-lease vernieuwen als de lease-id die is opgegeven voor de aanvraag overeenkomt met de lease-id die is gekoppeld aan de blob. De lease kan worden verlengd, zelfs als deze is verlopen, zolang de blob niet opnieuw is gewijzigd of geleased sinds de vervaldatum van die lease. Wanneer u een lease verlengt, wordt de duur van de lease opnieuw ingesteld.
Gebruik de volgende methode om een lease te verlengen:
In het volgende voorbeeld wordt een lease voor een blob vernieuwd:
def renew_blob_lease(self, lease_client: BlobLeaseClient):
# Renew a lease on a blob
lease_client.renew()
Een lease vrijgeven
U kunt een blob-lease vrijgeven als de lease-id die is opgegeven voor de aanvraag overeenkomt met de lease-id die is gekoppeld aan de blob. Door een lease vrij te geven, kan een andere client direct nadat de release is voltooid een lease voor de blob verkrijgen.
U kunt een lease vrijgeven met behulp van de volgende methode:
In het volgende voorbeeld wordt de lease op een blob uitgebracht:
def release_blob_lease(self, lease_client: BlobLeaseClient):
# Release a lease on a blob
lease_client.release()
Een lease onderbreken
U kunt een blob-lease verbreken als de blob een actieve lease heeft. Elke geautoriseerde aanvraag kan de lease verbreken; de aanvraag is niet vereist om een overeenkomende lease-id op te geven. Een lease kan niet worden verlengd nadat deze is verbroken en het verbreken van een lease voorkomt dat een nieuwe lease gedurende een bepaalde periode wordt verkregen totdat de oorspronkelijke lease verloopt of wordt vrijgegeven.
U kunt een lease verbreken met behulp van de volgende methode:
In het volgende voorbeeld wordt de lease op een blob onderbreekt:
def break_blob_lease(self, lease_client: BlobLeaseClient):
# Break a lease on a blob
lease_client.break_lease()
Blobs asynchroon leasen
De Azure Blob Storage-clientbibliotheek voor Python biedt ondersteuning voor het asynchroon leasen van blobs. Zie Asynchrone programmering voor meer informatie over de vereisten voor het instellen van projecten.
Volg deze stappen om een blob te leasen met behulp van asynchrone API's:
Voeg de volgende importinstructies toe:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient, BlobLeaseClient
Voeg code toe om het programma uit te voeren met behulp van
asyncio.run
. Met deze functie wordt de doorgegeven coroutine uitgevoerd inmain()
ons voorbeeld en wordt deasyncio
gebeurtenislus beheerd. Coroutines worden gedeclareerd met de syntaxis async/await. In dit voorbeeld maakt demain()
coroutine eerst het hoogste niveauBlobServiceClient
met behulp vanasync with
en roept vervolgens de methode aan waarmee de blob-lease wordt verkregen. Houd er rekening mee dat alleen de client op het hoogste niveau moet worden gebruiktasync with
, omdat andere clients die ermee zijn gemaakt, dezelfde verbindingsgroep delen.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())
Voeg code toe om een blob-lease te verkrijgen. De code is hetzelfde als het synchrone voorbeeld, behalve dat de methode wordt gedeclareerd met het
async
trefwoord en hetawait
trefwoord wordt gebruikt bij het aanroepen van deacquire_lease
methode.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
Met deze basisinstallatie kunt u andere voorbeelden in dit artikel implementeren als coroutines met behulp van async/await syntaxis.
Leasestatussen en -acties
In het volgende diagram ziet u de vijf statussen van een lease en de opdrachten of gebeurtenissen die tot wijzigingen in de leasestatus leiden.
De volgende tabel bevat de vijf leasestatussen, geeft een korte beschrijving van elke status en vermeldt de leaseacties die in een bepaalde status zijn toegestaan. Deze leaseacties veroorzaken statusovergangen, zoals wordt weergegeven in het diagram.
Leasestatus | Beschrijving | Toegestane leaseacties |
---|---|---|
beschikbaar | De lease is ontgrendeld en kan worden verkregen. | acquire |
Geleasd | De lease is vergrendeld. | acquire (alleen dezelfde lease-id), renew , change , , release en break |
Verlopen | De duur van de lease is verlopen. | acquire , renew , release en break |
Breken | De lease is verbroken, maar de lease blijft vergrendeld totdat de onderbrekingsperiode is verlopen. | release en break |
Kapot | De lease is verbroken en de onderbrekingsperiode is verlopen. | acquire , release en break |
Wanneer een lease verloopt, wordt de lease-id onderhouden door de Blob-service totdat de blob opnieuw wordt gewijzigd of opnieuw wordt geleased. Een client kan proberen de lease te verlengen of vrij te geven met behulp van de verlopen lease-id. Als deze bewerking is geslaagd, weet de client dat de blob niet is gewijzigd sinds de lease-id voor het laatst geldig was. Als de aanvraag mislukt, weet de client dat de blob is gewijzigd of dat de blob opnieuw is geleased sinds de lease voor het laatst actief was. De client moet vervolgens een nieuwe lease op de blob verkrijgen.
Als een lease verloopt in plaats van expliciet te worden vrijgegeven, moet een client mogelijk maximaal één minuut wachten voordat een nieuwe lease kan worden verkregen voor de blob. De client kan de lease echter onmiddellijk verlengen met de lease-id als de blob niet is gewijzigd.
Een lease kan niet worden verleend voor een blob-momentopname, omdat momentopnamen alleen-lezen zijn. Het aanvragen van een lease op basis van een momentopname resulteert in statuscode 400 (Bad Request)
.
Resources
Zie de volgende resources voor meer informatie over het beheren van blob-leases met behulp van de Azure Blob Storage-clientbibliotheek voor Python.
Codevoorbeelden
- Synchrone of asynchrone codevoorbeelden weergeven uit dit artikel (GitHub)
REST API-bewerkingen
De Azure SDK voor Python bevat bibliotheken die zijn gebaseerd op de Azure REST API, zodat u kunt communiceren met REST API-bewerkingen via bekende Python-paradigma's. De clientbibliotheekmethoden voor het beheren van blob-leases maken gebruik van de volgende REST API-bewerking:
Clientbibliotheekbronnen
Zie ook
Gerelateerde inhoud
- Dit artikel maakt deel uit van de ontwikkelaarshandleiding voor Blob Storage voor Python. Zie de volledige lijst met artikelen over ontwikkelaarshandleidingen in Uw Python-app bouwen voor meer informatie.