Sdílet prostřednictvím


Vytváření a správa zapůjčení objektů blob pomocí Pythonu

Tento článek ukazuje, jak vytvořit a spravovat zapůjčení objektů blob pomocí klientské knihovny Azure Storage pro Python. Klientskou knihovnu můžete použít k získání, obnovení, uvolnění a přerušení zapůjčení objektů blob.

Další informace o pronájmu objektu blob pomocí asynchronních rozhraní API najdete v tématu Objekty blob zapůjčení asynchronně.

Požadavky

Nastavení prostředí

Pokud nemáte existující projekt, v této části se dozvíte, jak nastavit projekt pro práci s klientskou knihovnou Azure Blob Storage pro Python. Další podrobnosti najdete v tématu Začínáme se službou Azure Blob Storage a Pythonem.

Pokud chcete pracovat s příklady kódu v tomto článku, nastavte projekt pomocí následujícího postupu.

Instalace balíčků

Nainstalujte následující balíčky pomocí pip install:

pip install azure-storage-blob azure-identity

Přidání příkazů importu

Přidejte následující příkazy import:

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, BlobLeaseClient

Autorizace

Autorizační mechanismus musí mít potřebná oprávnění pro práci s zapůjčením objektu blob. K autorizaci pomocí Microsoft Entra ID (doporučeno) potřebujete předdefinovanou roli Přispěvatel dat objektů blob služby Azure RBAC nebo vyšší. Další informace najdete v pokynech k autorizaci pro zapůjčení objektu blob (REST API).

Vytvoření objektu klienta

Pokud chcete připojit aplikaci ke službě Blob Storage, vytvořte instanci BlobServiceClient. Následující příklad ukazuje, jak vytvořit objekt klienta pro DefaultAzureCredential autorizaci:

# 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)

Můžete také vytvořit klientské objekty pro konkrétní kontejnery nebo objekty blob, a to buď přímo, nebo z objektu BlobServiceClient . Další informace o vytváření a správě klientských objektů najdete v tématu Vytváření a správa klientských objektů, které pracují s datovými prostředky.

O zapůjčení objektů blob

Zapůjčení vytvoří a spravuje zámek objektu blob pro operace zápisu a odstranění. Doba trvání zámku může být 15 až 60 sekund nebo může být nekonečná. Zapůjčení objektu blob poskytuje výhradní přístup k zápisu a odstranění objektu blob. Pokud chcete zapisovat do objektu blob s aktivním zapůjčením, musí klient do žádosti o zápis zahrnout aktivní ID zapůjčení.

Další informace o stavech zapůjčení a o tom, kdy můžete provést danou akci u zapůjčení, najdete v tématu Stavy zapůjčení a akce.

Všechny operace kontejneru jsou povoleny v kontejneru, který zahrnuje objekty blob s aktivním zapůjčením, včetně odstranění kontejneru. Kontejner se proto může odstranit i v případě, že objekty blob v něm mají aktivní zapůjčení. Pomocí operace Zapůjčení kontejneru můžete řídit práva k odstranění kontejneru.

Operace zapůjčení zpracovává třída BlobLeaseClient , která poskytuje klienta obsahující všechny operace zapůjčení objektů blob a kontejnerů. Další informace o zapůjčení kontejnerů pomocí klientské knihovny najdete v tématu Vytváření a správa zapůjčení kontejnerů pomocí Pythonu.

Získání zapůjčení

Když získáte zapůjčení objektu blob, získáte ID zapůjčení, které váš kód může použít k provozu s objektem blob. Pokud objekt blob již má aktivní zapůjčení, můžete požádat pouze o nové zapůjčení pomocí ID aktivního zapůjčení. Můžete ale zadat novou dobu zapůjčení.

Pokud chcete získat zapůjčení, vytvořte instanci třídy BlobLeaseClient a pak použijte následující metodu:

Zapůjčení objektu blob můžete získat také tak, že vytvoříte instanci BlobClient a použijete následující metodu:

Následující příklad získá 30sekundové zapůjčení objektu blob:

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

Prodloužení zapůjčení

Pokud ID zapůjčení zadané v požadavku odpovídá ID zapůjčení přidružené k objektu blob, můžete obnovit zapůjčení objektu blob. Zapůjčení je možné obnovit i v případě, že vypršela jeho platnost, pokud se objekt blob od vypršení platnosti tohoto zapůjčení nezměnil nebo zapůjčení znovu neprodloužil. Když prodloužíte zapůjčení, doba trvání zapůjčení se resetuje.

Pokud chcete prodloužit zapůjčení, použijte následující metodu:

Následující příklad obnoví zapůjčení objektu blob:

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

Uvolnění zapůjčení

Zapůjčení objektu blob můžete uvolnit, pokud ID zapůjčení zadané v požadavku odpovídá ID zapůjčení přidružené k objektu blob. Uvolnění zapůjčení umožňuje jinému klientovi získat zapůjčení objektu blob okamžitě po dokončení vydání.

Zapůjčení můžete uvolnit pomocí následující metody:

