Tworzenie dzierżaw kontenerów i zarządzanie nimi przy użyciu języka Python
W tym artykule pokazano, jak tworzyć dzierżawy kontenerów i zarządzać nimi przy użyciu biblioteki klienta usługi Azure Storage dla języka Python. Bibliotekę klienta można używać do uzyskiwania, odnawiania, wydawania i przerywania dzierżaw kontenerów.
Aby dowiedzieć się więcej na temat dzierżawy kontenera obiektów blob przy użyciu asynchronicznych interfejsów API, zobacz Asynchroniczne dzierżawy kontenerów.
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.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, BlobLeaseClient
Autoryzacja
Mechanizm autoryzacji musi mieć niezbędne uprawnienia do pracy z dzierżawą 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 kontenera dzierżawy (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 dzierżawach kontenerów
Dzierżawa ustanawia blokadę w kontenerze i zarządza nią na potrzeby operacji usuwania. Czas trwania blokady może wynosić od 15 do 60 sekund lub może być nieskończony. Dzierżawa kontenera zapewnia wyłączny dostęp do kontenera. Dzierżawa kontenera kontroluje tylko możliwość usunięcia kontenera przy użyciu operacji Usuń interfejs API REST kontenera . Aby usunąć kontener z aktywną dzierżawą, klient musi uwzględnić aktywny identyfikator dzierżawy z żądaniem usunięcia. Wszystkie inne operacje kontenera kończą się powodzeniem dla dzierżawionego kontenera bez identyfikatora dzierżawy. Jeśli włączono usuwanie nietrwałe kontenera, możesz przywrócić usunięte kontenery.
Aby dowiedzieć się więcej na temat stanów dzierżawy i tego, kiedy można wykonać daną akcję w dzierżawie, zobacz Dzierżawa stanów i akcji.
Operacje dzierżawy są obsługiwane przez klasę BlobLeaseClient , która udostępnia klienta zawierającego wszystkie operacje dzierżawy dla obiektów blob i kontenerów. Aby dowiedzieć się więcej o dzierżawach obiektów blob przy użyciu biblioteki klienta, zobacz Tworzenie dzierżaw obiektów blob i zarządzanie nimi przy użyciu języka Python.
Uzyskiwanie dzierżawy
Po uzyskaniu dzierżawy kontenera uzyskujesz identyfikator dzierżawy, którego kod może użyć do działania w kontenerze. Jeśli kontener ma już aktywną dzierżawę, możesz zażądać tylko nowej dzierżawy przy użyciu aktywnego identyfikatora dzierżawy. Można jednak określić nowy czas trwania dzierżawy.
Aby uzyskać dzierżawę, utwórz wystąpienie klasy BlobLeaseClient , a następnie użyj następującej metody:
Dzierżawę można również uzyskać przy użyciu następującej metody z klasy ContainerClient :
Poniższy przykład uzyskuje 30-sekundową dzierżawę w kontenerze:
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
Odnawianie dzierżawy
Dzierżawę kontenera można odnowić, jeśli identyfikator dzierżawy określony w żądaniu jest zgodny z identyfikatorem dzierżawy skojarzonym z kontenerem. Dzierżawę można odnowić, nawet jeśli wygasła, o ile kontener nie został ponownie wydzierżawiony od czasu wygaśnięcia tej dzierżawy. Po odnowieniu dzierżawy czas trwania resetowania dzierżawy.
Aby odnowić dzierżawę, użyj następującej metody:
Poniższy przykład odnawia dzierżawę dla kontenera:
def renew_container_lease(self, lease_client: BlobLeaseClient):
# Renew a lease on the container
lease_client.renew()
Zwalnianie dzierżawy
Dzierżawę kontenera można zwolnić, jeśli identyfikator dzierżawy określony w żądaniu jest zgodny z identyfikatorem dzierżawy skojarzonym z kontenerem. Zwolnienie dzierżawy umożliwia innemu klientowi uzyskanie dzierżawy dla kontenera natychmiast po zakończeniu wydania.
Dzierżawę można zwolnić przy użyciu następującej metody:
Poniższy przykład zwalnia dzierżawę w kontenerze:
def release_container_lease(self, lease_client: BlobLeaseClient):
# Release a lease on the container
lease_client.release()
Przerywanie dzierżawy
Dzierżawę kontenera można przerwać, jeśli kontener ma aktywną dzierżawę. Każde autoryzowane żądanie może przerwać dzierżawę; żądanie nie jest wymagane do określenia zgodnego identyfikatora dzierżawy. Nie można odnowić dzierżawy po jej uszkodzeniu, a przerwanie dzierżawy uniemożliwia uzyskanie nowej dzierżawy przez pewien czas do momentu wygaśnięcia lub zwolnienia oryginalnej dzierżawy.
Dzierżawę można przerwać przy użyciu następującej metody:
Poniższy przykład powoduje przerwanie dzierżawy w kontenerze:
def break_container_lease(self, lease_client: BlobLeaseClient):
# Break a lease on the container
lease_client.break_lease()
Kontenery dzierżawy asynchronicznie
Biblioteka klienta usługi Azure Blob Storage dla języka Python obsługuje asynchronicznie dzierżawę kontenerów. Aby dowiedzieć się więcej na temat wymagań dotyczących konfiguracji projektu, zobacz Programowanie asynchroniczne.
Wykonaj następujące kroki, aby dzierżawić 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, BlobLeaseClient
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ę, która uzyskuje dzierżawę kontenera. 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: lease_client = await sample.acquire_container_lease(blob_service_client, "sample-container") if __name__ == '__main__': asyncio.run(main())
Dodaj kod, aby uzyskać dzierżawę kontenera. 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ływaniaacquire
metody.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
Ta podstawowa konfiguracja umożliwia zaimplementowanie innych przykładów w tym artykule jako kohroutines przy użyciu składni async/await.
Stany dzierżawy i akcje
Na poniższym diagramie przedstawiono pięć stanów dzierżawy oraz polecenia lub zdarzenia, które powodują zmiany stanu dzierżawy.
W poniższej tabeli wymieniono pięć stanów dzierżawy, podano krótki opis każdego z nich i wymieniono akcje dzierżawy dozwolone w danym stanie. Te akcje dzierżawy powodują przejścia stanu, jak pokazano na diagramie.
Stan dzierżawy | opis | Dozwolone akcje dzierżawy |
---|---|---|
Dostępny | Dzierżawa jest odblokowana i można jej uzyskać. | acquire |
Dzierżawionych | Dzierżawa jest zablokowana. | acquire (tylko ten sam identyfikator dzierżawy), renew , change , release i break |
Wygasła | Czas trwania dzierżawy wygasł. | acquire , renew , release i break |
Łamanie | Dzierżawa została przerwana, ale dzierżawa będzie nadal blokowana do czasu wygaśnięcia okresu przerwania. | release i break |
Złamane | Dzierżawa została przerwana, a okres przerwania wygasł. | acquire , release i break |
Po wygaśnięciu dzierżawy identyfikator dzierżawy jest utrzymywany przez usługę Blob Service do momentu ponownego zmodyfikowania lub ponownego dzierżawy kontenera. Klient może próbować odnowić lub zwolnić dzierżawę przy użyciu wygasłego identyfikatora dzierżawy. Jeśli żądanie zakończy się niepowodzeniem, klient wie, że kontener został ponownie wydzierżawiony lub kontener został usunięty od czasu ostatniego aktywnego działania dzierżawy.
Jeśli dzierżawa wygaśnie, a nie zostanie jawnie zwolniona, może być konieczne odczekenie do jednej minuty przed uzyskaniem nowej dzierżawy dla kontenera. Klient może jednak natychmiast odnowić dzierżawę z wygasłym identyfikatorem dzierżawy.
Zasoby
Aby dowiedzieć się więcej na temat dzierżawy 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 dzierżawy kontenera używają następującej operacji interfejsu API REST:
- Kontener dzierżawy (interfejs API REST)
Zasoby biblioteki klienta
Zobacz też
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.