Establecimiento o cambio del nivel de acceso de un blob en bloques con Python
Este artículo muestra cómo establecer o cambiar el nivel de acceso de un blob en bloques con la biblioteca cliente de Azure Storage para Python.
Para saber más sobre cómo cambiar el nivel de acceso de un blob mediante API asincrónicas, consulte Cambio del nivel de acceso de un blob de forma asincrónica.
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita
- Una cuenta de Azure Storage: cree una cuenta de almacenamiento
- Python 3.8 y versiones posteriores
Configurar el entorno
Si no tiene un proyecto existente, en esta sección se muestra cómo configurar uno para que funcione con la biblioteca cliente de Azure Blob Storage para Python. Para más información, vea Introducción a Azure Blob Storage y Python.
Para trabajar con los ejemplos de código de este artículo, siga los pasos siguientes a fin de configurar el proyecto.
Instalar paquetes
Instale los siguientes paquetes mediante pip install
:
pip install azure-storage-blob azure-identity
Adición de instrucciones import
Agregue las instrucciones siguientes import
:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
BlobServiceClient,
BlobClient,
StandardBlobTier,
RehydratePriority
)
Authorization
El mecanismo de autorización debe tener los permisos necesarios para actualizar un blob. Para la autorización con Microsoft Entra ID (recomendado) se necesita el rol integrado de RBAC de Azure de Colaborador de datos de Storage Blob o superior. Para más información, consulte la guía de autorización para Set Blob Tier.
Creación de un objeto de cliente
Para conectar una aplicación a Blob Storage, cree una instancia de BlobServiceClient. En el ejemplo siguiente se muestra cómo crear un objeto de cliente mediante DefaultAzureCredential
para la autorización:
# 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)
También puede crear objetos de cliente para contenedores o blobs específicos ya sea directamente o desde el objeto BlobServiceClient
. Para obtener más información sobre cómo crear y administrar objetos de cliente, consulte Crear y administrar objetos de cliente que interactúan con los recursos de datos.
Acerca de los niveles de acceso de blobs en bloques
Para administrar los costes de las necesidades de almacenamiento, podría resultar útil organizar los datos en función de la frecuencia con la que se acceda a ellos y del tiempo que se conserven. Azure Storage ofrece diferentes niveles de acceso para que pueda almacenar los datos de blobs de la manera más rentable en función de cómo se usen.
Niveles de acceso frecuente, esporádico y de archivo para los datos de blobs
Los niveles de acceso de Azure Storage incluyen:
- Nivel de acceso frecuente: nivel en línea optimizado para almacenar datos a los que se accede o se modifican con frecuencia. El nivel de acceso frecuente tiene los costos de almacenamiento más altos, pero los costos de acceso más bajos.
- Nivel de acceso esporádico: nivel en línea optimizado para almacenar datos a los que se accede o se modifican con poca frecuencia. Los datos del nivel de acceso esporádico se deben almacenar durante un mínimo de 30 días. El nivel de acceso esporádico tiene menores costos de almacenamiento y mayores costos de acceso en comparación con el nivel de acceso frecuente.
- Nivel de acceso esporádico: nivel en línea optimizado para almacenar datos a los que se accede o se modifican con poca frecuencia. Los datos del nivel de acceso esporádico se deben almacenar durante un mínimo de 90 días. El nivel de acceso esporádico tiene menores costes de almacenamiento y mayores costes de acceso en comparación con el nivel de acceso esporádico.
- Nivel de acceso de archivo: nivel sin conexión optimizado para almacenar datos a los que se accede muy pocas veces y que tienen requisitos de latencia flexibles, p. ej., horas. Los datos del nivel de acceso de archivo se deben almacenar durante un mínimo de 180 días.
Si desea obtener más información sobre los niveles de acceso, consulte Niveles de acceso para los datos de blobs.
Mientras un blob se encuentra en el nivel de acceso de archivo, se considera que está sin conexión y no se puede leer ni modificar. Para leer o modificar los datos de un blob archivado, primero debe rehidratar el blob en un nivel en línea. Para obtener más información sobre la rehidratación de un blob del nivel de archivo a un nivel en línea, consulte Rehidratación de blobs desde el nivel de archivo.
Restricciones
Solo se permite establecer el nivel de acceso en los blobs en bloques. Para más información sobre las restricciones sobre cómo establecer el nivel de acceso de un blob en bloques, consulte Establecimiento del nivel de blob (API de REST).
Nota
Para establecer el nivel de acceso en Cold
con Python, debe usar la versión mínima de la biblioteca cliente: versión 12.15.0.
Establecimiento del nivel de acceso de un blob durante la carga
Puede establecer el nivel de acceso de un blob al cargar pasando el argumento de palabra clave standard_blob_tier
a upload_blob o upload_blob_from_url.
En el ejemplo de código siguiente se muestra cómo establecer el nivel de acceso al cargar 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)
Para más información sobre cómo cargar un blob con Python, consulte Carga de un blob con Python.
Cambio del nivel de acceso de un blob en bloques existente
Puede cambiar el nivel de acceso de un blob en bloques existente mediante la siguiente función:
En el ejemplo de código siguiente se muestra cómo cambiar el nivel de acceso de un blob existente a 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)
Si va a rehidratar un blob archivado, puede pasar opcionalmente el argumento de palabra clave rehydrate_priority
como HIGH
o STANDARD
.
Copia de un blob en otro nivel de acceso
Puede cambiar el nivel de acceso de un blob en bloques existente especificando un nivel de acceso como parte de una operación de copia. Para cambiar el nivel de acceso durante una operación de copia, pase el argumento de palabra clave standard_blob_tier
a start_copy_from_url. Si va a rehidratar un blob desde el nivel de archivo mediante una operación de copia, opcionalmente puede pasar el argumento de palabra clave rehydrate_priority
como HIGH
o STANDARD
.
En el ejemplo de código siguiente se muestra cómo rehidratar un blob archivado en el nivel Hot
mediante una operación de 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)
Para más información sobre cómo copiar un blob con Python, consulte Copia de un blob con Python.
Cambiar el nivel de acceso de un blob de forma asincrónica
La biblioteca cliente de Azure Blob Storage para Python admite el cambio asincrónico del nivel de acceso de un blob. Para obtener más información sobre los requisitos de configuración del proyecto, consulte Programación asincrónica.
Siga estos pasos para cambiar el nivel de acceso de un blob mediante las API asincrónicas:
Agregue las siguientes instrucciones import:
import asyncio from azure.storage.blob import ( StandardBlobTier ) from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import ( BlobServiceClient, BlobClient )
Agregue código para ejecutar el programa mediante
asyncio.run
. Esta función ejecuta la corrutina pasada,main()
en nuestro ejemplo, y administra el bucle de eventosasyncio
. Las corrutinas se declaran con la sintaxis async/await. En este ejemplo, la corrutinamain()
crea primero el nivel superiorBlobServiceClient
usandoasync with
, y a continuación, llama al método que cambia el nivel de acceso del blob. Tenga en cuenta que solo el cliente de nivel superior debe usarasync with
, ya que otros clientes creados a partir de él comparten el mismo grupo de conexiones.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())
Agregue código para cambiar el nivel de acceso del blob. El código es el mismo que el ejemplo sincrónico, salvo que el método se declara con la palabra clave
async
y la palabra claveawait
se usa al llamar al métodoset_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)
Con esta configuración básica, puede implementar otros ejemplos de este artículo como corrutinas mediante la sintaxis async/await.
Recursos
Para obtener más información sobre cómo configurar niveles de acceso con la biblioteca cliente de Azure Blob Storage para Python, consulte los recursos siguientes.
Operaciones de API REST
El SDK de Azure para Python contiene bibliotecas que se crean a partir de la API REST de Azure, lo que le permite interactuar con las operaciones de API REST a través de paradigmas conocidos de Python. Los métodos de la biblioteca cliente para configurar niveles de acceso usan esta operación de API REST:
- Set Blob Tier (API de REST)
Recursos de la biblioteca cliente
- Documentación de referencia de la biblioteca cliente
- Código fuente de la biblioteca del cliente
- Paquete (PyPi)
Ejemplos de código
- Ver ejemplo de código sincrónicos o asincrónicos de este artículo (GitHub)