Gérer des conteneurs de blobs avec Azure CLI

Stockage Blob Microsoft Azure vous permet de stocker de grandes quantités de données d’objet non structurées. Vous pouvez utiliser le Stockage Blob pour collecter ou exposer des données multimédias, de contenu ou d’application aux utilisateurs. Étant donné que toutes les données blob sont stockées dans des conteneurs, vous devez créer un conteneur de stockage avant de commencer à charger des données. Pour en savoir plus sur le Stockage Blob, lisez Présentation du Stockage Blob Azure.

Azure CLI est l’expérience de lignes de commande multiplateforme d’Azure pour la gestion de ressources Azure. Vous pouvez l’utiliser dans votre navigateur avec Azure Cloud Shell. Vous pouvez également l’installer sur macOS, Linux ou Windows, et l’exécuter à partir de la ligne de commande.

Dans cet article pratique, vous allez découvrir comment utiliser Azure CLI avec Bash pour utiliser des objets de conteneur.

Prérequis

Pour accéder à Stockage Azure, vous avez besoin d’un abonnement Azure. Si vous n’avez pas d’abonnement, vous pouvez créer un compte gratuit avant de commencer.

Tous les accès à Stockage Azure se font via un compte de stockage. Pour ce guide de démarrage rapide, créez un compte de stockage à l’aide du portail Azure, d’Azure PowerShell ou de l’interface Azure CLI. Pour obtenir de l’aide sur la création d’un compte de stockage, consultez Créer un compte de stockage.

Préparation de votre environnement pour Azure CLI

  • Il est toujours bon d’installer la dernière version d’Azure CLI. Si vous utilisez Azure Cloud Shell, la version la plus récente est déjà installée.

Autoriser l’accès au stockage Blob

Vous pouvez autoriser l’accès au stockage Blob à partir d’Azure CLI avec des informations d’identification Microsoft Entra ou en utilisant la clé d’accès au compte de stockage. L’utilisation des informations d’identification Microsoft Entra est recommandée et les exemples de cet article utilisent exclusivement Microsoft Entra ID.

Les commandes Azure CLI pour les opérations de données sur le stockage Blob prennent en charge le paramètre --auth-mode, qui vous permet de spécifier la façon dont une opération donnée est autorisée. Définissez le paramètre --auth-mode sur login pour autoriser l’accès avec les informations d’identification Microsoft Entra. Pour plus d’informations, consultez Autoriser l’accès aux données d’objet blob et de file d’attente avec Azure CLI.

Exécutez la commande login pour ouvrir un navigateur et vous connecter à votre abonnement Azure.

az login

Créez un conteneur.

aPour créer un conteneur avec Azure CLI, appelez la commande az storage container create. L’exemple suivant illustre trois options pour la création de conteneurs de blob avec la commande az storage container create. La première approche crée un conteneur unique, tandis que les deux autres tirent parti des opérations de scripts Bash pour automatiser la création de conteneurs.

Pour utiliser cet exemple, fournissez des valeurs pour les variables et assurez-vous que vous êtes connecté. N’oubliez pas de remplacer les valeurs d’espace réservé entre crochets par vos propres valeurs.

#!/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

Répertorier les conteneurs

Utilisez la commande az storage container list pour récupérer une liste de conteneurs de stockage. Pour renvoyer une liste de conteneurs dont le nom commence par une chaîne de caractères donnée, transmettez cette chaîne en tant que valeur du paramètre --prefix.

Le paramètre --num-results peut être utilisé pour limiter le nombre de conteneurs renvoyés par la demande. Le stockage Azure limite le nombre de conteneurs renvoyés par une seule opération de listing à 5 000. Cette limite garantit que des quantités gérables de données sont récupérées. Si le nombre de conteneurs renvoyés dépasse la valeur --num-results ou la limite de service, un jeton de continuation est renvoyé. Ce jeton vous permet d’utiliser plusieurs requêtes pour récupérer n’importe quel membre de conteneurs.

