Compartir vía


Administración de contenedores de blobs mediante la CLI de Azure

Microsoft Azure Blob Storage Azure permite almacenar grandes cantidades de datos de objetos sin estructura. Blob Storage se puede usar para recopilar o exponer datos multimedia, de contenido o de aplicaciones a los usuarios. Como todos los datos de blob se almacenan en contenedores, debe crear un contenedor de almacenamiento antes de empezar a cargar datos. Para más información sobre Blob Storage, lea la introducción a Azure Blob Storage.

La CLI de Azure es la experiencia de línea de comandos multiplataforma de Azure para administrar los recursos de Azure. Puede utilizarlo en el explorador con Azure Cloud Shell. También puede instalarla en macOS, Linux o Windows y ejecutarla de forma local desde la línea de comandos.

En este artículo de procedimientos, aprenderá a usar la CLI de Azure con Bash para trabajar con objetos de contenedor.

Requisitos previos

Para acceder a Azure Storage, necesitará una suscripción de Azure. Si todavía no tiene una suscripción, cree una cuenta gratuita antes de empezar.

Todo el acceso a Azure Storage tiene lugar mediante una cuenta de almacenamiento. En este inicio rápido, cree una cuenta de almacenamiento con Azure Portal, Azure PowerShell o la CLI de Azure. Si necesita ayuda para crear una cuenta de almacenamiento, consulte Creación de una cuenta de almacenamiento.

Preparación del entorno para la CLI de Azure

  • Siempre es recomendable instalar la última versión de la CLI de Azure. Si usa Azure Cloud Shell, ya está instalada la versión más reciente.

Autorización del acceso al almacenamiento de blobs

Puede autorizar el acceso al almacenamiento de blobs desde la CLI de Azure con las credenciales de Microsoft Entra o con la clave de acceso de la cuenta de almacenamiento. Se recomienda utilizar credenciales de Microsoft Entra, y los ejemplos de este artículo utilizan Microsoft Entra ID exclusivamente.

Los comandos de la CLI de Azure para operaciones de datos en el almacenamiento de blobs admiten el parámetro --auth-mode, que permite especificar cómo se autoriza una operación determinada. Establezca el parámetro --auth-mode en login para autorizar con las credenciales de Microsoft Entra. Para más información, consulte el artículo en el que se explica cómo autorizar el acceso a los datos de blobs o colas con la CLI de Azure.

Ejecute el comando login para abrir un explorador y conectarse a su suscripción de Azure.

az login

Crear un contenedor

Para crear un contenedor con la CLI de Azure, llame al comando az storage container create. En el ejemplo siguiente se muestran tres opciones para la creación de contenedores de blobs con el comando az storage container create. El primer enfoque crea un único contenedor, mientras que los dos enfoques restantes aprovechan las operaciones de scripting de Bash para automatizar la creación de contenedores.

Para usar este ejemplo, proporcione valores para las variables y asegúrese de que ha iniciado sesión. No olvide reemplazar los valores del marcador de posición entre corchetes con sus propios valores.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
containerPrefix="demo-container-"

# Approach 1: Create a container
az storage container create \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# Approach 2: Create containers with a loop
for value in {2..5}
do
    az storage container create \
        --name $containerPrefix$value \
        --account-name $storageAccount \
        --auth-mode login
done

# Approach 3: Create containers by splitting multiple values
containerList="${containerPrefix}6 ${containerPrefix}7 ${containerPrefix}8"
for container in $containerList
do
    az storage container create \
        --name $container \
        --account-name $storageAccount \
        --auth-mode login
done

Enumerar contenedores

Use el comando az storage container list para recuperar una lista de contenedores de almacenamiento. Para devolver una lista de contenedores cuyos nombres comiencen con una cadena de caracteres determinada, pase la cadena como valor del parámetro --prefix.

El parámetro --num-results se puede usar para limitar el número de contenedores que devuelve la solicitud. Azure Storage limita el número de contenedores que devuelve una sola operación de lista a 5000. Este límite garantiza que se recuperen cantidades de datos manejables. Si el número de contenedores devueltos supera el valor --num-results o el límite de servicio, se devuelve un token de continuación. Este token le permite usar varias solicitudes para recuperar un número de contenedores cualquiera.

