Tworzenie kontenera obiektów blob przy użyciu języka Python
Obiekty blob w usłudze Azure Storage są zorganizowane w kontenery. Przed przekazaniem obiektu blob należy najpierw utworzyć kontener. W tym artykule pokazano, jak tworzyć kontenery za pomocą biblioteki klienta usługi Azure Storage dla języka Python.
Aby dowiedzieć się więcej na temat tworzenia kontenerów obiektów blob przy użyciu asynchronicznych interfejsów API, zobacz Tworzenie kontenera asynchronicznie.
Wymagania wstępne
- Subskrypcja platformy Azure — utwórz jedną bezpłatnie
- Konto usługi Azure Storage — tworzenie konta magazynu
- Python 3.8+
Konfigurowanie środowiska
Jeśli nie masz istniejącego projektu, w tej sekcji pokazano, jak skonfigurować projekt do pracy z biblioteką klienta usługi Azure Blob Storage dla języka Python. Aby uzyskać więcej informacji, zobacz Rozpoczynanie pracy z usługami Azure Blob Storage i Python.
Aby pracować z przykładami kodu w tym artykule, wykonaj następujące kroki, aby skonfigurować projekt.
Instalowanie pakietów
Zainstaluj następujące pakiety przy użyciu polecenia pip install
:
pip install azure-storage-blob azure-identity
Dodawanie instrukcji importu
Dodaj następujące instrukcje import
:
from azure.core.exceptions import ResourceExistsError
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
Autoryzacja
Mechanizm autoryzacji musi mieć niezbędne uprawnienia do utworzenia kontenera. Aby uzyskać autoryzację przy użyciu identyfikatora Entra firmy Microsoft (zalecane), potrzebujesz wbudowanej kontroli dostępu opartej na rolach platformy Azure współautora danych obiektów blob usługi Storage lub nowszego. Aby dowiedzieć się więcej, zobacz wskazówki dotyczące autoryzacji dla tworzenia kontenera (interfejs API REST).
Tworzenie obiektu klienta
Aby połączyć aplikację z usługą Blob Storage, utwórz wystąpienie klasy BlobServiceClient. W poniższym przykładzie pokazano, jak utworzyć obiekt klienta przy użyciu DefaultAzureCredential
autoryzacji:
# 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)
Można również tworzyć obiekty klienta dla określonych kontenerów lub obiektów blob bezpośrednio lub z BlobServiceClient
obiektu. Aby dowiedzieć się więcej na temat tworzenia obiektów klienta i zarządzania nimi, zobacz Tworzenie obiektów klienta korzystających z zasobów danych i zarządzanie nimi.
Informacje o nazewnictwie kontenerów
Nazwa kontenera musi być prawidłową nazwą DNS, ponieważ stanowi część unikatowego identyfikatora URI używanego do adresowania kontenera lub jego obiektów blob. Postępuj zgodnie z tymi regułami podczas nazewnictwa kontenera:
- Nazwy kontenerów mogą mieć długość od 3 do 63 znaków.
- Nazwy kontenerów muszą zaczynać się literą lub cyfrą i mogą zawierać tylko małe litery, cyfry i znak kreski (-).
- Kolejne znaki kreski nie są dozwolone w nazwach kontenerów.
Identyfikator URI zasobu kontenera jest sformatowany w następujący sposób:
https://my-account-name.blob.core.windows.net/my-container-name
Tworzenie kontenera
Aby utworzyć kontener, wywołaj następującą metodę z klasy BlobServiceClient :
Kontener można również utworzyć przy użyciu następującej metody z klasy ContainerClient :
Kontenery są tworzone bezpośrednio pod kontem magazynu. Nie można zagnieżdżać jednego kontenera pod drugim. Wyjątek jest zgłaszany, jeśli kontener o tej samej nazwie już istnieje.
Poniższy przykład tworzy kontener na podstawie BlobServiceClient
obiektu:
def create_blob_container(self, blob_service_client: BlobServiceClient, container_name):
try:
container_client = blob_service_client.create_container(name=container_name)
except ResourceExistsError:
print('A container with this name already exists')
Tworzenie kontenera głównego
Kontener główny służy jako domyślny kontener dla konta magazynu. Każde konto magazynu może mieć jeden kontener główny, który musi mieć nazwę $root. Kontener główny musi zostać jawnie utworzony lub usunięty.
Można odwoływać się do obiektu blob przechowywanego w kontenerze głównym bez uwzględniania nazwy głównego kontenera. Kontener główny umożliwia odwołowanie się do obiektu blob na najwyższym poziomie hierarchii konta magazynu. Można na przykład odwołać się do obiektu blob w kontenerze głównym w następujący sposób:
https://accountname.blob.core.windows.net/default.html
Poniższy przykład tworzy nowy ContainerClient
obiekt o nazwie kontenera $root, a następnie tworzy kontener, jeśli jeszcze nie istnieje na koncie magazynu:
def create_blob_root_container(self, blob_service_client: BlobServiceClient):
container_client = blob_service_client.get_container_client(container="$root")
# Create the root container if it doesn't already exist
if not container_client.exists():
container_client.create_container()
Tworzenie kontenera asynchronicznie
Biblioteka klienta usługi Azure Blob Storage dla języka Python obsługuje asynchronicznie tworzenie kontenera obiektów blob. Aby dowiedzieć się więcej na temat wymagań dotyczących konfiguracji projektu, zobacz Programowanie asynchroniczne.
Wykonaj następujące kroki, aby utworzyć kontener przy użyciu asynchronicznych interfejsów API:
Dodaj następujące instrukcje importowania:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient from azure.core.exceptions import ResourceExistsError
Dodaj kod, aby uruchomić program przy użyciu polecenia
asyncio.run
. Ta funkcja uruchamia przekazaną kohroutynę wmain()
naszym przykładzie i zarządza pętląasyncio
zdarzeń. Coroutines są deklarowane za pomocą składni async/await. W tym przykładziemain()
coroutine najpierw tworzy najwyższy poziomBlobServiceClient
przy użyciu metodyasync with
, a następnie wywołuje metodę tworzącą kontener. Należy pamiętać, że tylko klient najwyższego poziomu musi używać programuasync with
, ponieważ inni klienci utworzoni na jego podstawie współużytkować tę samą pulę połączeń.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: await sample.create_blob_container(blob_service_client, "sample-container") if __name__ == '__main__': asyncio.run(main())
Dodaj kod, aby utworzyć kontener. Kod jest taki sam jak w przykładzie synchronicznym, z tą różnicą, że metoda jest zadeklarowana za
async
pomocą słowa kluczowego, aawait
słowo kluczowe jest używane podczas wywoływaniacreate_container
metody.async def create_blob_container(self, blob_service_client: BlobServiceClient, container_name): try: container_client = await blob_service_client.create_container(name=container_name) except ResourceExistsError: print('A container with this name already exists')
Ta podstawowa konfiguracja umożliwia zaimplementowanie innych przykładów w tym artykule jako kohroutines przy użyciu składni async/await.
Zasoby
Aby dowiedzieć się więcej na temat tworzenia kontenera przy użyciu biblioteki klienta usługi Azure Blob Storage dla języka Python, zobacz następujące zasoby.
Przykłady kodu
- Wyświetlanie synchronicznych lub asynchronicznych przykładów kodu z tego artykułu (GitHub)
Operacje interfejsu API REST
Zestaw Azure SDK dla języka Python zawiera biblioteki, które bazują na interfejsie API REST platformy Azure, umożliwiając interakcję z operacjami interfejsu API REST za pomocą znanych paradygmatów języka Python. Metody biblioteki klienta do tworzenia kontenera używają następującej operacji interfejsu API REST:
- Tworzenie kontenera (interfejs API REST)
Zasoby biblioteki klienta
Powiązana zawartość
- Ten artykuł jest częścią przewodnika dla deweloperów usługi Blob Storage dla języka Python. Aby dowiedzieć się więcej, zobacz pełną listę artykułów z przewodnika dla deweloperów w temacie Tworzenie aplikacji w języku Python.