Impostare o modificare il livello di accesso di un BLOB in blocchi con Python
Questo articolo illustra come impostare o modificare il livello di accesso per un BLOB in blocchi usando la libreria client Archiviazione di Azure per Python.
Per informazioni sulla modifica del livello di accesso di un BLOB tramite LE API asincrone, vedere Modificare il livello di accesso di un BLOB in modo asincrono.
Prerequisiti
- Sottoscrizione di Azure: creare un account gratuito
- Account di archiviazione di Azure: creare un account di archiviazione
- Python 3.8+
Configurazione dell'ambiente
Se non si dispone di un progetto esistente, questa sezione illustra come configurare un progetto per l’uso con la libreria client di Archiviazione BLOB di Azure per Python. Per altre informazioni, vedere Introduzione ad Archiviazione BLOB di Azure e Python.
Per usare gli esempi di codice in questo articolo, seguire questa procedura per configurare il progetto.
Installare i pacchetti
Installare i pacchetti seguenti tramite pip install
:
pip install azure-storage-blob azure-identity
Aggiungere le istruzioni di importazione
Aggiungere le istruzioni import
seguenti:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
BlobServiceClient,
BlobClient,
StandardBlobTier,
RehydratePriority
)
Autorizzazione
Il meccanismo di autorizzazione deve disporre delle autorizzazioni necessarie per impostare un livello di accesso del BLOB. Per l'autorizzazione con Microsoft Entra ID (scelta consigliata), è necessario disporre del ruolo predefinito di Controllo degli accessi in base al ruolo di Azure Collaboratore ai dati del BLOB di archiviazione o ruolo superiore. Per altre informazioni, vedere le indicazioni sulle autorizzazioni per Impostare un livello di BLOB.
Creare un oggetto client
Per connettere un'app ad Archiviazione BLOB, creare un'istanza di BlobServiceClient. Nell'esempio seguente viene illustrato come creare un oggetto client usando DefaultAzureCredential
per l'autorizzazione:
# 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)
È anche possibile creare oggetti client per contenitori o BLOB specifici, direttamente o dall'oggetto BlobServiceClient
. Per altre informazioni sulla creazione e la gestione di oggetti client, vedere Creare e gestire oggetti client che interagiscono con le risorse dati.
Informazioni sui livelli di accesso blob in blocchi
Per gestire i costi per le esigenze di archiviazione, può essere utile organizzare i dati in base alla frequenza di accesso e alla durata della conservazione. Archiviazione di Azure offre livelli di accesso diversi in modo da poter archiviare i dati BLOB nel modo più conveniente in base all'utilizzo.
Livelli di accesso per i dati BLOB
I livelli di accesso di Archiviazione di Azure includono:
- Livello di accesso frequente: livello online ottimizzato per l'archiviazione dei dati a cui si accede o che vengono modificati di frequente. Il livello di accesso frequente ha i costi di archiviazione più elevati, ma i costi di accesso più bassi.
- Livello di accesso sporadico: livello online ottimizzato per l'archiviazione dei dati a cui si accede o che vengono modificati non di frequente. I dati nel livello di accesso sporadico devono rimanere archiviati per almeno 30 giorni. Il livello di accesso sporadico presenta costi di archiviazione più bassi e costi di accesso più alti rispetto al livello di accesso frequente.
- Livello di accesso sporadico: livello online ottimizzato per l'archiviazione dei dati a cui si accede o che vengono modificati non di frequente. I dati nel livello di accesso saltuario devono rimanere archiviati per almeno 90 giorni. Il livello di accesso saltuario presenta costi di archiviazione più bassi e costi di accesso più alti rispetto al livello di accesso frequente.
- Livello di accesso archivio: livello offline ottimizzato per l'archiviazione dei dati a cui si accede raramente e che prevede requisiti di latenza flessibili, nell'ordine di ore. I dati che si trovano nel livello archivio devono rimanere archiviati per almeno 180 giorni.
Per altre informazioni sui livelli di accesso, vedere Livelli di accesso per i dati BLOB.
Quando un BLOB si trova nel livello di accesso archivio, viene considerato offline e non può essere letto o modificato. Per leggere o modificare i dati in un BLOB archiviato, è prima necessario riattivare il BLOB in un livello online. Per altre informazioni sulla riattivazione di un BLOB dal livello Archivio a un livello online, vedere Riattivazione blob dal livello Archivio.
Restrizioni
L'impostazione del livello di accesso è consentita solo per i BLOB in blocchi. Per altre informazioni sulle restrizioni relative all'impostazione del livello di accesso di un BLOB in blocchi, vedere Impostare il livello BLOB (API REST).
Nota
Per impostare il livello di accesso su Cold
usando Python, è necessario usare una versione minima della libreria client 12.15.0.
Impostare il livello di accesso di un BLOB durante il caricamento
È possibile impostare il livello di accesso di un BLOB al caricamento passando l'argomento standard_blob_tier
parola chiave a upload_blob o upload_blob_from_url.
L'esempio di codice seguente illustra come impostare il livello di accesso durante il caricamento di un 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)
Per altre informazioni sul caricamento di un BLOB con Python, vedere Caricare un BLOB con Python.
Modificare il livello di accesso per un BLOB in blocchi esistente
È possibile modificare il livello di accesso di un BLOB in blocchi esistente usando la funzione seguente:
L’esempio di codice seguente illustra come modificare il livello di accesso per un BLOB esistente in 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)
Se si riattiva un BLOB archiviato, è possibile passare facoltativamente l'argomento rehydrate_priority
parola chiave come HIGH
o STANDARD
.
Copiare un BLOB in un livello di accesso diverso
È possibile modificare il livello di accesso di un BLOB in blocchi esistente specificando un livello di accesso come parte di un'operazione di copia. Per modificare il livello di accesso durante un'operazione di copia, passare l'argomento standard_blob_tier
della parola chiave a start_copy_from_url. Se si riattiva un BLOB dal livello archivio usando un'operazione di copia, è possibile passare facoltativamente l'argomento rehydrate_priority
parola chiave come HIGH
o STANDARD
.
L’esempio di codice seguente illustra come riattivare un BLOB archiviato nel livello Hot
usando un’operazione di copia:
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)
Per altre informazioni sulla copia di un BLOB con Python, vedere Copiare un BLOB con Python.
Modificare il livello di accesso di un BLOB in modo asincrono
La libreria client Archiviazione BLOB di Azure per Python supporta la modifica asincrona del livello di accesso di un BLOB. Per altre informazioni sui requisiti di configurazione del progetto, consultare Programmazione asincrona.
Seguire questa procedura per modificare il livello di accesso di un BLOB usando le API asincrone:
Aggiungere le seguenti istruzioni Import:
import asyncio from azure.storage.blob import ( StandardBlobTier ) from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import ( BlobServiceClient, BlobClient )
Aggiungere il codice per eseguire il programma utilizzando
asyncio.run
. Questa funzione esegue la coroutine passata,main()
nell'esempio, e gestisce il ciclo di eventiasyncio
. Le coroutine vengono dichiarate con la sintassi async/await. In questo esempio, lamain()
coroutine crea prima il primo livelloBlobServiceClient
usandoasync with
, quindi chiama il metodo che modifica il livello di accesso del BLOB. Si noti che soltanto il client di primo livello deve utilizzareasync with
, poiché gli altri client da esso creati condividono lo stesso pool di connessioni.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())
Aggiungere il codice per modificare il livello di accesso del BLOB. Il codice è uguale a quello dell'esempio sincrono, a eccezione del fatto che il metodo viene dichiarato con la parola chiave
async
e che quando si richiama il metodoset_standard_blob_tier
si utilizza la parola chiaveawait
.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)
Con questa configurazione di base, è possibile implementare altri esempi in questo articolo come coroutine usando la sintassi async/await.
Risorse
Per altre informazioni sull'impostazione dei livelli di accesso tramite la libreria client Archiviazione BLOB di Azure per Python, vedere le risorse seguenti.
Operazioni dell'API REST
Azure SDK per Python contiene librerie basate su API REST di Azure che consentono di interagire con le operazioni API REST tramite paradigmi Python noti. I metodi della libreria client per impostare i livelli di accesso usano l'operazione API REST seguente:
- Impostare il livello BLOB (API REST)
Risorse della libreria client
- Documentazione di riferimento della libreria client
- Codice sorgente della libreria client
- Pacchetto (PyPi)