Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek ukazuje, jak vytvořit a spravovat zapůjčení kontejnerů 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í kontejnerů.
Informace o pronájmu kontejneru objektů blob pomocí asynchronních rozhraní API najdete v tématu Zapůjčení kontejnerů asynchronně.
Požadavky
- Předplatné Azure – vytvoření bezplatného předplatného
- Účet úložiště Azure – Vytvoření účtu úložiště
- Python 3.8 nebo novější
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řidejte příkazy 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 se zapůjčením kontejneru. K autorizaci pomocí Microsoft Entra ID (doporučuje se) potřebujete předdefinovanou roli Azure RBAC Přispěvatel dat pro objekty Blob nebo vyšší. Další informace najdete v pokynech k autorizaci pro zapůjčení kontejneru (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 pomocí DefaultAzureCredential pro 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í kontejnerů
Zapůjčení vytvoří a spravuje zámek kontejneru pro operace odstranění. Doba trvání zámku může být 15 až 60 sekund nebo může být nekonečná. Pronájem kontejneru poskytuje výhradní právo k odstranění kontejneru. Zapůjčení kontejneru řídí pouze možnost jeho odstranění pomocí operace REST API Odstranit kontejner. Pokud chcete odstranit kontejner s aktivním zapůjčením, musí klient do žádosti o odstranění zahrnout aktivní ID zapůjčení. Všechny ostatní operace kontejneru jsou úspěšné u zapůjčeného kontejneru bez identifikátoru zapůjčení. Pokud jste povolili obnovitelné odstranění kontejneru, můžete odstraněné kontejnery obnovit.
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.
Operace pronájmu zpracovává třída BlobLeaseClient, která poskytuje klienta obsahujícího všechny operace pronájmu pro objekty blob a kontejnery. Další informace o zapůjčení objektů blob pomocí klientské knihovny najdete v tématu Vytváření a správa zapůjčení objektů blob pomocí Pythonu.
Získání zapůjčení
Když získáte zapůjčení kontejneru, získáte ID zapůjčení, které váš kód může použít k provozu s kontejnerem. Pokud už kontejner má aktivní pronájem, můžete požádat pouze o nový pronájem pomocí ID aktivního pronájmu. Můžete ale zadat novou dobu zapůjčení.
Pokud chcete získat pronájem, vytvořte instanci třídy BlobLeaseClient a poté použijte následující metodu:
Zapůjčení můžete získat také pomocí následující metody z třídy ContainerClient :
Následující příklad získá 30sekundový pronájem kontejneru:
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
Prodloužení zapůjčení
Pokud ID zapůjčení zadané v požadavku odpovídá ID zapůjčení přidruženému ke kontejneru, můžete prodloužit zapůjčení kontejneru. Zapůjčení je možné obnovit i v případě, že vypršela jeho platnost, pokud se od vypršení platnosti tohoto zapůjčení znovu nepropůjčí kontejner. 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í kontejneru:
def renew_container_lease(self, lease_client: BlobLeaseClient):
# Renew a lease on the container
lease_client.renew()
Uvolnění nájemní smlouvy
Zapůjčení kontejneru můžete uvolnit, pokud ID zapůjčení zadané v požadavku odpovídá ID zapůjčení přidruženému ke kontejneru. Uvolnění pronájmu umožňuje jinému klientovi získat pronájem kontejneru okamžitě po jeho uvolnění.
Nájem můžete ukončit pomocí následujícího způsobu:
Následující příklad uvolní pronájem kontejneru:
def release_container_lease(self, lease_client: BlobLeaseClient):
# Release a lease on the container
lease_client.release()
Přerušení zapůjčení
Pokud má kontejner aktivní zapůjčení, můžete přerušit zapůjčení kontejneru. 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 ukončí pronájem kontejneru:
def break_container_lease(self, lease_client: BlobLeaseClient):
# Break a lease on the container
lease_client.break_lease()
Asynchronní zapůjčení kontejnerů
Klientská knihovna Azure Blob Storage pro Python podporuje asynchronně pronájem kontejnerů. Další informace o požadavcích na nastavení projektu najdete v tématu Asynchronní programování.
Při zapůjčení kontejneru pomocí asynchronních rozhraní API postupujte takto:
Přidejte následující příkazy importu:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient, BlobLeaseClientPřidejte kód pro spuštění programu pomocí
asyncio.run. Tato funkce spustí předanou korutinu vmain()našem příkladu a spravuje smyčkuasyncioudálostí. Koroutiny jsou deklarovány syntaxí async/await. V tomto příkladu korutina nejprve vytvoří vrcholovou úroveňmain()pomocíBlobServiceClient, pak zavolá metodu, která získá zapůjčení kontejneru. Mějte na paměti, že pouze klient nejvyšší úrovně musí používatasync with, protože ostatní klienti, kteří jsou z něj vytvořeni, sdílejí stejný fond připojení.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())Přidejte kód pro získání zapůjčení kontejneru. Kód je stejný jako synchronní příklad, až na to, že metoda je deklarována pomocí klíčového slova
asynca klíčové slovoawaitse používá při volání metodyacquire.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
S tímto základním nastavením můžete implementovat další příklady v tomto článku jako korutiny 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í.
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 pronájmu způsobují přechody stavu, jak je znázorněno v diagramu.
| Stav zapůjčení | Popis | Povolené akce pronájmu |
|---|---|---|
| Dostupný | Nájem je odemčený a může být získán. | acquire |
| Pronajatý | Nájem je uzamčen. |
acquire (pouze stejné ID zapůjčení), renew, change, releasea break |
| Platnost vypršela | Doba trvání zapůjčení vypršela. |
acquire, renew, release a break |
| Zpráva | 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, release a break |
Po vypršení pronájmu zůstane ID pronájmu udržováno Blob službou, dokud se kontejner nezmění nebo znovu nepronajme. Klient se může pokusit obnovit nebo uvolnit zapůjčení pomocí ID zapůjčení, jehož platnost vypršela. Pokud požadavek selže, klient ví, že byl kontejner pronajat znovu, nebo byl kontejner odstraněn od doby, kdy byla poslední nájemní smlouva aktivní.
Pokud vyprší platnost zapůjčení místo explicitního uvolnění, klient může muset počkat až jednu minutu, než bude možné pro kontejner získat nové zapůjčení. Klient však může zapůjčení obnovit okamžitě s ID zapůjčení, jehož platnost vypršela.
Zdroje informací
Další informace o pronájmu kontejneru pomocí klientské knihovny Azure Blob Storage pro Python najdete v následujících zdrojích informací.
Ukázky kódu
- Zobrazení synchronních nebo asynchronních ukázek kódu z tohoto článku (GitHub)
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 pronájem kontejneru používají následující operaci rozhraní REST API:
- Zapůjčení kontejneru (REST API)
Prostředky klientské knihovny
Viz také
Související obsah
- 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.