Klientská knihovna Azure Storage Blobs pro Python – verze 12.19.0
Azure Blob Storage je řešení úložiště objektů pro cloud od Microsoftu. Blob Storage je optimalizované pro ukládání velkých objemů nestrukturovaných dat, jako jsou textová nebo binární data.
Blob Storage je ideální pro:
- poskytování obrázků nebo dokumentů přímo do prohlížeče
- Ukládání souborů pro distribuovaný přístup
- Streamování videa a zvuku
- Ukládání dat pro zálohování a obnovování, zotavení po havárii a pro archivaci
- Ukládání dat, která bude analyzovat místní nebo v Azure hostovaná služba
Zdrojový kód | Balíček (PyPI) | Balíček (Conda) | Referenční dokumentace k | rozhraní APIDokumentace k | produktuVzorky
Začínáme
Požadavky
- K použití tohoto balíčku se vyžaduje Python 3.7 nebo novější. Další podrobnosti najdete na naší stránce o zásadách podpory verzí sady Azure SDK pro Python.
- Abyste mohli tento balíček používat, musíte mít předplatné Azure a účet úložiště Azure .
Instalace balíčku
Nainstalujte klientskou knihovnu Azure Storage Blobs pro Python pomocí pipu:
pip install azure-storage-blob
Vytvoření účtu úložiště
Pokud chcete vytvořit nový účet úložiště, můžete použít Azure Portal, Azure PowerShell nebo Azure CLI:
# Create a new resource group to hold the storage account -
# if using an existing resource group, skip this step
az group create --name my-resource-group --location westus2
# Create the storage account
az storage account create -n my-storage-account-name -g my-resource-group
Vytvoření klienta
Klientská knihovna Azure Storage Blobs pro Python umožňuje interakci se třemi typy prostředků: se samotným účtem úložiště, kontejnery úložiště objektů blob a objekty blob. Interakce s těmito prostředky začíná instancí klienta. K vytvoření objektu klienta budete potřebovat adresu URL účtu služby Blob Service úložiště a přihlašovací údaje, které vám umožní přístup k účtu úložiště:
from azure.storage.blob import BlobServiceClient
service = BlobServiceClient(account_url="https://<my-storage-account-name>.blob.core.windows.net/", credential=credential)
Vyhledání adresy URL účtu
Adresu URL služby blob účtu úložiště najdete pomocí webu Azure Portal, Azure PowerShell nebo Azure CLI:
# Get the blob service account url for the storage account
az storage account show -n my-storage-account-name -g my-resource-group --query "primaryEndpoints.blob"
Typy přihlašovacích údajů
Parametr credential
může být poskytnut v několika různých formách v závislosti na typu autorizace , kterou chcete použít:
Pokud chcete použít přihlašovací údaje tokenu Azure Active Directory (AAD), zadejte instanci požadovaného typu přihlašovacích údajů získaného z knihovny azure-identity . Například DefaultAzureCredential se dá použít k ověření klienta.
To vyžaduje počáteční nastavení:
- Instalace azure-identity
- Registrace nové aplikace AAD a udělení oprávnění pro přístup ke službě Azure Storage
- Udělení přístupu k datům objektů blob Azure pomocí RBAC na webu Azure Portal
- Nastavte hodnoty ID klienta, ID tenanta a tajného klíče klienta aplikace AAD jako proměnné prostředí: AZURE_TENANT_ID, AZURE_CLIENT_ID AZURE_CLIENT_SECRET
K ověření klienta použijte vrácené přihlašovací údaje tokenu:
from azure.identity import DefaultAzureCredential from azure.storage.blob import BlobServiceClient token_credential = DefaultAzureCredential() blob_service_client = BlobServiceClient( account_url="https://<my_account_name>.blob.core.windows.net", credential=token_credential )
Pokud chcete použít token sdíleného přístupového podpisu (SAS), zadejte ho jako řetězec. Pokud adresa URL vašeho účtu obsahuje token SAS, parametr credential vyněžte. Token SAS můžete vygenerovat z webu Azure Portal v části Sdílený přístupový podpis nebo můžete použít některou z
generate_sas()
funkcí k vytvoření tokenu SAS pro účet úložiště, kontejner nebo objekt blob:from datetime import datetime, timedelta from azure.storage.blob import BlobServiceClient, generate_account_sas, ResourceTypes, AccountSasPermissions sas_token = generate_account_sas( account_name="<storage-account-name>", account_key="<account-access-key>", resource_types=ResourceTypes(service=True), permission=AccountSasPermissions(read=True), expiry=datetime.utcnow() + timedelta(hours=1) ) blob_service_client = BlobServiceClient(account_url="https://<my_account_name>.blob.core.windows.net", credential=sas_token)
Pokud chcete použít sdílený klíč účtu úložiště (neboli přístupový klíč účtu), zadejte tento klíč jako řetězec. Najdete ho na webu Azure Portal v části Přístupové klíče nebo spuštěním následujícího příkazu Azure CLI:
az storage account keys list -g MyResourceGroup -n MyStorageAccount
K ověření klienta použijte klíč jako parametr přihlašovacích údajů:
from azure.storage.blob import BlobServiceClient service = BlobServiceClient(account_url="https://<my_account_name>.blob.core.windows.net", credential="<account_access_key>")
Pokud používáte přizpůsobenou adresu URL (což znamená, že adresa URL není v tomto formátu
<my_account_name>.blob.core.windows.net
), vytvořte instanci klienta pomocí následujících přihlašovacích údajů:from azure.storage.blob import BlobServiceClient service = BlobServiceClient(account_url="https://<my_account_name>.blob.core.windows.net", credential={"account_name": "<your_account_name>", "account_key":"<account_access_key>"})
Pokud chcete použít anonymní veřejný přístup pro čtení, jednoduše vyněžte parametr přihlašovacích údajů.
Vytvoření klienta ze připojovací řetězec
V závislosti na vašem případu použití a metodě autorizace můžete raději inicializovat instanci klienta s připojovací řetězec úložiště, než zadat adresu URL účtu a přihlašovací údaje samostatně. Provedete to tak, že předáte připojovací řetězec úložiště metodě třídy klientafrom_connection_string
:
from azure.storage.blob import BlobServiceClient
connection_string = "DefaultEndpointsProtocol=https;AccountName=xxxx;AccountKey=xxxx;EndpointSuffix=core.windows.net"
service = BlobServiceClient.from_connection_string(conn_str=connection_string)
Připojovací řetězec k vašemu účtu úložiště najdete na webu Azure Portal v části Přístupové klíče nebo spuštěním následujícího příkazu rozhraní příkazového řádku:
az storage account show-connection-string -g MyResourceGroup -n MyStorageAccount
Klíčové koncepty
Službu Azure Blob Service tvoří následující komponenty:
- Samotný účet úložiště
- Kontejner v rámci účtu úložiště
- Objekt blob v kontejneru
Klientská knihovna Azure Storage Blobs pro Python umožňuje interakci s každou z těchto komponent pomocí vyhrazeného objektu klienta.
Klienti
K dispozici jsou čtyři různí klienti pro interakci s různými komponentami služby Blob Service:
- BlobServiceClient – tento klient představuje interakci se samotným účtem úložiště Azure a umožňuje získat předkonfigurované instance klientů pro přístup ke kontejnerům a objektům blob v rámci. Poskytuje operace pro načtení a konfiguraci vlastností účtu a také výpis, vytvoření a odstranění kontejnerů v rámci účtu. Pokud chcete provádět operace s konkrétním kontejnerem nebo objektem blob, načtěte klienta pomocí
get_container_client
metod neboget_blob_client
. - ContainerClient – tento klient představuje interakci s konkrétním kontejnerem (který ještě nemusí existovat) a umožňuje získat předkonfigurované instance klienta pro přístup k objektům blob v rámci. Poskytuje operace pro vytvoření, odstranění nebo konfiguraci kontejneru a zahrnuje operace pro výpis, nahrání a odstranění objektů blob v něm. Pokud chcete provádět operace s konkrétním objektem blob v rámci kontejneru, načtěte klienta pomocí
get_blob_client
metody . - BlobClient – tento klient představuje interakci s konkrétním objektem blob (který ještě nemusí existovat). Poskytuje operace pro nahrávání, stahování, odstraňování a vytváření snímků objektu blob a také konkrétní operace podle typu objektu blob.
- BlobLeaseClient – tento klient představuje interakce zapůjčení s
ContainerClient
neboBlobClient
. Poskytuje operace pro získání, obnovení, vydání, změnu a přerušení zapůjčení zadaného prostředku.
Asynchronní klienti
Tato knihovna obsahuje kompletní asynchronní rozhraní API podporované v Pythonu 3.5 a novějším. Abyste ho mohli používat, musíte nejprve nainstalovat asynchronní přenos, například aiohttp. Další informace najdete v dokumentaci k azure-core .
Asynchronní klienti a přihlašovací údaje by se měli zavřít, když už nejsou potřeba. Tyto objekty jsou asynchronní kontextové manažery a definují asynchronní close
metody.
Typy objektů blob
Po inicializaci klienta si můžete vybrat z různých typů objektů blob:
- Objekty blob bloku ukládají textová a binární data až do velikosti přibližně 4,75 TiB. Objekty blob bloku se skládají z bloků dat, které je možné spravovat jednotlivě.
- Doplňovací objekty blob se skládají z bloků, jako jsou objekty blob bloku, ale jsou optimalizované pro operace připojení. Doplňovací objekty blob jsou ideální pro scénáře, jako je protokolování dat z virtuálních počítačů.
- Objekty blob stránky ukládají soubory s náhodným přístupem o velikosti až 8 TiB. Objekty blob stránky ukládají soubory virtuálního pevného disku (VHD) a slouží jako disky pro virtuální počítače Azure.
Příklady
V následujících částech najdete několik fragmentů kódu, které pokrývají některé nejběžnější úlohy objektů blob služby Storage, mezi které patří:
Upozorňujeme, že před nahráním nebo stažením objektu blob je potřeba vytvořit kontejner.
Vytvoření kontejneru
Vytvořte kontejner, ze kterého můžete nahrávat nebo stahovat objekty blob.
from azure.storage.blob import ContainerClient
container_client = ContainerClient.from_connection_string(conn_str="<connection_string>", container_name="mycontainer")
container_client.create_container()
Použití asynchronního klienta k nahrání objektu blob
from azure.storage.blob.aio import ContainerClient
container_client = ContainerClient.from_connection_string(conn_str="<connection_string>", container_name="mycontainer")
await container_client.create_container()
Nahrání objektu blob
Nahrání objektu blob do kontejneru
from azure.storage.blob import BlobClient
blob = BlobClient.from_connection_string(conn_str="<connection_string>", container_name="mycontainer", blob_name="my_blob")
with open("./SampleSource.txt", "rb") as data:
blob.upload_blob(data)
Použití asynchronního klienta k nahrání objektu blob
from azure.storage.blob.aio import BlobClient
blob = BlobClient.from_connection_string(conn_str="<connection_string>", container_name="mycontainer", blob_name="my_blob")
with open("./SampleSource.txt", "rb") as data:
await blob.upload_blob(data)
Stažení objektu blob
Stažení objektu blob z kontejneru
from azure.storage.blob import BlobClient
blob = BlobClient.from_connection_string(conn_str="<connection_string>", container_name="mycontainer", blob_name="my_blob")
with open("./BlockDestination.txt", "wb") as my_blob:
blob_data = blob.download_blob()
blob_data.readinto(my_blob)
Asynchronní stažení objektu blob
from azure.storage.blob.aio import BlobClient
blob = BlobClient.from_connection_string(conn_str="<connection_string>", container_name="mycontainer", blob_name="my_blob")
with open("./BlockDestination.txt", "wb") as my_blob:
stream = await blob.download_blob()
data = await stream.readall()
my_blob.write(data)
Výčet objektů blob
Výpis objektů blob v kontejneru
from azure.storage.blob import ContainerClient
container = ContainerClient.from_connection_string(conn_str="<connection_string>", container_name="mycontainer")
blob_list = container.list_blobs()
for blob in blob_list:
print(blob.name + '\n')
Asynchronní výpis objektů blob
from azure.storage.blob.aio import ContainerClient
container = ContainerClient.from_connection_string(conn_str="<connection_string>", container_name="mycontainer")
blob_list = []
async for blob in container.list_blobs():
blob_list.append(blob)
print(blob_list)
Volitelná konfigurace
Volitelné argumenty klíčových slov, které je možné předat na úrovni klienta a na úrovni jednotlivých operací.
Konfigurace zásad opakování
Při vytváření instance klienta ke konfiguraci zásad opakování použijte následující argumenty klíčových slov:
- retry_total (int): Celkový počet opakovaných pokusů, které se mají povolit. Má přednost před ostatními počty.
retry_total=0
Pokud nechcete opakovat pokusy o žádosti, předejte je. Výchozí hodnota je 10. - retry_connect (int): Kolik chyb souvisejících s připojením se má opakovat. Výchozí hodnota je 3.
- retry_read (int): Kolikrát se má opakovat pokus o chyby čtení. Výchozí hodnota je 3.
- retry_status (int): Kolikrát se má opakovat chybný stavový kód. Výchozí hodnota je 3.
- retry_to_secondary (bool): Jestli se má žádost opakovat na sekundární, pokud je to možné.
Tato možnost by měla být povolená jenom u účtů RA-GRS a je možné zpracovávat potenciálně zastaralá data.
Výchozí hodnota je
False
.
Konfigurace šifrování
Při vytváření instance klienta ke konfiguraci šifrování použijte následující argumenty klíčových slov:
- require_encryption (bool): Pokud je nastavená hodnota True, vynutí, aby objekty byly zašifrované a dešifrovaly je.
- encryption_version (str): Určuje verzi šifrování, která se má použít. Aktuální možnosti jsou
'2.0'
nebo'1.0'
a výchozí hodnota je'1.0'
. Verze 1.0 je zastaralá a důrazně doporučujeme používat verzi 2.0. - key_encryption_key (objekt): Klíč-šifrování-klíč zadaný uživatelem. Instance musí implementovat následující metody:
wrap_key(key)
--zabalí zadaný klíč pomocí algoritmu podle volby uživatele.get_key_wrap_algorithm()
--vrátí algoritmus použitý k zabalení zadaného symetrického klíče.get_kid()
--vrátí ID klíče řetězce pro tento klíč-encryption-key.
- key_resolver_function (volatelné): Překladač klíčů zadaný uživatelem. Použije řetězec kid k vrácení klíče-encryption-key implementuje rozhraní definované výše.
Konfigurace jiného klienta nebo operace
Další volitelné argumenty klíčového slova konfigurace, které lze zadat v klientovi nebo pro každou operaci.
Argumenty klíčových slov klienta:
- connection_timeout (int): Počet sekund, po které bude klient čekat na navázání připojení k serveru. Výchozí hodnota je 20 sekund.
- read_timeout (int): Počet sekund, po které bude klient čekat mezi po sobě jdoucími operacemi čtení na odpověď ze serveru. Jedná se o časový limit na úrovni soketů, který nemá vliv na celkovou velikost dat. Automaticky se budou opakovat časové limity čtení na straně klienta. Výchozí hodnota je 60 sekund.
- transport (Any): Přenos poskytnutý uživatelem k odeslání požadavku HTTP.
Argumenty klíčových slov pro jednotlivé operace:
- raw_response_hook (volatelné): Dané zpětné volání použije odpověď vrácenou službou.
- raw_request_hook (volatelné): Dané zpětné volání použije požadavek před odesláním do služby.
- client_request_id (str): Nepovinný uživatel zadal identifikaci požadavku.
- user_agent (str): Připojí vlastní hodnotu k hlavičce uživatelského agenta, která se má odeslat spolu s požadavkem.
- logging_enable (bool): Povolí protokolování na úrovni LADĚNÍ. Výchozí hodnota je False. Můžete ho také předat na úrovni klienta, abyste ho povolili pro všechny požadavky.
- logging_body (bool): Povolí protokolování textu požadavku a odpovědi. Výchozí hodnota je False. Můžete ho také předat na úrovni klienta, abyste ho povolili pro všechny požadavky.
- headers (dict): Předejte vlastní hlavičky jako klíče a páry hodnot. Např.
headers={'CustomValue': value}
Poradce při potížích
Obecné
Klienti objektů blob služby Storage vyvolávají výjimky definované v Azure Core.
Tento seznam lze použít jako referenci k zachycení vyvolaných výjimek. Pokud chcete získat konkrétní kód chyby výjimky, použijte error_code
atribut , exception.error_code
tj. .
protokolování
Tato knihovna používá pro protokolování standardní knihovnu protokolování . Základní informace o relacích HTTP (adresy URL, hlavičky atd.) se protokolují na úrovni INFO.
Podrobné protokolování úrovně LADĚNÍ, včetně těl požadavků/odpovědí a nereagovaných hlaviček, je možné povolit na klientovi s argumentem logging_enable
:
import sys
import logging
from azure.storage.blob import BlobServiceClient
# Create a logger for the 'azure.storage.blob' SDK
logger = logging.getLogger('azure.storage.blob')
logger.setLevel(logging.DEBUG)
# Configure a console output
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)
# This client will log detailed information about its HTTP sessions, at DEBUG level
service_client = BlobServiceClient.from_connection_string("your_connection_string", logging_enable=True)
Podobně logging_enable
může povolit podrobné protokolování pro jednu operaci, i když není povolené pro klienta:
service_client.get_service_stats(logging_enable=True)
Další kroky
Další ukázkový kód
Začněte s našimi ukázkami objektů blob.
Několik ukázek sady Python SDK pro objekty blob služby Storage je k dispozici v úložišti sady SDK Na GitHubu. Tyto ukázky poskytují příklad kódu pro další scénáře, se kterými se běžně setkáváme při práci s objekty blob služby Storage:
blob_samples_container_access_policy.py (asynchronní verze) – příklady nastavení zásad přístupu:
- Nastavení zásad přístupu pro kontejner
blob_samples_hello_world.py (asynchronní verze) – příklady běžných úloh objektů blob služby Storage:
- Nastavení kontejneru
- Vytvoření objektu blob bloku, stránky nebo doplňování
- Nahrání objektů blob
- Stáhnout objekty blob
- Odstraňovat objekty blob
blob_samples_authentication.py (asynchronní verze) – příklady ověřování a vytvoření klienta:
- Z připojovací řetězec
- Ze sdíleného přístupového klíče
- Z tokenu sdíleného přístupového podpisu
- Z active directory
blob_samples_service.py (asynchronní verze) – příklady pro interakci se službou Blob Service:
- Získání informací o účtu
- Získání a nastavení vlastností služby
- Získání statistik služby
- Vytvoření, výpis a odstranění kontejnerů
- Získání klienta objektu blob nebo kontejneru
blob_samples_containers.py (asynchronní verze) – příklady pro interakci s kontejnery:
- Vytvoření kontejneru a odstranění kontejnerů
- Nastavení metadat v kontejnerech
- Získání vlastností kontejneru
- Získání zapůjčení kontejneru
- Nastavení zásad přístupu pro kontejner
- Nahrání, výpis a odstranění objektů blob v kontejneru
- Získání klienta objektu blob k interakci s konkrétním objektem blob
blob_samples_common.py (asynchronní verze) – příklady společné pro všechny typy objektů blob:
- Vytvoření snímku
- Odstranění snímku objektu blob
- Obnovitelné odstranění objektu blob
- Zrušení obnovení objektu blob
- Získání zapůjčení objektu blob
- Zkopírování objektu blob z adresy URL
blob_samples_directory_interface.py – příklady propojení se službou Blob Storage, jako by to byl adresář v systému souborů:
- Kopírování (nahrání nebo stažení) jednoho souboru nebo adresáře
- Výpis souborů nebo adresářů na jedné úrovni nebo rekurzivně
- Odstranění jednoho souboru nebo rekurzivní odstranění adresáře
Další dokumentace
Rozsáhlejší dokumentaci ke službě Azure Blob Storage najdete v dokumentaci ke službě Azure Blob Storage na docs.microsoft.com.
Přispívání
Tento projekt vítá příspěvky a návrhy. Většina příspěvků vyžaduje souhlas s licenční smlouvou s přispěvatelem (CLA), která stanoví, že máte právo udělit nám práva k používání vašeho příspěvku a skutečně tak činíte. Podrobnosti najdete tady: https://cla.microsoft.com
Při odesílání žádosti o přijetí změn robot CLA automaticky určí, jestli je potřeba poskytnout smlouvu CLA, a příslušným způsobem žádost o přijetí změn upraví (např. přidáním jmenovky nebo komentáře). Stačí postupovat podle pokynů robota. Pro všechna úložiště používající naši smlouvu CLA to stačí udělat jenom jednou.
Tento projekt přijal pravidla chování pro Microsoft Open Source. Další informace najdete v nejčastějších dotazech k pravidlům chování nebo se obraťte na opencode@microsoft.com případné další dotazy nebo komentáře.
Azure SDK for Python