Vous pouvez également utiliser le paramètre --query pour exécuter une requête JMESPath sur les résultats des commandes. JMESPath est un langage de requête pour JSON qui vous permet de sélectionner et de modifier les données renvoyées à partir d’une sortie CLI. Les requêtes sont exécutées sur la sortie JSON, avant toute mise en forme. Pour plus d’informations, consultez Comment interroger une sortie de commande Azure CLI à l’aide d’une requête JMESPath.

L’exemple suivant répertorie d’abord le nombre maximal de conteneurs (soumis à la limite de service). Ensuite, il répertorie trois conteneurs dont le nom commence par le préfixe conteneur- en fournissant des valeurs pour les paramètres --num-results et --prefix. Enfin, un seul conteneur est répertorié en fournissant un nom de conteneur connu au paramètre --prefix.

En savoir plus sur la liste de conteneurs de stockage az.

#!/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

Lire les métadonnées et les propriétés de conteneur

Un conteneur expose à la fois les propriétés système et les métadonnées définies par l’utilisateur. Des propriétés système existent sur chaque ressource de stockage blob. Certaines propriétés sont en lecture seule, d’autres peuvent être lues ou définies. En arrière-plan, certaines propriétés système correspondent à certains en-têtes HTTP standard.

Ces métadonnées définies par l’utilisateur se composent d’une ou plusieurs paires nom-valeur, que vous spécifiez pour une ressource de stockage blob. Vous pouvez les utiliser pour stocker des valeurs supplémentaires avec la ressource. Les valeurs de métadonnées sont destinées à votre usage personnel et n’affectent pas le comportement de la ressource.

Propriétés de conteneur

Pour afficher les propriétés d’un conteneur avec Azure CLI, appelez la commande Afficher la commande az storage container show .

Dans l’exemple suivant, la première approche affiche les propriétés d’un conteneur nommé unique. L’exemple suivant récupère tous les conteneurs avec le préfixe demo-conteneur- et itère à travers la liste en répertoriant leurs propriétés. Remplacez les valeurs d’espace réservé par vos propres valeurs.

#!/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

Métadonnées de conteneur de lecture et d’écriture

Les utilisateurs qui ont plusieurs milliers d’objets dans leur compte de stockage peuvent rapidement localiser des conteneurs spécifiques en fonction de leurs métadonnées. Pour lire les métadonnées, vous devez utiliser la commande az storage container metadata show. Pour mettre à jour des métadonnées, vous devez appeler la commande az storage container metadata update. La méthode accepte uniquement les paires clé-valeur séparées par un espace. Pour plus d’informations, consultez la documentation métadonnées de conteneurs de stockage az.

Le premier exemple ci-dessous met à jour, puis récupère les métadonnées d’un conteneur nommé. Le deuxième exemple itérera la liste des conteneurs correspondant à la valeur -prefix. Les conteneurs dont le nom contient des nombres pairs ont leurs métadonnées définies avec des valeurs contenues dans la variable métadonnées.

#!/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

Supprimer des conteneurs

En fonction de votre cas d’usage, vous pouvez supprimer un conteneur unique ou une liste de conteneurs avec la commandeaz storage container delete. Lors de la suppression d’une liste de conteneurs, vous devez utiliser les opérations conditionnelles comme dans les exemples ci-dessous.

Avertissement

L’exécution des exemples suivants peut supprimer définitivement des conteneurs et des blobs. Microsoft recommande d’activer la suppression réversible de conteneurs afin de protéger les conteneurs et les blobs contre les suppressions accidentelles. Pour plus d’informations, consultez Suppression réversible de conteneurs.

#!/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 la suppression réversible de conteneurs est activée pour votre compte de stockage, il est possible alors de récupérer des conteneurs qui ont été supprimés. Si l’option de protection des données avec la suppression réversible de votre compte de stockage est activée, le paramètre --include-deleted retourne les conteneurs supprimés pendant la période de rétention associée. Le paramètre --include-deleted ne peut être utilisé que pour renvoyer des conteneurs en cas d’utilisation avec le paramètre --prefix. Pour en savoir plus sur la suppression réversible, reportez-vous à l’article sur la Suppression réversible des conteneurs.

