Udostępnij za pośrednictwem


Ustawianie lub zmienianie warstwy dostępu blokowego obiektu blob przy użyciu języka Python

W tym artykule pokazano, jak ustawić lub zmienić warstwę dostępu dla blokowego obiektu blob przy użyciu biblioteki klienta usługi Azure Storage dla języka Python.

Aby dowiedzieć się więcej o zmianie warstwy dostępu obiektu blob przy użyciu asynchronicznych interfejsów API, zobacz Asynchronicznie zmienianie warstwy dostępu obiektu 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 ustawiania warstwy dostępu obiektu blob. Aby dowiedzieć się więcej, zobacz wskazówki dotyczące autoryzacji dla następującej operacji interfejsu API REST:

Informacje o warstwach dostępu blokowych obiektów blob

Aby zarządzać kosztami magazynu, warto zorganizować dane na podstawie tego, jak często jest uzyskiwany dostęp i jak długo należy je przechowywać. Usługa Azure Storage oferuje różne warstwy dostępu, dzięki czemu można przechowywać dane obiektów blob w najbardziej ekonomiczny sposób na podstawie sposobu ich użycia.

Warstwy dostępu dla danych obiektów blob

Warstwy dostępu usługi Azure Storage obejmują:

  • Warstwa Gorąca — warstwa online zoptymalizowana pod kątem przechowywania danych, które są często używane lub modyfikowane. Warstwa Gorąca ma najwyższe koszty magazynowania, ale najniższe koszty dostępu.
  • Warstwa Chłodna — warstwa online zoptymalizowana pod kątem przechowywania danych, które są rzadko używane lub modyfikowane. Dane w warstwie Chłodna powinny być przechowywane przez co najmniej 30 dni. Warstwa Chłodna ma niższe koszty magazynowania i wyższe koszty dostępu w porównaniu z warstwą Gorąca.
  • Warstwa zimna — warstwa online zoptymalizowana pod kątem przechowywania danych, do których dostęp jest rzadko używany lub modyfikowany. Dane w warstwie Zimna powinny być przechowywane przez co najmniej 90 dni. Warstwa dostępu Zimna ma niższe koszty magazynowania i wyższe koszty dostępu w porównaniu do warstwy Chłodna.
  • Warstwa Archiwum — warstwa offline zoptymalizowana pod kątem przechowywania rzadko używanych danych i ma elastyczne wymagania dotyczące opóźnień w godzinach. Dane w warstwie Archiwum powinny być przechowywane przez co najmniej 180 dni.

Aby dowiedzieć się więcej na temat warstw dostępu, zobacz Warstwy dostępu dla danych obiektów blob.

Chociaż obiekt blob znajduje się w warstwie dostępu Archiwum, jest uważany za offline i nie można go odczytać ani zmodyfikować. Aby odczytywać lub modyfikować dane w zarchiwizowanym obiekcie blob, należy najpierw przywrócić obiekt blob do warstwy online. Aby dowiedzieć się więcej na temat ponownego wypełniania obiektu blob z warstwy Archiwum do warstwy online, zobacz Ponowne wypełnianie obiektów blob z warstwy Archiwum.

Ograniczenia

Ustawienie warstwy dostępu jest dozwolone tylko w blokowych obiektach blob. Aby dowiedzieć się więcej na temat ograniczeń dotyczących ustawiania warstwy dostępu blokowego obiektu blob, zobacz Ustawianie warstwy obiektu blob (interfejs API REST).

Uwaga

Aby ustawić warstwę dostępu na Cold używanie języka Python, należy użyć minimalnej wersji biblioteki klienta 12.15.0.

Ustawianie warstwy dostępu obiektu blob podczas przekazywania

Warstwę dostępu obiektu blob można ustawić podczas przekazywania, przekazując argument słowa kluczowego standard_blob_tier do upload_blob lub upload_blob_from_url.

W poniższym przykładzie kodu pokazano, jak ustawić warstwę dostępu podczas przekazywania obiektu blob:

