Biblioteka klienta obiektów blob usługi Azure Storage dla języka Python — wersja 12.19.0
Azure Blob Storage to rozwiązanie do magazynowania obiektów w chmurze firmy Microsoft. Usługa Blob Storage jest zoptymalizowana pod kątem przechowywania olbrzymich ilości danych bez struktury, takich jak dane tekstowe lub binarne.
Usługa Blob Storage to idealne rozwiązanie w następujących przypadkach:
- Obsługiwanie obrazów i dokumentów bezpośrednio w przeglądarce
- Przechowywanie plików do dostępu rozproszonego
- Przesyłanie strumieniowe audio i wideo
- Przechowywanie danych do wykonywania kopii zapasowych, przywracania, odzyskiwania po awarii i archiwizowania
- Przechowywanie danych w celu analizy w usłudze lokalnej lub hostowanej na platformie Azure
Kod | źródłowyPakiet (PyPI) | Pakiet (Conda) | Dokumentacja referencyjna interfejsu | APIDokumentacja | produktuPróbki
Wprowadzenie
Wymagania wstępne
- Do korzystania z tego pakietu jest wymagany język Python w wersji 3.7 lub nowszej. Aby uzyskać więcej informacji, przeczytaj naszą stronę dotyczącą zasad pomocy technicznej zestawu Azure SDK dla języka Python.
- Aby korzystać z tego pakietu, musisz mieć subskrypcję platformy Azure i konto usługi Azure Storage .
Instalowanie pakietu
Zainstaluj bibliotekę klienta obiektów blob usługi Azure Storage dla języka Python za pomocą narzędzia pip:
pip install azure-storage-blob
Tworzenie konta magazynu
Jeśli chcesz utworzyć nowe konto magazynu, możesz użyć witryny Azure Portal, Azure PowerShell lub interfejsu wiersza polecenia platformy Azure:
# 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
Tworzenie klienta
Biblioteka klienta obiektów blob usługi Azure Storage dla języka Python umożliwia interakcję z trzema typami zasobów: samym kontem magazynu, kontenerami magazynu obiektów blob i obiektami blob. Interakcja z tymi zasobami rozpoczyna się od wystąpienia klienta. Aby utworzyć obiekt klienta, musisz mieć adres URL konta usługi blob magazynu oraz poświadczenia umożliwiające dostęp do konta magazynu:
from azure.storage.blob import BlobServiceClient
service = BlobServiceClient(account_url="https://<my-storage-account-name>.blob.core.windows.net/", credential=credential)
Szukanie adresu URL konta
Adres URL usługi blob konta magazynu można znaleźć za pomocą witryny Azure Portal, Azure PowerShell lub interfejsu wiersza polecenia platformy Azure:
# 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 poświadczeń
Parametr credential
może być podany w wielu różnych formularzach w zależności od typu autoryzacji , którego chcesz użyć:
Aby użyć poświadczeń tokenu usługi Azure Active Directory (AAD), podaj wystąpienie żądanego typu poświadczeń uzyskanego z biblioteki azure-identity . Na przykład wartość DefaultAzureCredential może służyć do uwierzytelniania klienta.
Wymaga to konfiguracji początkowej:
- Instalowanie tożsamości platformy Azure
- Rejestrowanie nowej aplikacji usługi AAD i przyznawanie uprawnień dostępu do usługi Azure Storage
- Udzielanie dostępu do danych obiektów blob platformy Azure za pomocą kontroli dostępu opartej na rolach w witrynie Azure Portal
- Ustaw wartości identyfikatora klienta, identyfikatora dzierżawy i klucza tajnego klienta aplikacji usługi AAD jako zmienne środowiskowe: AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET
Użyj zwróconego poświadczenia tokenu, aby uwierzytelnić klienta:
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 )
Aby użyć tokenu sygnatury dostępu współdzielonego (SAS), podaj token jako ciąg. Jeśli adres URL konta zawiera token SAS, pomiń parametr poświadczeń. Token sygnatury dostępu współdzielonego można wygenerować w witrynie Azure Portal w obszarze "Sygnatura dostępu współdzielonego" lub użyć jednej z
generate_sas()
funkcji do utworzenia tokenu sas dla konta magazynu, kontenera lub obiektu 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)
Aby użyć klucza współużytkowanego konta magazynu (klucza konta lub klucza dostępu), podaj klucz jako ciąg. Można to znaleźć w witrynie Azure Portal w sekcji "Klucze dostępu" lub uruchamiając następujące polecenie interfejsu wiersza polecenia platformy Azure:
az storage account keys list -g MyResourceGroup -n MyStorageAccount
Użyj klucza jako parametru poświadczeń, aby uwierzytelnić klienta:
from azure.storage.blob import BlobServiceClient service = BlobServiceClient(account_url="https://<my_account_name>.blob.core.windows.net", credential="<account_access_key>")
Jeśli używasz dostosowanego adresu URL (co oznacza, że adres URL nie jest w tym formacie
<my_account_name>.blob.core.windows.net
), utwórz wystąpienie klienta przy użyciu poniższego poświadczenia: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>"})
Aby użyć anonimowego publicznego dostępu do odczytu, po prostu pomiń parametr poświadczeń.
Tworzenie klienta na podstawie parametry połączenia
W zależności od przypadku użycia i metody autoryzacji wolisz zainicjować wystąpienie klienta przy użyciu parametry połączenia magazynu zamiast oddzielnie podać adres URL konta i poświadczenia. W tym celu przekaż parametry połączenia magazynu do metody klasy 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)
Parametry połączenia konta magazynu można znaleźć w witrynie Azure Portal w sekcji "Klucze dostępu" lub uruchamiając następujące polecenie interfejsu wiersza polecenia:
az storage account show-connection-string -g MyResourceGroup -n MyStorageAccount
Kluczowe pojęcia
Następujące składniki składają się na usługę Azure Blob Service:
- Samo konto magazynu
- Kontener na koncie magazynu
- Obiekt blob w kontenerze
Biblioteka klienta obiektów blob usługi Azure Storage dla języka Python umożliwia interakcję z każdym z tych składników za pomocą dedykowanego obiektu klienta.
Klienci
Czterech różnych klientów jest dostarczanych do interakcji z różnymi składnikami usługi Blob Service:
- BlobServiceClient — ten klient reprezentuje interakcję z samym kontem usługi Azure Storage i umożliwia uzyskanie wstępnie skonfigurowanych wystąpień klienta w celu uzyskania dostępu do kontenerów i obiektów blob w obrębie programu . Zapewnia ona operacje pobierania i konfigurowania właściwości konta, a także listy, tworzenia i usuwania kontenerów w ramach konta. Aby wykonać operacje na określonym kontenerze lub obiekcie blob, pobierz klienta przy użyciu
get_container_client
metod lubget_blob_client
. - ContainerClient — ten klient reprezentuje interakcję z określonym kontenerem (który jeszcze nie istnieje) i umożliwia uzyskanie wstępnie skonfigurowanych wystąpień klienta w celu uzyskania dostępu do obiektów blob w ramach programu . Zapewnia ona operacje tworzenia, usuwania lub konfigurowania kontenera oraz obejmuje operacje wyświetlania, przekazywania i usuwania w nim obiektów blob. Aby wykonać operacje na określonym obiekcie blob w kontenerze, pobierz klienta przy użyciu
get_blob_client
metody . - BlobClient — ten klient reprezentuje interakcję z określonym obiektem blob (który nie musi jeszcze istnieć). Zapewnia ona operacje przekazywania, pobierania, usuwania i tworzenia migawek obiektu blob, a także określonych operacji na typ obiektu blob.
- BlobLeaseClient — ten klient reprezentuje interakcje dzierżawy z obiektem
ContainerClient
lubBlobClient
. Zapewnia ona operacje uzyskiwania, odnawiania, wydawania, zmieniania i przerywania dzierżawy dla określonego zasobu.
Klienci asynchroniczny
Ta biblioteka zawiera kompletny asynchroniczny interfejs API obsługiwany w języku Python 3.5 lub nowszym. Aby go używać, należy najpierw zainstalować transport asynchroniczny, taki jak aiohttp. Aby uzyskać więcej informacji, zobacz dokumentację platformy azure-core .
Klienci asynchroniczne i poświadczenia powinny być zamykane, gdy nie są już potrzebne. Te obiekty są menedżerami kontekstu asynchronicznego i definiują metody asynchroniczne close
.
Typy obiektów blob
Po zainicjowaniu klienta możesz wybrać spośród różnych typów obiektów blob:
- Blokowe obiekty blob przechowują dane tekstowe i binarne do około 4,75 TiB. Blokowe obiekty blob składają się z bloków danych, którymi można zarządzać indywidualnie
- Uzupełnialne obiekty blob również składają się z bloków, podobnie jak blokowe obiekty blob, lecz są zoptymalizowane pod kątem operacji dołączania. Uzupełnialne obiekty blob są idealne w scenariuszach, takich jak rejestrowanie danych z maszyn wirtualnych
- Stronicowe obiekty blob przechowują pliki dostępu losowego o rozmiarze do 8 TiB. Stronicowe obiekty blob przechowują pliki wirtualnego dysku twardego (VHD) i służą jako dyski dla maszyn wirtualnych platformy Azure
Przykłady
Poniższe sekcje zawierają kilka fragmentów kodu obejmujących niektóre z najbardziej typowych zadań obiektu blob usługi Storage, w tym:
Należy pamiętać, że kontener należy utworzyć przed przekazaniem lub pobraniem obiektu blob.
Tworzenie kontenera
Utwórz kontener, z którego można przekazywać lub pobierać obiekty blob.
from azure.storage.blob import ContainerClient
container_client = ContainerClient.from_connection_string(conn_str="<connection_string>", container_name="mycontainer")
container_client.create_container()
Przekazywanie obiektu blob za pomocą klienta asynchronicznego
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()
Przekazywanie obiektu blob
Przekazywanie obiektu blob do kontenera
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)
Przekazywanie obiektu blob za pomocą klienta asynchronicznego
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)
Pobieranie obiektu blob
Pobieranie obiektu blob z kontenera
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)
Asynchroniczne pobieranie obiektu 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)
Wyliczanie obiektów blob
Wyświetlanie listy obiektów blob w kontenerze
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')
Asynchroniczna lista obiektów 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)
Konfiguracja opcjonalna
Opcjonalne argumenty słów kluczowych, które można przekazać na poziomie klienta i na poziomie operacji.
Konfiguracja zasad ponawiania prób
Użyj następujących argumentów słów kluczowych podczas tworzenia wystąpienia klienta, aby skonfigurować zasady ponawiania prób:
- retry_total (int): całkowita liczba ponownych prób do zezwolenia. Ma pierwszeństwo przed innymi liczbami.
Przekaż polecenie ,
retry_total=0
jeśli nie chcesz ponowić próby na żądaniach. Wartość domyślna to 10. - retry_connect (int): ile błędów związanych z połączeniem należy ponowić próbę. Wartość domyślna to 3.
- retry_read (int): ile razy należy ponowić próbę w przypadku błędów odczytu. Wartość domyślna to 3.
- retry_status (int): ile razy należy ponowić próbę w przypadku nieprawidłowych kodów stanu. Wartość domyślna to 3.
- retry_to_secondary (bool): czy żądanie powinno zostać ponowione do pomocniczej, jeśli jest możliwe.
Należy włączyć tylko konta RA-GRS, a potencjalnie nieaktualne dane mogą być obsługiwane.
Wartość domyślna to
False
.
Konfiguracja szyfrowania
Użyj następujących argumentów słów kluczowych podczas tworzenia wystąpienia klienta w celu skonfigurowania szyfrowania:
- require_encryption (wartość logiczna): jeśli ustawiono wartość True, wymusi szyfrowanie i odszyfrowywanie obiektów.
- encryption_version (str): określa wersję szyfrowania do użycia. Bieżące opcje to
'2.0'
lub'1.0'
, a wartość domyślna to'1.0'
. Wersja 1.0 jest przestarzała i zdecydowanie zaleca się używanie wersji 2.0. - key_encryption_key (obiekt): udostępniony przez użytkownika klucz-encryption-key. Wystąpienie musi zaimplementować następujące metody:
wrap_key(key)
--opakowuje określony klucz przy użyciu wybranego algorytmu użytkownika.get_key_wrap_algorithm()
--zwraca algorytm używany do opakowowania określonego klucza symetrycznego.get_kid()
--zwraca identyfikator klucza ciągu dla tego klucza-encryption-key.
- key_resolver_function (możliwe do wywołania): rozpoznawanie klucza dostarczonego przez użytkownika. Używa ciągu podrzędnego, aby zwrócić klucz-encryption-key implementujący interfejs zdefiniowany powyżej.
Inna konfiguracja klienta /na operację
Inne opcjonalne argumenty słowa kluczowego konfiguracji, które można określić na kliencie lub na operację.
Argumenty słów kluczowych klienta:
- connection_timeout (int): liczba sekund oczekiwania klienta na nawiązanie połączenia z serwerem. Wartość domyślna to 20 sekund.
- read_timeout (int): liczba sekund oczekiwania klienta między kolejnymi operacjami odczytu na odpowiedź z serwera. Jest to limit czasu na poziomie gniazda i nie ma to wpływu na ogólny rozmiar danych. Limity czasu odczytu po stronie klienta będą automatycznie ponawiane. Wartość domyślna to 60 sekund.
- transport (dowolny): transport dostarczony przez użytkownika w celu wysłania żądania HTTP.
Argumenty słów kluczowych dla operacji:
- raw_response_hook (możliwe do wywołania): Podane wywołanie zwrotne używa odpowiedzi zwróconej z usługi.
- raw_request_hook (możliwe do wywołania): podane wywołanie zwrotne używa żądania przed wysłaniem do usługi.
- client_request_id (str): opcjonalna identyfikacja żądania przez użytkownika opcjonalnego.
- user_agent (str): dołącza wartość niestandardową do nagłówka user-agent, który ma zostać wysłany za pomocą żądania.
- logging_enable (bool): włącza rejestrowanie na poziomie DEBUG. Wartość domyślna to False. Można również przekazać na poziomie klienta, aby włączyć je dla wszystkich żądań.
- logging_body (bool): włącza rejestrowanie treści żądania i odpowiedzi. Wartość domyślna to False. Można również przekazać na poziomie klienta, aby włączyć je dla wszystkich żądań.
- nagłówki (dict): przekazuj niestandardowe nagłówki jako pary klucz, wartość. Przykład.
headers={'CustomValue': value}
Rozwiązywanie problemów
Ogólne
Klienci obiektów blob usługi Storage zgłaszają wyjątki zdefiniowane w usłudze Azure Core.
Ta lista może służyć do przywoływania zgłaszanych wyjątków. Aby uzyskać określony kod błędu wyjątku, użyj atrybutu error_code
, exception.error_code
tj. .
Rejestrowanie
Ta biblioteka używa standardowej biblioteki rejestrowania do rejestrowania. Podstawowe informacje o sesjach HTTP (adresach URL, nagłówkach itp.) są rejestrowane na poziomie INFORMACJI.
Szczegółowe rejestrowanie na poziomie DEBUG, w tym treści żądań/odpowiedzi i nieredagowanych nagłówków, można włączyć na kliencie z 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)
Podobnie może logging_enable
włączyć szczegółowe rejestrowanie dla pojedynczej operacji, nawet jeśli nie jest włączone dla klienta:
service_client.get_service_stats(logging_enable=True)
Następne kroki
Więcej przykładów kodu
Rozpocznij pracę z naszymi przykładami obiektów blob.
Kilka przykładów zestawu PYTHON SDK obiektów blob usługi Storage jest dostępnych w repozytorium GitHub zestawu SDK. Te przykłady zawierają przykładowy kod dla dodatkowych scenariuszy często napotykanych podczas pracy z obiektami blob usługi Storage:
blob_samples_container_access_policy.py (wersja asynchroniowa) — przykłady ustawiania zasad dostępu:
- Konfigurowanie zasad dostępu dla kontenera
blob_samples_hello_world.py (wersja asynchroniowa) — przykłady typowych zadań obiektów blob usługi Storage:
- Konfigurowanie kontenera
- Tworzenie bloku, strony lub uzupełnialnych obiektów blob
- Przekazywanie obiektów blob
- Pobieranie obiektów blob
- Usuwać obiekty blob
blob_samples_authentication.py (wersja asynchronicka) — przykłady uwierzytelniania i tworzenia klienta:
- Z parametry połączenia
- Z klucza dostępu współdzielonego
- Z tokenu sygnatury dostępu współdzielonego
- Z usługi Active Directory
blob_samples_service.py (wersja asynchroniowa) — przykłady interakcji z usługą blob:
- Pobieranie informacji o koncie
- Pobieranie i ustawianie właściwości usługi
- Pobieranie statystyk usługi
- Tworzenie, wyświetlanie listy i usuwanie kontenerów
- Pobieranie klienta obiektu blob lub kontenera
blob_samples_containers.py (wersja asynchroniowa) — przykłady interakcji z kontenerami:
- Tworzenie kontenera i usuwanie kontenerów
- Ustawianie metadanych w kontenerach
- Pobieranie właściwości kontenera
- Uzyskiwanie dzierżawy kontenera
- Ustawianie zasad dostępu w kontenerze
- Przekazywanie, wyświetlanie listy, usuwanie obiektów blob w kontenerze
- Uzyskiwanie klienta obiektu blob do interakcji z określonym obiektem blob
blob_samples_common.py (wersja asynchroniowa) — przykłady typowe dla wszystkich typów obiektów blob:
- Tworzenie migawki
- Usuwanie migawki obiektu blob
- Usuwanie nietrwałe obiektu blob
- Cofanie wprowadzania obiektu blob
- Uzyskiwanie dzierżawy obiektu blob
- Kopiowanie obiektu blob z adresu URL
blob_samples_directory_interface.py — przykłady międzyfakcjonowania z usługą Blob Storage tak, jakby był to katalog w systemie plików:
- Kopiowanie (przekazywanie lub pobieranie) pojedynczego pliku lub katalogu
- Wyświetlanie listy plików lub katalogów na jednym poziomie lub rekursywnie
- Usuwanie pojedynczego pliku lub rekursywnie usuwanie katalogu
Dodatkowa dokumentacja
Aby uzyskać bardziej obszerną dokumentację dotyczącą usługi Azure Blob Storage, zobacz dokumentację usługi Azure Blob Storage dotyczącą docs.microsoft.com.
Współtworzenie
W tym projekcie zachęcamy do współtworzenia i zgłaszania sugestii. Współtworzenie w większości przypadków wymaga zgody na umowę licencyjną dotyczącą współautorów (CLA, Contributor License Agreement), zgodnie z którą współautor ma prawo udzielić i faktycznie udziela nam praw do używania wytworzonej przez siebie zawartości. Aby uzyskać szczegółowe informacje, odwiedź stronę https://cla.microsoft.com.
Po przesłaniu żądania ściągnięcia robot CLA automatycznie określi, czy musisz przekazać umowę CLA, i doda odpowiednie informacje do tego żądania (na przykład etykietę czy komentarz). Po prostu postępuj zgodnie z instrukcjami robota. Wystarczy zrobić to raz dla wszystkich repozytoriów, w przypadku których jest używana nasza umowa CLA.
W tym projekcie przyjęto Kodeks postępowania oprogramowania Open Source firmy Microsoft. Aby uzyskać więcej informacji, zobacz Często zadawane pytania dotyczące kodeksu postępowania lub skontaktuj się z opencode@microsoft.com dodatkowymi pytaniami lub komentarzami.
Azure SDK for Python