Následující příklad uvolní zapůjčení objektu blob:

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

Přerušení zapůjčení

Pokud má objekt blob aktivní zapůjčení, můžete přerušit zapůjčení objektu blob. Jakákoli autorizovaná žádost může přerušit zapůjčení; požadavek není nutný k zadání odpovídajícího ID zapůjčení. Zapůjčení nejde obnovit, jakmile se přeruší, a přerušení zapůjčení zabrání získání nového zapůjčení po určitou dobu, dokud nevyprší platnost původního zapůjčení nebo se uvolní.

Zapůjčení můžete přerušit pomocí následující metody:

Následující příklad přeruší zapůjčení objektu blob:

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

Asynchronní zapůjčení objektů blob

Klientská knihovna Azure Blob Storage pro Python podporuje asynchronně pronájem objektů blob. Další informace o požadavcích na nastavení projektu najdete v tématu Asynchronní programování.

K zapůjčení objektu blob pomocí asynchronních rozhraní API postupujte takto:

  1. Přidejte následující příkazy importu:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient, BlobLeaseClient
    
  2. Přidejte kód pro spuštění programu pomocí asyncio.run. Tato funkce spustí předanou korutinu v main() našem příkladu a spravuje smyčku asyncio událostí. Koroutiny jsou deklarovány syntaxí async/await. V tomto příkladu main() korutin nejprve vytvoří nejvyšší úroveň BlobServiceClient pomocí async witha pak zavolá metodu, která získá zapůjčení objektu blob. Mějte na paměti, že pouze klient nejvyšší úrovně musí používat async with, protože ostatní klienti, kteří z něj vytvořili, sdílejí stejný fond připojení.

    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. Přidejte kód pro získání zapůjčení objektu blob. Kód je stejný jako synchronní příklad s tím rozdílem, že metoda je deklarována pomocí async klíčového await slova a klíčové slovo se používá při volání acquire_lease metody.

    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
    

S tímto základním nastavením můžete implementovat další příklady v tomto článku jako koruty pomocí syntaxe async/await.

Stavy a akce zapůjčení

Následující diagram znázorňuje pět stavů zapůjčení a příkazy nebo události, které způsobují změny stavu zapůjčení.

Diagram znázorňující stavy zapůjčení objektů blob a triggery změn stavu

Následující tabulka uvádí pět stavů zapůjčení, uvádí stručný popis jednotlivých stavů a uvádí akce zapůjčení povolené v daném stavu. Tyto akce zapůjčení způsobují přechody stavu, jak je znázorněno v diagramu.

Stav zapůjčení Popis Povolené akce zapůjčení
Dostupný Zapůjčení je odemknuté a dá se získat. acquire
Pronajatý Zapůjčení je uzamčeno. acquire (pouze stejné ID zapůjčení), renew, change, releasea break
Platnost vypršela Doba trvání zapůjčení vypršela. acquire, renew, releasea break
Lámání Zapůjčení bylo přerušeno, ale zapůjčení bude nadále uzamčeno, dokud nevypršela doba přerušení. release a break
Rozbitý Zapůjčení bylo přerušeno a doba přerušení vypršela. acquire, releasea break

Po vypršení zapůjčení je ID zapůjčení udržováno službou Blob Service, dokud se objekt blob znovu nezmění nebo zapůjčí. Klient se může pokusit obnovit nebo uvolnit zapůjčení pomocí ID zapůjčení, jehož platnost vypršela. Pokud je tato operace úspěšná, klient ví, že se objekt blob od posledního platnosti ID zapůjčení nezměnil. Pokud požadavek selže, klient ví, že se objekt blob změnil nebo se objekt blob zapůjčený znovu od poslední aktivní zapůjčení. Klient pak musí získat nové zapůjčení objektu blob.

Pokud vyprší platnost zapůjčení místo explicitního uvolnění, klient může muset počkat až jednu minutu, než se pro objekt blob získá nové zapůjčení. Klient však může obnovit zapůjčení s ID zapůjčení okamžitě, pokud objekt blob nebyl změněn.

Zapůjčení nejde udělit pro snímek objektu blob, protože snímky jsou jen pro čtení. Vyžádání zapůjčení snímku způsobí stavový kód 400 (Bad Request).

Zdroje informací

Další informace o správě zapůjčení objektů blob pomocí klientské knihovny Azure Blob Storage pro Python najdete v následujících zdrojích informací.

Ukázky kódu

Operace rozhraní REST API

Sada Azure SDK pro Python obsahuje knihovny, které jsou postavené na rozhraní Azure REST API a umožňují interakci s operacemi rozhraní REST API prostřednictvím známých paradigmat Pythonu. Metody klientské knihovny pro správu zapůjčení objektů blob používají následující operaci rozhraní REST API:

Prostředky klientské knihovny

Viz také

  • Tento článek je součástí příručky pro vývojáře služby Blob Storage pro Python. Další informace najdete v úplném seznamu článků příručky pro vývojáře na webu Sestavení aplikace v Pythonu.