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 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.
Prerequisites
- Subskrypcja platformy Azure — utwórz jedną bezpłatnie
- Konto usługi Azure Storage — utwórz konto usługi Azure Storage
- 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 import wyrażenia:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
BlobServiceClient,
BlobClient,
StandardBlobTier,
RehydratePriority
)
Authorization
Mechanizm autoryzacji musi mieć niezbędne uprawnienia do ustawiania warstwy dostępu obiektu blob. Aby uzyskać autoryzację przy użyciu Microsoft Entra ID (zalecane), potrzebujesz wbudowanej roli Współautor danych Blob Storage w Azure RBAC lub wyższej. Aby dowiedzieć się więcej, zobacz wskazówki dotyczące autoryzacji dla Set Blob Tier.
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 klienta dla określonych kontenerów lub obiektów blob bezpośrednio lub za pomocą 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 warstwach dostępu dla 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 blob
Warstwy dostępu usługi Azure Storage obejmują:
- Hot tier - warstwa online zoptymalizowana do przechowywania danych, które są często używane lub modyfikowane. Gorąca warstwa 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 poziomie chłodnym powinny być przechowywane przez co najmniej 30 dni. Poziom chłodny ma niższe koszty magazynowania i wyższe koszty dostępu w porównaniu z poziomem gorącym.
- Warstwa zimna — warstwa online zoptymalizowana pod kątem przechowywania danych, do których dostęp jest rzadko używany lub modyfikowany. Dane w warstwie zimnej powinny być przechowywane przez co najmniej 90 dni. Warstwa zimna ma niższe koszty magazynowania i wyższe koszty dostępu w porównaniu do warstwy chłodnej.
- Warstwa archiwalna — wersja offline zoptymalizowana do przechowywania danych rzadko używanych, które mają elastyczne wymagania dotyczące opóźnień, rzędu godzin. 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 do Archiwum, jest uznawany za znajdujący się w trybie 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 przywracania obiektów blob z warstwy Archiwum do warstwy online, zobacz Ponowne przywracanie obiektów blob z warstwy Archiwum.
Restrictions
Ustawienie warstwy dostępu jest dozwolone tylko w obiektach blob typu blokowego. Aby dowiedzieć się więcej na temat ograniczeń w ustawianiu poziomu dostępu dla blokowego obiektu blob, zobacz Ustaw poziom obiektu blob (interfejs API REST).
Note
Aby ustawić warstwę dostępu na Cold, przy użyciu Python należy użyć minimalnej wersji biblioteki klienta 12.15.0.
Ustawianie warstwy dostępu obiektu blob podczas przesyłania
Można ustawić warstwę dostępu obiektu blob podczas jego przesyłania, przekazując argument słowa kluczowego standard_blob_tier do funkcji upload_blob lub upload_blob_from_url.
W poniższym przykładzie kodu pokazano, jak ustawić warstwę dostępu podczas ładowania 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.
Zmień warstwę dostępu dla istniejącego blokowego blobu.
Poziom 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 reaktywacji zarchiwizowanego bloba 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 poziomu dostępu blobu
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:
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 )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ąasynciozdarzeń. Coroutines są deklarowane za pomocą składni async/await. W tym przykładziemain()coroutine najpierw tworzy najwyższy poziomBlobServiceClientprzy użyciu metodyasync 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ć programuasync 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())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 z użyciem słowa kluczowego
async, a podczas wywoływania metodyawaitużywane jest słowo kluczoweset_standard_blob_tier.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)
Dzięki tej podstawowej konfiguracji możesz zaimplementować inne przykłady w tym artykule jako korutyny ze składnią async/await.
Resources
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:
- Ustaw Blob Tier (interfejs API REST)
Zasoby biblioteki klienta
Przykłady kodu
- Wyświetlanie synchronicznych lub asynchronicznych przykładów kodu z tego artykułu (GitHub)