Sdílet prostřednictvím


Nastavení nebo změna úrovně přístupu objektu blob bloku pomocí Pythonu

Tento článek ukazuje, jak nastavit nebo změnit úroveň přístupu blokového blobu pomocí klientské knihovny Azure Storage pro Python.

Další informace o změně úrovně přístupu objektu blob pomocí asynchronních rozhraní API najdete v tématu Asynchronní změna úrovně přístupu objektu blob.

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,
    BlobClient,
    StandardBlobTier,
    RehydratePriority
)

Autorizace

Autorizační mechanismus musí mít potřebná oprávnění k nastavení úrovně přístupu objektu blob. K autorizaci pomocí Microsoft Entra ID (doporučeno) potřebujete integrovanou roli Přispěvatel dat úložiště Blob nebo vyšší v Azure RBAC. Další informace najdete v pokynech k autorizaci pro nastavení úrovně objektů blob.

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 pro autorizaci vytvořit objekt klienta pomocí DefaultAzureCredential.

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

Informace o úrovních přístupu k objektům blob bloku

Pokud chcete spravovat náklady na potřeby úložiště, může být užitečné uspořádat data na základě toho, jak často se k nim přistupuje a jak dlouho je potřeba uchovávat. Azure Storage nabízí různé úrovně přístupu, takže data objektů blob můžete ukládat nákladově nejefektivnějším způsobem na základě způsobu jejich použití.

Úrovně přístupu k datům v objektech blob

Mezi úrovně přístupu ke službě Azure Storage patří:

  • Horká úroveň – online úroveň optimalizovaná pro ukládání dat, ke kterým se přistupuje nebo mění často. Úroveň hot má nejvyšší náklady na úložiště, ale má nejnižší náklady na přístup.
  • Úroveň chladného úložiště – online úložná úroveň optimalizovaná pro ukládání dat, která jsou zřídka přístupná nebo upravovaná. Data ve studené vrstvě by měla být uložena minimálně po dobu 30 dnů. Studená úroveň má nižší náklady na úložiště a vyšší náklady na přístup v porovnání s horkou úrovní.
  • Studená úroveň – online úroveň optimalizovaná pro ukládání dat, která jsou zřídka přístupná nebo upravená. Data v chladné vrstvě by měla být uložená minimálně 90 dnů. Úroveň Zřídkavý přístup má v porovnání se studenou úrovní nižší náklady na úložiště a vyšší náklady na přístup.
  • Archivní úroveň – offline úroveň optimalizovaná pro ukládání zřídka používaných dat a s flexibilními požadavky na latenci v řádu hodin. Data v archivní úrovni by měla být uložena minimálně po dobu 180 dnů.

Další informace o úrovních přístupu pro blob data naleznete v Úrovně přístupu pro blob data.

I když je objekt blob v archivní úrovni přístupu, považuje se za offline a nedá se číst ani upravovat. Chcete-li číst nebo upravovat data v archivovaném objektu blob, musíte nejprve aktivovat objekt blob do online vrstvy. Chcete-li se dozvědět více o rehydrataci objektu blob z archivní úrovně do online úrovně, podívejte se na Rehydratace objektů blob z archivní úrovně.

Omezení

Nastavení úrovně přístupu je povolené jenom u blokových blobů. Další informace o omezeních nastavení úrovně přístupu objektu blob bloku najdete v tématu Nastavení úrovně objektů blob (REST API).

Poznámka:

Pokud chcete nastavit úroveň přístupu na Cold používání Pythonu, musíte použít minimální verzi klientské knihovny 12.15.0.

Nastavte úroveň přístupu objektu blob během nahrávání

Úroveň přístupu objektu blob můžete nastavit při nahrávání zadáním klíčového argumentu do funkce standard_blob_tier nebo upload_blob_from_url.

Následující příklad kódu ukazuje, jak nastavit přístupový stupeň při nahrávání objektu blob.

def upload_blob_access_tier(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
    
    #Upload blob to the cool tier
    with open(file=os.path.join(r'file_path', blob_name), mode="rb") as data:
        blob_client = blob_client.upload_blob(data=data, overwrite=True, standard_blob_tier=StandardBlobTier.COOL)

Další informace o nahrání objektu blob pomocí Pythonu najdete v tématu Nahrání objektu blob pomocí Pythonu.

Změnit přístupovou úroveň existujícího blokového blobu

Úroveň přístupu existujícího objektu blob bloku můžete změnit pomocí následující funkce:

Následující příklad kódu ukazuje, jak změnit úroveň přístupu existujícího objektu blob na Cool:

def change_blob_access_tier(self, blob_client: BlobClient):
    # Change the blob access tier to cool
    blob_client.set_standard_blob_tier(StandardBlobTier.COOL)

Pokud rehydrujete archivovaný blob, můžete volitelně předat argument klíčového slova rehydrate_priority jako HIGH nebo STANDARD.

Kopírujte objekt blob do jiné úrovně přístupu

Úroveň přístupu existujícího objektu blob bloku můžete změnit zadáním úrovně přístupu v rámci operace kopírování. Pokud chcete změnit úroveň přístupu během operace kopírování, předejte standard_blob_tier argument klíčového slova start_copy_from_url. Pokud rehydrujete objekt blob z archivní vrstvy pomocí operace kopírování, můžete volitelně předat klíčové slovo jako argument rehydrate_priority nebo HIGH nebo STANDARD.

Následující příklad kódu ukazuje, jak rehydratovat archivovaný blob do Hot vrstvy kopírováním:

def rehydrate_blob_using_copy(self, source_archive_blob: BlobClient, destination_rehydrated_blob: BlobClient):
    # Note: the destination blob must have a different name than the source blob

    # Start the copy operation - specify the rehydrate priority and blob access tier
    copy_operation = dict()
    copy_operation = destination_rehydrated_blob.start_copy_from_url(
        source_url=source_archive_blob.url,
        standard_blob_tier=StandardBlobTier.HOT,
        rehydrate_priority=RehydratePriority.STANDARD,
        requires_sync=False)

Další informace o kopírování objektu blob pomocí Pythonu najdete v tématu Kopírování objektu blob pomocí Pythonu.

Změna úrovně přístupu blobu asynchronně

Klientská knihovna Azure Blob Storage pro Python podporuje asynchronní změnu úrovně přístupu objektu blob. Další informace o požadavcích na nastavení projektu najdete v tématu Asynchronní programování.

Pokud chcete změnit úroveň přístupu objektu blob pomocí asynchronních rozhraní API, postupujte takto:

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

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

    async def main():
        sample = BlobAccessTierSamples()
    
        # TODO: Replace <storage-account-name> with an 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:
            # Change the blob access tier to cool
            blob_client = blob_service_client.get_blob_client(container="sample-container", blob="sample-blob.txt")
            await sample.change_blob_access_tier(blob_client=blob_client)
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Přidejte kód pro změnu úrovně přístupu objektu blob. Kód je stejný jako synchronní příklad, s výjimkou toho, že metoda je deklarována s použitím klíčového slova async a při volání metody await se používá klíčové slovo set_standard_blob_tier.

    async def change_blob_access_tier(self, blob_client: BlobClient):
        # Change the blob access tier to cool
        await blob_client.set_standard_blob_tier(StandardBlobTier.COOL)
    

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

Zdroje informací

Další informace o nastavení úrovní přístupu pomocí klientské knihovny Azure Blob Storage pro Python najdete v následujících zdrojích informací.

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 nastavení úrovní přístupu používají následující operaci rozhraní REST API:

Prostředky klientské knihovny

Ukázky kódu

Viz také