Creación de un contenedor de blobs con Python
Los blobs de Azure Storage se organizan en contenedores. Antes de poder cargar un blob, primero debe crear un contenedor. En este artículo se muestra cómo crear contenedores con la biblioteca cliente de Azure Storage para Python.
Para obtener información acerca de cómo crear contenedores de blobs mediante API asincrónicas, consulte Creación de un contenedor 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.core.exceptions import ResourceExistsError
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
Authorization
El mecanismo de autorización debe tener los permisos necesarios para crear un contenedor. 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 obtener más información, consulte la guía de autorización para Crear contenedor (API de REST).
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 la nomenclatura de contenedores
Un nombre de contenedor debe ser un nombre DNS válido, ya que forma parte del URI único que se usa para direccionar el contenedor o sus blobs. Siga estas reglas al asignar un nombre a un contenedor:
- Los nombres de contenedor pueden tener entre 3 y 63 caracteres.
- Los nombres de contenedor deben comenzar por una letra o un número, y solo pueden contener letras en minúscula, números y el carácter de guión (-).
- Los guiones consecutivos no están permitidos en los nombres de contenedores.
El URI de un recurso contenedor tiene el siguiente formato:
https://my-account-name.blob.core.windows.net/my-container-name
Crear un contenedor
Para crear un contenedor, llame al método siguiente desde la clase BlobServiceClient:
También puede crear un contenedor mediante el método siguiente a partir de la clase ContainerClient:
Los contenedores se crean inmediatamente debajo de la cuenta de almacenamiento. No es posible anidar un contenedor debajo de otro. Se genera una excepción si ya existe un contenedor con el mismo nombre.
En el ejemplo siguiente se crea un contenedor desde un objeto BlobServiceClient
:
def create_blob_container(self, blob_service_client: BlobServiceClient, container_name):
try:
container_client = blob_service_client.create_container(name=container_name)
except ResourceExistsError:
print('A container with this name already exists')
Creación del contenedor raíz
Un contenedor raíz sirve como contenedor predeterminado para la cuenta de almacenamiento. Cada cuenta de almacenamiento puede tener un contenedor raíz, que se debe denominar $root. El contenedor raíz debe crearse o eliminarse explícitamente.
Puede hacer referencia a un blob almacenado en el contenedor raíz sin incluir el nombre del contenedor raíz. El contenedor raíz permite hacer referencia a un blob en el nivel superior de la jerarquía de la cuenta de almacenamiento. Por ejemplo, puede hacer referencia a un blob en el contenedor raíz de la siguiente manera:
https://accountname.blob.core.windows.net/default.html
En el ejemplo siguiente se crea un nuevo objeto ContainerClient
con el nombre del contenedor $root y, a continuación, se crea el contenedor si aún no existe en la cuenta de almacenamiento:
def create_blob_root_container(self, blob_service_client: BlobServiceClient):
container_client = blob_service_client.get_container_client(container="$root")
# Create the root container if it doesn't already exist
if not container_client.exists():
container_client.create_container()
Creación de un contenedor de forma asincrónica
La biblioteca cliente de Azure Blob Storage para Python admite la creación de un contenedor de blobs de forma asincrónica. Para obtener más información sobre los requisitos de configuración del proyecto, consulte Programación asincrónica.
Siga estos pasos para crear un contenedor mediante API asincrónicas:
Agregue las siguientes instrucciones import:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient from azure.core.exceptions import ResourceExistsError
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, el corrutinamain()
crea primero el nivel superiorBlobServiceClient
medianteasync with
, y a continuación, llama al método que crea el contenedor. 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 = ContainerSamples() # TODO: Replace <storage-account-name> with your 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: await sample.create_blob_container(blob_service_client, "sample-container") if __name__ == '__main__': asyncio.run(main())
Agregue código para crear un contenedor. 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étodocreate_container
.async def create_blob_container(self, blob_service_client: BlobServiceClient, container_name): try: container_client = await blob_service_client.create_container(name=container_name) except ResourceExistsError: print('A container with this name already exists')
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 crear un contenedor con la biblioteca cliente de Azure Blob Storage para Python, consulte los recursos siguientes.
Ejemplos de código
- Ver ejemplo de código sincrónicos o asincrónicos de este artículo (GitHub)
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 crear un contenedor usan esta operación de API REST:
- Create Container (API REST)
Recursos de la biblioteca cliente
- Documentación de referencia de la biblioteca cliente
- Código fuente de la biblioteca del cliente
- Paquete (PyPi)
Contenido relacionado
- Este artículo forma parte de la guía para desarrolladores de Blob Storage para Python. Para más información, consulte la lista completa de artículos de la guía para desarrolladores en Compilación de la aplicación de Python.