Utilisez l’exemple suivant pour récupérer une liste de conteneurs supprimés pendant la période de rétention associée au compte de stockage.

#!/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

Restaurer un conteneur supprimé de manière réversible

Comme indiqué dans la section Conteneurs de listes, vous pouvez configurer l’option de protection des données avec la suppression réversible sur votre compte de stockage. Lorsque vous l’activez, il est possible de restaurer des conteneurs supprimés pendant la période de rétention associée. Pour pouvoir suivre cet exemple, vous devez activer la suppression réversible et la configurer sur au moins un de vos comptes de stockage.

L’exemple suivant explique comment restaurer un conteneur supprimé par suppression réversible avec la commande az storage container restore. Vous devrez fournir des valeurs pour les paramètres --name et --version pour vous assurer que la version correcte du conteneur est restaurée. Si vous ne connaissez pas le numéro de version, vous pouvez utiliser la commande az storage container list pour le récupérer, comme illustré dans le premier exemple. Le deuxième exemple recherche et restaure tous les conteneurs supprimés dans un compte de stockage spécifique.

Pour en savoir plus sur l’option de protection des données avec la suppression réversible, reportez-vous à l’article Suppression réversible pour les conteneurs.

#!/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

Obtenir une signature d’accès partagé pour un conteneur

Une signature d’accès partagé (SAP) offre un accès délégué aux ressources Azure. Une SAP vous donne un contrôle granulaire sur la manière dont un client peut accéder à vos données. Par exemple, vous pouvez spécifier les ressources disponibles pour le client. Vous pouvez également limiter les types d’opérations que le client peut effectuer et spécifier l’intervalle sur lequel la SAP est valide.

Une signature d’accès partagé (SAP) est généralement utilisée pour fournir un accès temporaire et sécurisé à un client qui n’a normalement pas les autorisations. Pour générer un service ou un compte SAP, vous devez fournir des valeurs pour les paramètres --account-name et --account-key. Ce scénario peut être, par exemple, un service qui permet aux utilisateurs de lire et d’écrire leurs propres données sur votre compte de stockage.

Stockage Azure prend en charge trois types de signatures d’accès partagé : SAP de délégation d’utilisateur, de service et de compte. Pour plus d’informations sur les signatures d’accès partagé, consultez l’article Accorder un accès limité aux ressources du Stockage Azure à l’aide des signatures d’accès partagé.

Attention

Tout client disposant d’une SAP valide peut accéder aux données de votre compte de stockage tel qu’autorisé par cette SAP. Il est important de protéger une SAP contre toute utilisation malveillante ou involontaire. Faites preuve de discrétion lors de la distribution d’une SAP et mettez en place un plan de révocation d’une SAS compromis.

L’exemple suivant illustre le processus de configuration d’une SAP de service pour un conteneur spécifique à l’aide de la commande az storage container generate-sas. Étant donné qu’il génère un service SAP, l’exemple récupère d’abord la clé de compte de stockage à transmettre comme valeur --account-key.

L’exemple configure la SAP avec les heures de début et d’expiration et un protocole. Il spécifiera également les autorisations supprimer, lire, écrire et répertorier dans la SAP à l’aide du paramètre --permissions. Vous pouvez consulter la table complète des autorisations dans l’article Créer une SAP.

Copiez et collez la valeur du jeton SAP blob en lieu sûr. Elle ne s’affiche qu’une seule fois et ne peut pas être récupérée une fois Bash fermé. Pour construire une URL de la signature d’accès partagé, ajoutez le jeton SAP (URI) à l’URL d’un service de stockage.

#!/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

Notes

Le jeton SAP retourné par le Azure CLI n’inclut pas le caractère délimiteur (« ? ») pour la chaîne de requête d’URL. Si vous ajoutez le jeton SAP à une URL de ressource, n’oubliez pas d’ajouter le caractère délimiteur à l’URL de ressource avant d’ajouter le jeton SAP.

Étapes suivantes

Dans cet article de procédure, vous avez appris à gérer des conteneurs dans Stockage blob. Pour en savoir plus sur l’utilisation du stockage blob avec Azure CLI, sélectionnez une option ci-dessous.