Tworzenie dzierżaw obiektów blob i zarządzanie nimi przy użyciu języka Python

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. Bibliotekę klienta można używać do uzyskiwania, odnawiania, wydawania 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

  • W tym artykule założono, że masz już skonfigurowany projekt do pracy z biblioteką klienta usługi Azure Blob Storage dla języka Python. Aby dowiedzieć się więcej na temat konfigurowania projektu, w tym instalacji pakietu, dodawania import instrukcji i tworzenia autoryzowanego obiektu klienta, zobacz Rozpoczynanie pracy z usługami Azure Blob Storage i Python.
  • Mechanizm autoryzacji musi mieć uprawnienia do pracy z dzierżawą obiektu blob. Aby dowiedzieć się więcej, zobacz wskazówki dotyczące autoryzacji dla następującej operacji interfejsu API REST:

Informacje o dzierżawach obiektów blob

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 z żądaniem zapisu.

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.

Wszystkie operacje kontenera są dozwolone w kontenerze zawierającym obiekty blob z aktywną dzierżawą, w tym usuwanie kontenera. W związku z tym kontener może zostać usunięty, nawet jeśli obiekty blob 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 zażądać nowej dzierżawy 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 blob:

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 jeśli wygasła, o ile obiekt blob nie został zmodyfikowany lub dzierżawiony ponownie 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ę 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 natychmiast po zakończeniu wydania.

Dzierżawę można zwolnić przy użyciu następującej metody:

Poniższy przykład zwalnia dzierżawę obiektu blob:

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ę; żą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:

W poniższym przykładzie dzierżawa obiektu blob jest przerywana:

def break_blob_lease(self, lease_client: BlobLeaseClient):
    # Break a lease on a blob
    lease_client.break_lease()

Asynchroniczne dzierżawy obiektów blob

Biblioteka klienta usługi Azure Blob Storage dla języka Python obsługuje asynchronicznie dzierżawę obiektów blob. Aby dowiedzieć się więcej na temat wymagań dotyczących konfiguracji projektu, zobacz Programowanie asynchroniczne.

Wykonaj następujące kroki, aby dzierżawić obiekt blob przy użyciu asynchronicznych interfejsów API:

  1. Dodaj następujące instrukcje importowania:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient, BlobLeaseClient
    
  2. Dodaj kod, aby uruchomić program przy użyciu polecenia asyncio.run. Ta funkcja uruchamia przekazaną kohroutynę w main() naszym przykładzie i zarządza pętlą asyncio zdarzeń. Coroutines są deklarowane za pomocą składni async/await. W tym przykładzie main() coroutine najpierw tworzy najwyższy poziom BlobServiceClient przy użyciu metody async 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ć programu async 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())
    
  3. 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 async pomocą słowa kluczowego, a await słowo kluczowe jest używane podczas wywoływania acquire_lease metody.

    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
    

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.

A diagram showing blob lease states and state change triggers.

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, 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, releasei break

Po wygaśnięciu dzierżawy identyfikator dzierżawy jest utrzymywany 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 czasu ostatniego prawidłowego identyfikatora dzierżawy. 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ę obiektu blob.

Jeśli dzierżawa wygaśnie, a nie zostanie jawnie zwolniona, może być konieczne odczekanie do jednej minuty, zanim będzie można uzyskać nową dzierżawę dla obiektu blob. Jednak klient może odnowić dzierżawę przy użyciu identyfikatora dzierżawy natychmiast, jeśli obiekt blob nie został zmodyfikowany.

Nie można udzielić dzierżawy dla migawki obiektu blob, ponieważ migawki są tylko do odczytu. Żądanie dzierżawy względem migawki powoduje wyświetlenie kodu 400 (Bad Request)stanu .

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.

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 obiektów blob używają następującej operacji interfejsu API REST:

Przykłady kodu

Zasoby biblioteki klienta

Zobacz też