También puede usar el parámetro --query para ejecutar una consulta de JMESPath en los resultados de los comandos. JMESPath es un lenguaje de consulta para JSON que le permite seleccionar y modificar los datos devueltos en la salida de la CLI. Las consultas se ejecutan en la salida JSON antes de que se les pueda asignar un formato. Para más información, consulte Cómo consultar la salida de un comando de la CLI de Azure mediante una consulta JMESPath.

En el ejemplo siguiente se muestra en primer lugar el número máximo de contenedores (sujeto al límite de servicio). A continuación, se muestran tres contenedores cuyos nombres comienzan por el prefijo container- proporcionando valores para los parámetros --num-results y --prefix. Por último, se muestra un único contenedor proporcionando un nombre de contenedor conocido al parámetro --prefix.

Obtenga más información sobre el comando az storage container list.

#!/bin/bash
storageAccount="<storage-account>"
containerPrefix="demo-container-"
containerName="demo-container-1"
numResults="3"

# Approach 1: List maximum containers
az storage container list \
    --account-name $storageAccount \
    --auth-mode login

# Approach 2: List a defined number of named containers
az storage container list \
    --prefix $containerPrefix \
    --num-results $numResults \
    --account-name $storageAccount \
    --auth-mode login

# Approach 3: List an individual container
az storage container list \
    --prefix $containerPrefix \
    --query "[?name=='$containerName']" \
    --account-name $storageAccount \
    --auth-mode login

Metadatos y propiedades del contenedor de lectura

Un contenedor expone tanto las propiedades del sistema como los metadatos definidos por el usuario. En cada recurso de almacenamiento de blobs existen propiedades del sistema. Algunas propiedades son de solo lectura, mientras que otras se pueden leer o establecer. En segundo plano, algunas propiedades del sistema se asignan a ciertos encabezados HTTP estándar.

Los metadatos definidos por el usuario se componen de uno o más pares nombre-valor que se especifican para un recurso de almacenamiento de blobs. Puede usar metadatos para almacenar valores adicionales con el recurso. Los valores de metadatos se proporcionan para uso personal y no afectan a cómo se comporta el recurso.

Propiedades del contenedor

Para mostrar las propiedades de un contenedor con la CLI de Azure, llame al comando az storage container show.

En el ejemplo siguiente, el primer enfoque muestra las propiedades de un único contenedor con nombre. Posteriormente, se recuperan todos los contenedores con el prefijo demo-container- y se itera por ellos, y se muestran sus propiedades. Reemplace los valores del marcador de posición por los suyos propios.

#!/bin/bash
storageAccount="<storage-account>"
containerPrefix="demo-container-"
containerName="demo-container-1"

# Show a named container's properties
az storage container show \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# List several containers and show their properties
containerList=$(az storage container list \
    --query "[].name" \
    --prefix $containerPrefix \
    --account-name $storageAccount \
    --auth-mode login \
    --output tsv)

for row in $containerList
do
  tmpRow=$(echo $row | sed -e 's/\r//g')
  az storage container show --name $tmpRow --account-name $storageAccount --auth-mode login
done

Metadatos de contenedor de lectura y escritura

Los usuarios que tienen muchos miles de objetos dentro de su cuenta de almacenamiento pueden localizar rápidamente contenedores específicos en función de sus metadatos. Para leer los metadatos, usará el comando az storage container metadata show. Para actualizar los metadatos, tendrá que llamar al comando az storage container metadata update. Este método solo acepta pares de clave-valor separados por espacios. Para más información, consulte la documentación sobre el comando az storage container metadata.

El primer ejemplo siguiente actualiza y recupera los metadatos de un contenedor con nombre. El segundo ejemplo itera la lista de contenedores que coinciden con el valor -prefix. Los contenedores con nombres que contienen números pares tienen sus metadatos establecidos con valores contenidos en la variable metadata.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
containerPrefix="demo-container-"

# Create metadata string
metadata="key=value pie=delicious"

