Share via


Containerleases maken en beheren met Python

In dit artikel wordt beschreven hoe u containerleases maakt en beheert met behulp van de Azure Storage-clientbibliotheek voor Python. U kunt de clientbibliotheek gebruiken om containerleases te verkrijgen, vernieuwen, vrijgeven en verbreken.

Zie Leasecontainers asynchroon voor meer informatie over het leasen van een blobcontainer met behulp van asynchrone API's.

Vereisten

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 containerlease. Voor autorisatie met Microsoft Entra ID (aanbevolen) hebt u ingebouwde Azure RBAC-rol Opslagblobgegevensbijdrager of hoger nodig. Zie de autorisatierichtlijnen voor Lease Container (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 containerleases

Met een lease wordt een vergrendeling voor een container tot stand brengt en beheerd voor verwijderingsbewerkingen. De vergrendelingsduur kan 15 tot 60 seconden zijn of kan oneindig zijn. Een lease op een container biedt exclusieve verwijderingstoegang tot de container. Een containerlease bepaalt alleen de mogelijkheid om de container te verwijderen met behulp van de bewerking Container REST API verwijderen. Als u een container met een actieve lease wilt verwijderen, moet een client de actieve lease-id met de verwijderaanvraag opnemen. Alle andere containerbewerkingen slagen in een leasecontainer zonder de lease-id. Als u voorlopig verwijderen van containers hebt ingeschakeld, kunt u verwijderde containers herstellen.

Zie Leasestatussen en acties voor meer informatie over leasestatussen en wanneer u een bepaalde actie voor een lease kunt uitvoeren.

Leasebewerkingen worden verwerkt door de BlobLeaseClient-klasse , die een client biedt die alle leasebewerkingen voor blobs en containers bevat. Zie Blob-leases maken en beheren met Python voor meer informatie over blob-leases met behulp van de clientbibliotheek.

Een lease verkrijgen

Wanneer u een containerlease verkrijgt, verkrijgt u een lease-id die uw code kan gebruiken om op de container te werken. Als de container 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 verkrijgen met behulp van de volgende methode uit de Klasse ContainerClient :

In het volgende voorbeeld wordt een lease van 30 seconden verkregen voor een container:

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

Een lease verlengen

U kunt een containerlease vernieuwen als de lease-id die is opgegeven voor de aanvraag overeenkomt met de lease-id die is gekoppeld aan de container. De lease kan worden verlengd, zelfs als deze is verlopen, zolang de container niet opnieuw is 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 container vernieuwd:

def renew_container_lease(self, lease_client: BlobLeaseClient):
    # Renew a lease on the container
    lease_client.renew()

Een lease vrijgeven

U kunt een containerlease vrijgeven als de lease-id die is opgegeven voor de aanvraag overeenkomt met de lease-id die aan de container is gekoppeld. Door een lease vrij te geven, kan een andere client direct nadat de release is voltooid een lease voor de container verkrijgen.

U kunt een lease vrijgeven met behulp van de volgende methode:

In het volgende voorbeeld wordt de lease op een container uitgebracht:

def release_container_lease(self, lease_client: BlobLeaseClient):
    # Release a lease on the container
    lease_client.release()

Een lease onderbreken

U kunt een containerlease verbreken als de container 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 voor een container verbroken:

def break_container_lease(self, lease_client: BlobLeaseClient):
    # Break a lease on the container
    lease_client.break_lease()

Leasecontainers asynchroon

De Azure Blob Storage-clientbibliotheek voor Python ondersteunt asynchroon leasecontainers. Zie Asynchrone programmering voor meer informatie over de vereisten voor het instellen van projecten.

Volg deze stappen om een container te leasen met behulp van asynchrone API's:

  1. Voeg de volgende importinstructies toe:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient, BlobLeaseClient
    
  2. Voeg code toe om het programma uit te voeren met behulp van asyncio.run. Met deze functie wordt de doorgegeven coroutine uitgevoerd in main() ons voorbeeld en wordt de asyncio gebeurtenislus beheerd. Coroutines worden gedeclareerd met de syntaxis async/await. In dit voorbeeld maakt de main() coroutine eerst het hoogste niveau BlobServiceClient met behulp van async withen roept vervolgens de methode aan waarmee de containerlease wordt verkregen. Houd er rekening mee dat alleen de client op het hoogste niveau moet worden gebruikt async with, omdat andere clients die ermee zijn gemaakt, dezelfde verbindingsgroep delen.

    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())
    
  3. Voeg code toe om een containerlease te verkrijgen. De code is hetzelfde als het synchrone voorbeeld, behalve dat de methode wordt gedeclareerd met het async trefwoord en het await trefwoord wordt gebruikt bij het aanroepen van de acquire methode.

    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
    

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.

Een diagram met containerleasestatussen en statuswijzigingstriggers.

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, , releaseen 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 container opnieuw wordt gewijzigd of geleased. Een client kan proberen de lease te verlengen of vrij te geven met behulp van de verlopen lease-id. Als de aanvraag mislukt, weet de client dat de container opnieuw is geleased of dat de container is verwijderd sinds de lease voor het laatst actief was.

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 container. De client kan de lease echter onmiddellijk verlengen met de verlopen lease-id.

Resources

Zie de volgende resources voor meer informatie over het leasen van een container 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 leasen van een container maken gebruik van de volgende REST API-bewerking:

Clientbibliotheekbronnen

Zie ook

  • 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.