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

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:

  1. 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
    )
    
  2. Aggiungere il codice per eseguire il programma utilizzando asyncio.run. Questa funzione esegue la coroutine passata, main() nell'esempio, e gestisce il ciclo di eventi asyncio. Le coroutine vengono dichiarate con la sintassi async/await. In questo esempio, la main() coroutine crea prima il primo livello BlobServiceClient usando async with, quindi chiama il metodo che modifica il livello di accesso del BLOB. Si noti che soltanto il client di primo livello deve utilizzare async 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())
    
  3. 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 metodo set_standard_blob_tier si utilizza la parola chiave await.

    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:

Risorse della libreria client

Esempi di codice

Vedi anche