# Update named container metadata
az storage container metadata update \
    --name $containerName \
    --metadata $metadata \
    --account-name $storageAccount \
    --auth-mode login

# Display metadata
az storage container metadata show \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# Get list of containers
containerList=$(az storage container list \
    --query "[].name" \
    --prefix $containerPrefix \
    --account-name $storageAccount \
    --auth-mode login \
    --output tsv)

# Update and display metadata
for row in $containerList
do
  #Get the container's number
  tmpName=$(echo $row | sed -e 's/\r//g')
  if [ `expr ${tmpName: ${#containerPrefix}} % 2` == 0 ]
  then
    az storage container metadata update \
        --name $tmpName \
        --metadata $metadata \
        --account-name $storageAccount \
        --auth-mode login
    
    echo $tmpName

    az storage container metadata show \
    --name $tmpName \
    --account-name $storageAccount \
    --auth-mode login    
  fi
done

Eliminación de contenedores

En función del caso de uso, puede eliminar un único contenedor o un grupo de contenedores con el comando az storage container delete. Al eliminar una lista de contenedores, deberá usar operaciones condicionales como se indica en los ejemplos siguientes.

Advertencia

Ejecutar los siguientes ejemplos puede eliminar de forma permanente contenedores y blobs. Microsoft recomienda habilitar la eliminación temporal de contenedores para proteger los contenedores y blobs contra la eliminación accidental. Para más información, consulte Eliminación temporal para contenedores.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
containerPrefix="demo-container-"

# Delete a single named container
az storage container delete \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# Delete containers by iterating a loop
list=$(az storage container list \
    --query "[].name" \
    --prefix $containerPrefix \
    --account-name $storageAccount \
    --auth-mode login \
    --output tsv)
for row in $list
do
    tmpName=$(echo $row | sed -e 's/\r//g')
    az storage container delete \
    --name $tmpName \
    --account-name $storageAccount \
    --auth-mode login
done

Si tiene habilitada la eliminación temporal de contenedores para su cuenta de almacenamiento, es posible recuperar los contenedores que se han eliminado. Si la opción de protección de datos de eliminación temporal de su cuenta de almacenamiento está habilitada, el parámetro --include-deleted devolverá los contenedores eliminados dentro del período de retención asociado. El parámetro --include-deleted solo se puede usar para devolver contenedores cuando se usa con el parámetro --prefix. Para más información sobre la eliminación temporal, consulte el artículo Eliminación temporal para contenedores.

Use el ejemplo siguiente para recuperar una lista de los contenedores eliminados dentro del período de retención asociado a la cuenta de almacenamiento.

#!/bin/bash
storageAccount="<storage-account>"
containerPrefix="demo-container-"

# Retrieve a list of containers including those recently deleted
az storage container list \
    --prefix $containerPrefix \
    --include-deleted \
    --account-name $storageAccount\
    --auth-mode login

Restauración de un contenedor eliminado temporalmente

Tal como se mencionó en la sección Enumeración de contenedores, puede configurar la opción de protección de datos de eliminación temporal en su cuenta de almacenamiento. Cuando se habilita, se pueden restaurar los contenedores eliminados dentro del período de retención asociado. Para poder seguir este ejemplo, antes deberá habilitar la eliminación temporal y configurarla en al menos una de sus cuentas de almacenamiento.

En el ejemplo siguiente se explica cómo restaurar un contenedor eliminado temporalmente con el comando az storage container restore. Tendrá que proporcionar valores para los parámetros --name y --version para asegurarse de que se restaura la versión correcta del contenedor. Si no conoce el número de versión, puede usar el comando az storage container list para recuperarlo como se muestra en el primer ejemplo. El segundo ejemplo busca y restaura todos los contenedores eliminados dentro de una cuenta de almacenamiento específica.

Para más información sobre la opción de protección de datos de eliminación temporal, consulte el artículo Eliminación temporal para contenedores.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"

# Restore an individual named container
containerVersion=$(az storage container list \
    --account-name $storageAccount \
    --query "[?name=='$containerName'].[version]" \
    --auth-mode login \
    --output tsv \
    --include-deleted | sed -e 's/\r//g')

