Ange eller ändra åtkomstnivån för en blockblob med Python
Den här artikeln visar hur du anger eller ändrar åtkomstnivån för en blockblob med hjälp av Azure Storage-klientbiblioteket för Python.
Mer information om hur du ändrar åtkomstnivån för en blob med asynkrona API:er finns i Ändra en blobs åtkomstnivå asynkront.
Förutsättningar
- Azure-prenumeration – skapa en kostnadsfritt
- Azure Storage-konto – skapa ett lagringskonto
- Python 3.8+
Konfigurera din miljö
Om du inte har ett befintligt projekt visar det här avsnittet hur du konfigurerar ett projekt för att arbeta med Azure Blob Storage-klientbiblioteket för Python. Mer information finns i Kom igång med Azure Blob Storage och Python.
Följ de här stegen för att konfigurera projektet om du vill arbeta med kodexemplen i den här artikeln.
Installera paket
Installera följande paket med :pip install
pip install azure-storage-blob azure-identity
Lägga till importinstruktioner
Lägg till följande import
-uttryck:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
BlobServiceClient,
BlobClient,
StandardBlobTier,
RehydratePriority
)
Auktorisering
Auktoriseringsmekanismen måste ha de behörigheter som krävs för att ange åtkomstnivån för en blob. För auktorisering med Microsoft Entra-ID (rekommenderas) behöver du den inbyggda rollen Storage Blob Data Contributor eller senare. Mer information finns i auktoriseringsvägledningen för Ange blobnivå.
Skapa ett klientobjekt
Om du vill ansluta en app till Blob Storage skapar du en instans av BlobServiceClient. I följande exempel visas hur du skapar ett klientobjekt med hjälp av DefaultAzureCredential
för auktorisering:
# 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)
Du kan också skapa klientobjekt för specifika containrar eller blobar, antingen direkt eller från objektet BlobServiceClient
. Mer information om hur du skapar och hanterar klientobjekt finns i Skapa och hantera klientobjekt som interagerar med dataresurser.
Om blockblobåtkomstnivåer
För att hantera kostnader för lagringsbehov kan det vara bra att organisera dina data baserat på hur ofta de används och hur länge de behöver behållas. Azure Storage erbjuder olika åtkomstnivåer så att du kan lagra dina blobdata på det mest kostnadseffektiva sättet baserat på hur de används.
Åtkomstnivåer för blobdata
Azure Storage-åtkomstnivåer omfattar:
- Frekvent nivå – en onlinenivå som är optimerad för att lagra data som används eller ändras ofta. Den frekventa nivån har de högsta lagringskostnaderna, men de lägsta åtkomstkostnaderna.
- Lågfrekvent nivå – en onlinenivå som är optimerad för lagring av data som sällan används eller ändras. Data på lågfrekvent nivå ska lagras i minst 30 dagar. Den lågfrekventa nivån har lägre lagringskostnader och högre åtkomstkostnader jämfört med den frekventa nivån.
- Kall nivå – en onlinenivå som är optimerad för lagring av data som inte används sällan eller ändras. Data på nivån Infrekvent ska lagras i minst 90 dagar. Den infrekventa åtkomstnivån har lägre lagringskostnader och högre åtkomstkostnader jämfört med lågfrekvent lagringsnivå.
- Arkivnivå – en offlinenivå som är optimerad för lagring av data som sällan används och som har flexibla svarstidskrav i timmar. Data på arkivnivån ska lagras i minst 180 dagar.
Mer information om åtkomstnivåer finns i Åtkomstnivåer för blobdata.
Även om en blob finns på arkivåtkomstnivån anses den vara offline och kan inte läsas eller ändras. För att kunna läsa eller ändra data i en arkiverad blob måste du först extrahera bloben till en onlinenivå. Mer information om hur du extraherar en blob från arkivnivån till en onlinenivå finns i Blob rehydrering från arkivnivån.
Begränsningar
Att ange åtkomstnivån tillåts endast för blockblobar. Mer information om begränsningar för att ange en blockblobs åtkomstnivå finns i Ange BLOB-nivå (REST API).
Kommentar
Om du vill ange åtkomstnivån till Cold
python måste du använda en lägsta klientbiblioteksversion på 12.15.0.
Ange åtkomstnivån för en blob under uppladdningen
Du kan ange åtkomstnivån för en blob vid uppladdning genom att skicka nyckelordsargumentet standard_blob_tier
till upload_blob eller upload_blob_from_url.
Följande kodexempel visar hur du anger åtkomstnivån när du laddar upp en 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)
Mer information om hur du laddar upp en blob med Python finns i Ladda upp en blob med Python.
Ändra åtkomstnivån för en befintlig blockblob
Du kan ändra åtkomstnivån för en befintlig blockblob med hjälp av följande funktion:
Följande kodexempel visar hur du ändrar åtkomstnivån för en befintlig blob till 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)
Om du extraherar en arkiverad blob kan du skicka nyckelordsargumentet rehydrate_priority
som HIGH
eller STANDARD
.
Kopiera en blob till en annan åtkomstnivå
Du kan ändra åtkomstnivån för en befintlig blockblob genom att ange en åtkomstnivå som en del av en kopieringsåtgärd. Om du vill ändra åtkomstnivån under en kopieringsåtgärd skickar du nyckelordsargumentet standard_blob_tier
till start_copy_from_url. Om du extraherar en blob från arkivnivån med hjälp av en kopieringsåtgärd kan du skicka nyckelordsargumentet rehydrate_priority
som HIGH
eller STANDARD
.
I följande kodexempel visas hur du extraherar en arkiverad blob till Hot
nivån med hjälp av en kopieringsåtgärd:
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)
Mer information om hur du kopierar en blob med Python finns i Kopiera en blob med Python.
Ändra åtkomstnivån för en blob asynkront
Azure Blob Storage-klientbiblioteket för Python har stöd för att ändra en blobs åtkomstnivå asynkront. Mer information om krav för projektkonfiguration finns i Asynkron programmering.
Följ dessa steg för att ändra åtkomstnivån för en blob med asynkrona API:er:
Lägg till följande importinstruktioner:
import asyncio from azure.storage.blob import ( StandardBlobTier ) from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import ( BlobServiceClient, BlobClient )
Lägg till kod för att köra programmet med .
asyncio.run
Den här funktionen kör den skickade coroutinenmain()
i vårt exempel och hanterar händelseloopenasyncio
. Coroutines deklareras med syntaxen async/await. I det här exempletmain()
skapar coroutine först den översta nivånBlobServiceClient
med ochasync with
anropar sedan metoden som ändrar blobens åtkomstnivå. Observera att endast klienten på den översta nivån behöver användaasync with
, eftersom andra klienter som skapats från den delar samma anslutningspool.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())
Lägg till kod för att ändra blobens åtkomstnivå. Koden är samma som det synkrona exemplet, förutom att metoden deklareras med nyckelordet
async
och nyckelordetawait
används när metoden anropasset_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)
Med den här grundläggande konfigurationen på plats kan du implementera andra exempel i den här artikeln som coroutines med hjälp av async/await-syntax.
Resurser
Mer information om hur du anger åtkomstnivåer med hjälp av Azure Blob Storage-klientbiblioteket för Python finns i följande resurser.
REST API-åtgärder
Azure SDK för Python innehåller bibliotek som bygger på Azure REST API så att du kan interagera med REST API-åtgärder via välbekanta Python-paradigm. Klientbiblioteksmetoderna för att ange åtkomstnivåer använder följande REST API-åtgärd:
- Ange blobnivå (REST API)