Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule pokazano, jak tworzyć dzierżawy obiektów blob i zarządzać nimi przy użyciu biblioteki klienta usługi Azure Storage dla języka Python. Biblioteki klienta można używać do uzyskiwania, odnawiania, zwalniania i przerywania dzierżaw obiektów blob.
Aby dowiedzieć się więcej na temat dzierżawy obiektu blob przy użyciu asynchronicznych interfejsów API, zobacz Asynchroniczne dzierżawienie obiektów blob.
Wymagania wstępne
- Subskrypcja platformy Azure — utwórz jedną bezpłatnie
- Konto usługi Azure Storage — tworzenie konta magazynu danych
- 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
Dodaj instrukcje importu
Dodaj następujące oświadczenia 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ą bloba. Aby uzyskać autoryzację przy użyciu identyfikatora Entra firmy Microsoft (zalecane), potrzebujesz wbudowanej roli Azure RBAC Storage Blob Data Contributor lub wyższej. Aby dowiedzieć się więcej, zobacz wskazówki dotyczące autoryzacji dla Lease Blob (interfejs API REST).
Tworzenie obiektu klienta
Aby połączyć aplikację z usługą Blob Storage, utwórz wystąpienie 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 typu klient dla określonych kontenerów lub obiektów blob, zarówno bezpośrednio, jak i z obiektu BlobServiceClient. 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 blobów
Dzierżawa tworzy blokadę obiektu blob i zarządza nią na potrzeby operacji zapisu i usuwania. Czas trwania blokady może wynosić od 15 do 60 sekund lub może być nieskończony. Dzierżawa obiektu blob zapewnia wyłączny dostęp do zapisu i usuwania obiektu blob. Aby zapisać w obiekcie blob z aktywną dzierżawą, klient musi uwzględnić aktywny identyfikator dzierżawy w żądaniu zapisu.
Aby dowiedzieć się więcej na temat stanów dzierżawy i tego, kiedy można wykonać daną akcję w dzierżawie, zobacz Stany dzierżawy i akcje.
Wszystkie operacje na kontenerze są dozwolone, nawet jeśli zawiera on obiekty blob z aktywną dzierżawą, w tym również Usuwanie kontenera. W związku z tym kontener może zostać usunięty, nawet jeśli bloby w nim mają aktywne dzierżawy. Użyj operacji Dzierżawa kontenera , aby kontrolować prawa do usuwania kontenera.
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 kontenerów przy użyciu biblioteki klienta, zobacz Tworzenie dzierżaw kontenerów i zarządzanie nimi przy użyciu języka Python.
Uzyskiwanie dzierżawy
Po uzyskaniu dzierżawy obiektu blob uzyskujesz identyfikator dzierżawy, którego kod może użyć do działania na obiekcie blob. Jeśli obiekt blob ma już aktywną dzierżawę, możesz wystąpić o nową dzierżawę tylko 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ę obiektu blob można również uzyskać, tworząc wystąpienie obiektu BlobClient i używając następującej metody:
Poniższy przykład uzyskuje 30-sekundową dzierżawę dla obiektu typu "blob" (duży obiekt binarny).
def acquire_blob_lease(self, blob_service_client: BlobServiceClient, container_name):
# Instantiate a BlobClient
blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
# Acquire a 30-second lease on the blob
lease_client = blob_client.acquire_lease(30)
return lease_client
Odnawianie dzierżawy
Dzierżawę obiektu blob można odnowić, jeśli identyfikator dzierżawy określony w żądaniu jest zgodny z identyfikatorem dzierżawy skojarzonym z obiektem blob. Dzierżawę można odnowić nawet po jej wygaśnięciu, o ile obiekt blob nie został zmodyfikowany lub dzierżawiony ponownie od czasu wygaśnięcia tej dzierżawy. Po odnowieniu umowy najmu, czas jej trwania rozpoczyna się na nowo.
Aby odnowić dzierżawę, użyj następującej metody:
Poniższy przykład odnawia dzierżawę dla obiektu blob:
def renew_blob_lease(self, lease_client: BlobLeaseClient):
# Renew a lease on a blob
lease_client.renew()
Zwalnianie dzierżawy
Dzierżawę obiektu blob można zwolnić, jeśli identyfikator dzierżawy określony w żądaniu jest zgodny z identyfikatorem dzierżawy skojarzonym z obiektem blob. Zwolnienie dzierżawy umożliwia innemu klientowi uzyskanie dzierżawy dla obiektu blob bezpośrednio po zakończeniu procesu zwolnienia.
Dzierżawę można zwolnić przy użyciu następującej metody:
Poniższy przykład zwalnia dzierżawę bloba:
def release_blob_lease(self, lease_client: BlobLeaseClient):
# Release a lease on a blob
lease_client.release()
Przerywanie dzierżawy
Dzierżawę obiektu blob można przerwać, jeśli obiekt blob ma aktywną dzierżawę. Każde autoryzowane żądanie może przerwać dzierżawę; nie ma potrzeby, aby żądanie określało zgodny identyfikator 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:
W poniższym przykładzie dzierżawa zasobu blob jest przerywana.
def break_blob_lease(self, lease_client: BlobLeaseClient):
# Break a lease on a blob
lease_client.break_lease()
Asynchroniczne uzyskiwanie dostępu do obiektów blob
Biblioteka klienta usługi Azure Blob Storage dla języka Python obsługuje dzierżawę obiektów blob w trybie asynchronicznym. Aby dowiedzieć się więcej na temat wymagań dotyczących konfiguracji projektu, zobacz Programowanie asynchroniczne.
Wykonaj następujące kroki, aby wynająć obiekt typu blob za pomocą 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, BlobLeaseClientDodaj kod, aby uruchomić program przy użyciu polecenia
asyncio.run. Ta funkcja uruchamia przekazaną kohroutynę wmain()naszym przykładzie i zarządza pętląasynciozdarzeń. Korutyny są deklarowane przy użyciu składni async/await. W tym przykładziemain()coroutine najpierw tworzy poziom głównyBlobServiceClientprzy użyciuasync with, a następnie wywołuje metodę, która uzyskuje dzierżawę obiektu blob. 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 = BlobSamples() # 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_blob_lease(blob_service_client, "sample-container") if __name__ == '__main__': asyncio.run(main())Dodaj kod, aby uzyskać dzierżawę obiektu blob. Kod jest taki sam jak w przykładzie synchronicznym, z tą różnicą, że metoda jest zadeklarowana za pomocą słowa kluczowego
async, a słowo kluczoweawaitjest używane podczas wywoływania metodyacquire_lease.async def acquire_blob_lease(self, blob_service_client: BlobServiceClient, container_name): # Instantiate a BlobClient blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt") # Acquire a 30-second lease on the blob lease_client = await blob_client.acquire_lease(30) return lease_client
Dzięki tej podstawowej konfiguracji możesz zaimplementować inne przykłady z tego artykułu jako korutyny, wykorzystując składnię async/await.
Statusy dzierżawy i działania
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 czynności dzierżawy |
|---|---|---|
| Dostępny | Dzierżawa jest odblokowana i można ją nabyć. | acquire |
| Dzierżawione | Dzierżawa jest zablokowana. |
acquire (tylko ten sam identyfikator dzierżawy), renew, change, releasei break |
| Wygasła | Czas trwania dzierżawy wygasł. |
acquire, renew, releasei 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 zachowywany przez usługę Blob, dopóki obiekt blob nie zostanie zmodyfikowany lub dzierżawiony ponownie. Klient może próbować odnowić lub zwolnić dzierżawę przy użyciu wygasłego identyfikatora dzierżawy. Jeśli ta operacja zakończy się pomyślnie, klient wie, że obiekt blob nie został zmieniony od ostatniego momentu, gdy identyfikator dzierżawy był ważny. Jeśli żądanie zakończy się niepowodzeniem, klient wie, że obiekt blob został zmodyfikowany lub obiekt blob został ponownie wydzierżawiony, ponieważ dzierżawa była ostatnio aktywna. Klient musi następnie uzyskać nową dzierżawę na blob.
Jeśli dzierżawa wygaśnie, a nie zostanie jawnie zwolniona, klient może potrzebować odczekać do jednej minuty, zanim będzie można uzyskać nową dzierżawę dla obiektu blob. Jednak klient może natychmiast odnowić dzierżawę przy użyciu identyfikatora dzierżawy, jeśli blob nie został zmodyfikowany.
Nie można udzielić dzierżawy dla migawki obiektu blob, ponieważ migawki są tylko do odczytu. Żądanie wypożyczenia na migawkę skutkuje kodem stanu 400 (Bad Request).
Zasoby
Aby dowiedzieć się więcej na temat zarządzania dzierżawami obiektów blob 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 zarządzania dzierżawami zasobów blob używają następującej operacji interfejsu 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.