def upload_blob_access_tier(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
    
    #Upload blob to the cool tier
    with open(file=os.path.join(r'file_path', blob_name), mode="rb") as data:
        blob_client = blob_client.upload_blob(data=data, overwrite=True, standard_blob_tier=StandardBlobTier.COOL)

Aby dowiedzieć się więcej na temat przekazywania obiektu blob przy użyciu języka Python, zobacz Przekazywanie obiektu blob przy użyciu języka Python.

Zmienianie warstwy dostępu dla istniejącego blokowego obiektu blob

Warstwę dostępu istniejącego obiektu blob blokowego można zmienić przy użyciu następującej funkcji:

Poniższy przykład kodu pokazuje, jak zmienić warstwę dostępu dla istniejącego obiektu blob na Cool:

def change_blob_access_tier(self, blob_client: BlobClient):
    # Change the blob access tier to cool
    blob_client.set_standard_blob_tier(StandardBlobTier.COOL)

Jeśli przywracasz zarchiwizowany obiekt blob, możesz opcjonalnie przekazać argument słowa kluczowego rehydrate_priority jako HIGH lub STANDARD.

Kopiowanie obiektu blob do innej warstwy dostępu

Warstwę dostępu istniejącego bloku obiektu blob można zmienić, określając warstwę dostępu w ramach operacji kopiowania. Aby zmienić warstwę dostępu podczas operacji kopiowania, przekaż argument słowa kluczowego standard_blob_tier do start_copy_from_url. Jeśli przywracasz obiekt blob z warstwy Archiwum przy użyciu operacji kopiowania, opcjonalnie możesz przekazać argument słowa kluczowego rehydrate_priority jako HIGH lub STANDARD.

Poniższy przykład kodu przedstawia sposób ponownego wypełniania zarchiwizowanego obiektu blob do Hot warstwy przy użyciu operacji kopiowania:

def rehydrate_blob_using_copy(self, source_archive_blob: BlobClient, destination_rehydrated_blob: BlobClient):
    # Note: the destination blob must have a different name than the source blob

    # Start the copy operation - specify the rehydrate priority and blob access tier
    copy_operation = dict()
    copy_operation = destination_rehydrated_blob.start_copy_from_url(
        source_url=source_archive_blob.url,
        standard_blob_tier=StandardBlobTier.HOT,
        rehydrate_priority=RehydratePriority.STANDARD,
        requires_sync=False)

Aby dowiedzieć się więcej na temat kopiowania obiektu blob przy użyciu języka Python, zobacz Kopiowanie obiektu blob przy użyciu języka Python.

Asynchroniczna zmiana warstwy dostępu obiektu blob

Biblioteka klienta usługi Azure Blob Storage dla języka Python obsługuje asynchroniczną zmianę warstwy dostępu obiektu blob. Aby dowiedzieć się więcej na temat wymagań dotyczących konfiguracji projektu, zobacz Programowanie asynchroniczne.

Wykonaj następujące kroki, aby zmienić warstwę dostępu obiektu blob przy użyciu asynchronicznych interfejsów API:

  1. Dodaj następujące instrukcje importowania:

    import asyncio
    
    from azure.storage.blob import (
    StandardBlobTier
    )
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import (
    BlobServiceClient,
    BlobClient
    )
    
  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 zmienia warstwę dostępu 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 = BlobAccessTierSamples()
    
        # TODO: Replace <storage-account-name> with an 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:
            # Change the blob access tier to cool
            blob_client = blob_service_client.get_blob_client(container="sample-container", blob="sample-blob.txt")
            await sample.change_blob_access_tier(blob_client=blob_client)
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Dodaj kod, aby zmienić warstwę dostępu 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 set_standard_blob_tier metody.

    async def change_blob_access_tier(self, blob_client: BlobClient):
        # Change the blob access tier to cool
        await blob_client.set_standard_blob_tier(StandardBlobTier.COOL)
    

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 ustawiania warstw dostępu 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 ustawiania warstw dostępu używają następującej operacji interfejsu API REST:

Zasoby biblioteki klienta

Przykłady kodu

Zobacz też