az storage container restore \
    --name $containerName \
    --deleted-version $containerVersion \
    --account-name $storageAccount \
    --auth-mode login

# Restore a list of deleted containers
containerList=$(az storage container list \
    --account-name $storageAccount \
    --include-deleted \
    --auth-mode login \
    --query "[?deleted].{name:name,version:version}" \
    -o json)

for row in $(echo "${containerList}" | jq -c '.[]' )
do
    tmpName=$(echo $row | jq -r '.name')
    tmpVersion=$(echo $row | jq -r '.version')
    az storage container restore \
        --account-name $storageAccount \
        --name $tmpName \
        --deleted-version $tmpVersion \
        --auth-mode login
done

Obtención de una firma de acceso compartido para un contenedor

Las firmas de acceso compartido (SAS) ofrecen acceso delegado a los recursos de Azure. Una SAS proporciona control granular sobre la forma en que un cliente puede acceder a los datos. Por ejemplo, puede especificar qué recursos están disponibles para el cliente. También puede limitar los tipos de operaciones que el cliente puede realizar y especificar el intervalo durante el cual la SAS es válida.

Una SAS se usa normalmente para proporcionar acceso temporal y seguro a un cliente que normalmente no tendría permisos. Para generar una SAS de servicio o cuenta, tendrá que proporcionar valores para los parámetros --account-name y --account-key. Un ejemplo de este escenario sería un servicio que permite a los usuarios leer y escribir sus propios datos en su cuenta de almacenamiento.

Azure Storage admite tres tipos de firmas de acceso compartido: delegación de usuarios, servicio y SAS de cuenta. Para más información sobre las firmas de acceso compartido, consulte el artículo Otorgar acceso limitado a recursos de Azure Storage con firmas de acceso compartido (SAS).

Precaución

Cualquier cliente que posea una SAS válida puede acceder a los datos de la cuenta de almacenamiento según lo permitido por esa SAS. Es importante proteger una SAS de uso malintencionado o no intencionado. Sea cauto al distribuir una SAS y tenga un plan para revocar una SAS en peligro.

En el ejemplo siguiente se ilustra el proceso de configuración de una SAS de servicio para un contenedor específico mediante el comando az storage container generate-sas. Dado que está generando una SAS de servicio, el ejemplo primero recupera la clave de cuenta de almacenamiento para pasarla como el valor --account-key.

El ejemplo configurará la SAS con las horas de inicio y expiración y un protocolo. También especificará los permisos de eliminación, lectura, escritura y enumeración de la SAS, mediante el parámetro --permissions. Puede hacer referencia a la tabla de permisos completa en el artículo Creación de una SAS de servicio.

Copie y pegue el valor del token de SAS del blob en una ubicación segura. Solo se mostrará una vez y no se podrá recuperar una vez que se cierre la ventana. Para construir la dirección URL de SAS, asocie el token de SAS (URI) a la dirección URL del servicio de almacenamiento.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
permissions="drwl"
expiry=`date -u -d "30 minutes" '+%Y-%m-%dT%H:%MZ'`

accountKey=$(az storage account keys list \
    --account-name $storageAccount \
    --query "[?permissions == 'FULL'].[value]" \
    --output tsv)

accountKey=$( echo $accountKey | cut -d' ' -f1 )
 
az storage container generate-sas \
    --name $containerName \
    --https-only \
    --permissions dlrw \
    --expiry $expiry \
    --account-key $accountKey \
    --account-name $storageAccount

Nota

El token de SAS devuelto por la CLI de Azure no incluye el carácter delimitador ("?") para la cadena de consulta de dirección URL. Si va a anexar el token de SAS a una dirección URL de recurso, recuerde anexar el carácter delimitador a la dirección URL del recurso antes de anexar el token de SAS.

Pasos siguientes

En este artículo de procedimientos ha aprendido a administrar contenedores en Blob Storage. Para más información sobre cómo trabajar con Blob Storage mediante la CLI de Azure, seleccione una de las siguientes opciones.