Gréer des objets blob de blocs avec Azure CLI

Stockage Blob prend en charge les objets blob de blocs, d’ajout et de pages. Les objets blob de blocs sont optimisés pour charger efficacement de grandes quantités de données. Les objets blob de blocs sont parfaits pour stocker des images, des documents et d’autres types de données qui ne sont pas soumis à des opérations de lecture et d’écriture aléatoires. Cet article explique comment travailler avec des objets blob de blocs.

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

  • Cet article nécessite la version 2.0.46 ou ultérieure de l’interface 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 une 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 connexion pour autoriser l’accès avec les informations d’identification Microsoft Entra. Seules les opérations sur les données de stockage Blob prennent en charge le paramètre --auth-mode. Les opérations de gestion, comme la création d’un groupe de ressources ou d’un compte de stockage, utilisent automatiquement des informations d’identification Microsoft Entra pour l’autorisation. Pour plus d’informations, consultez Choisir comment autoriser l’accès à des données blob avec Azure CLI.

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


az login

Créez un conteneur.

Toutes les données blob sont stockées dans des conteneurs. Vous aurez donc besoin d’au moins une ressource de conteneur avant de pouvoir charger des données. Si nécessaire, utilisez l’exemple suivant pour créer un conteneur de stockage. Pour plus d’informations, consultez Gestion de conteneurs d’objet blob avec Azure CLI.


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

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

Lorsque vous utilisez les exemples inclus dans cet article, vous devez remplacer les valeurs d’espace réservé entre crochets par vos propres valeurs. Pour plus d’informations sur la connexion à Azure avec Azure CLI, consultez Se connecter avec Azure CLI.

Charger des objets blob

Azure CLI propose des commandes qui effectuent des opérations sur une ou plusieurs ressources, selon vos besoins.

Pour charger un fichier sur un objet blob de bloc, transmettez les valeurs de paramètres requises à la commande az storage blob upload. Fournissez le chemin d’accès source et le nom du fichier avec le paramètre--file et le nom du conteneur de destination avec le paramètre --container-name. Vous devrez également fournir le paramètre --account-name. Cette commande crée un nouvel objet blob ou écrase l’objet blob original s'il existe déjà.

Vous pouvez utiliser la commande az storage blob upload-batch pour charger récursivement plusieurs objets blob dans un conteneur de stockage. Vous pouvez utiliser la correspondance des modèles de noms de fichiers Unix pour spécifier un ensemble de fichiers à charger avec le paramètre --pattern. Les modèles pris en charge sont *, ?, [seq] et [!seq]. Pour en savoir plus, consultez la documentation Python sur la correspondance des modèles de noms de fichiers Unix.

Dans l'exemple suivant, la première opération utilise la commande az storage blob upload pour charger un seul fichier nommé. Le fichier source et le conteneur de stockage de destination sont spécifiés avec les paramètres --file et --container-name.

La deuxième opération montre l'utilisation de la commande az storage blob upload-batch pour charger plusieurs fichiers. Le paramètre --if-modified-since garantit que seuls les fichiers modifiés au cours des sept derniers jours seront chargés. La valeur fournie par ce paramètre doit être au format UTC.


#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"
lastModified=$(date +%Y:%m:%d -d "7 days ago")

path="C:\\temp\\"
filename="demo-file.txt"
imageFiles="*.png"
file="$path$filename"

#Upload a single named file
az storage blob upload \
    --file $file \
    --container-name $containerName \
    --account-name $storageAccount \
    --auth-mode login

#Upload multiple image files recursively
az storage blob upload-batch \
    --destination $containerName \
    --source $path \
    --pattern *.png \
    --account-name $storageAccount \
    --auth-mode login \
    --if-modified-since $lastModified

Liste des objets blob

Par défaut, la commande az storage blob list répertorie tous les objets blob stockés dans un conteneur. Vous pouvez utiliser différentes approches pour affiner l’étendue de votre recherche. Il n’existe aucune restriction au nombre de conteneurs ou blobs qu’un compte de stockage peut avoir. Pour éviter éventuellement de récupérer des milliers de blobs, il est important de limiter la quantité de données renvoyées.

Utilisez le paramètre --prefix pour sélectionner un seul fichier connu ou un ensemble de fichiers dont les noms commencent par une chaîne définie. Vous pouvez spécifier un répertoire virtuel comme élément du préfixe --prefix.

Par défaut, seuls les objets blob sont retournés dans une opération de création de liste. Dans certains cas, il peut être utile de passer une valeur pour le paramètre --include afin de renvoyer d'autres types d'objets tels que les blobs supprimés, les instantanés et les versions. Ces valeurs peuvent être combinées pour renvoyer plusieurs types d'objets.

Le paramètre --num-results peut être utilisé pour limiter le nombre de blobs renvoyés à partir d’un conteneur. Une limite de service de 5 000 est imposée à toutes les ressources Azure. Cette limite garantit que des quantités gérables de données sont récupérées et que le niveau de performance ne sont pas impactées. Si le nombre de blobs 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 demandes pour récupérer n’importe quel membre de blobs. Des informations supplémentaires sont disponibles Énumération des ressources blob.

L’exemple suivant illustre plusieurs approches utilisées pour fournir une liste des blobs. La première approche consiste à lister tous les blobs au sein d’un conteneur spécifié. La deuxième approche consiste à utiliser le paramètre --prefix pour lister tous les blobs dans les conteneurs qui commencent par le préfixe spécifié. La troisième approche consiste à utiliser le paramètre --num-results pour limiter les résultats retournés et le paramètre --show-next-marker pour inclure le jeton de continuation dans les résultats. Lorsqu’un jeton de continuation est présent dans les résultats, il est passé à l’appel suivant dans az storage blob list pour récupérer le jeu de résultats suivant.

Pour plus d'informations, consultez la référence az storage blob list.

#!/bin/bash
storageAccount="<storage-account>"
containerName="<container-name>"
blobPrefix="<prefix-string>"
numResults=5

#Approach 1: List all blobs in a container by name.

az storage blob list \
    --account-name $storageAccount \
    --container $containerName \
    --query "[].name" \
    --auth-mode login \
    --output tsv

#Approach 2: Use the --prefix parameter to list blobs starting with specified prefix.

az storage blob list \
    --account-name $storageAccount \
    --container $containerName \
    --prefix $blobPrefix \
    --query "[].name" \
    --auth-mode login \
    --output tsv

#Approach 3: Use the continuation token to return the complete set of results.

get_blobs() {
    if [ -z "$nextMarker" ]; then
        az storage blob list --container-name $containerName --num-results $numResults --account-name $storageAccount --show-next-marker --only-show-errors --auth-mode login
    else
        az storage blob list --container-name $containerName --num-results $numResults --marker $nextMarker --account-name $storageAccount --show-next-marker --only-show-errors --auth-mode login
    fi
}
 
total=0
nextMarker=""
while true; do
    blobs=$(get_blobs $containerName $numResults $storageAccount $nextMarker) 
    nextMarker=""
    blobsLength=$(echo $blobs | jq length)
    
    if [ $blobsLength -le 0 ]; then
        break
    fi
    
    blobIndex=0
    while read blob; do
        if [ $blobIndex -eq $(($blobsLength-1)) ]; 
        then
            nextMarker="$(echo $blob | jq -r .nextMarker)"
        else
            blobName=$(echo $blob | jq .name)
            echo "blobname: $blobName"
        fi
        ((blobIndex++))
    done <<<$(echo $blobs | jq -c '.[]')
 
    total=$(($total+$blobsLength-1))
    echo "Processed $total blobs so far"
    # echo "nextMarker: $nextMarker"
    if [ "${nextMarker}" = "null" ]; then
        echo -e "\nAccountName: $storageAccount, ContainerName: $containerName "
        echo "Processed $total blobs in total."
        break
    fi
done

Télécharger un objet blob

En fonction de votre cas d'utilisation, vous utiliserez la commande az storage blob download ou az storage blob download-batch pour télécharger des objets blob. Pour télécharger un objet blob individuel, appelez directement la commande az storage blob download et attribuez des valeurs aux paramètres --container-name, --file et --name. Le blob est téléchargé dans le répertoire shell par défaut, mais un autre emplacement peut être spécifié. L'opération échouera avec une erreur si le chemin spécifié n'existe pas.

Pour télécharger de manière récursive plusieurs objets blob à partir d'un conteneur de stockage, utilisez la commande az storage blob download-batch. Cette commande prend en charge la correspondance des modèles de noms de fichiers Unix avec le paramètre --pattern. Les modèles pris en charge sont *, ?, [seq] et [!seq]. Pour en savoir plus, consultez la documentation Python sur la correspondance des modèles de noms de fichiers Unix.

L’exemple de code suivant fournit un exemple d’approches de téléchargement unique et de téléchargement multiple. Il offre également une approche simplifiée de la recherche de fichiers spécifiques dans tous les conteneurs à l’aide d’un caractère générique. Étant donné que certains environnements peuvent avoir plusieurs milliers de ressources, l’utilisation du paramètre --num-results est recommandée.

Pour plus d’informations, consultez les références az storage blob download et az storage blob download batch.

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

destinationPath="C:\\temp\\downloads\\"
destinationFilename="downloadedBlob.txt"
file="$destinationPath$destinationFilename"
sourceBlobName="demo-file.txt"

#Download a single named blob

az storage blob download \
    --container $containerName \
    --file $file \
    --name $sourceBlobName \
    --account-name $storageAccount \
    --auth-mode login

#Download multiple blobs using a pattern value

az storage blob download-batch \
    --destination $destinationPath \
    --source $containerName \
    --pattern images/*.png \
    --account-name $storageAccount \
    --auth-mode login

#Use a loop to download matching blobs in a list of containers

containerList=$( \
    az storage container list \
        --query "[].name" \
        --num-results 5 \
        --account-name $storageAccount \
        --auth-mode login \
        --output tsv 
)
for row in $containerList
do
    tmpName=$(echo $row | sed -e 's/\r//g')
    echo $tmpName
   
    az storage blob download-batch \
        --destination $destinationPath \
        --source $tmpName \
        --pattern *louis*.* \
        --account-name $storageAccount \
        --auth-mode login
done

Gérer des propriétés et des métadonnées de blobs

Un objet blob 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.

Lecture des propriétés blob

Pour lire les propriétés ou métadonnées d’un blob, vous devez d’abord récupérer le blob à partir du service. Utilisez la commande az storage blob show pour récupérer des propriétés et métadonnées d’un blob, mais pas son contenu. L’exemple suivant récupère un blob et répertorie ses propriétés.

Pour plus d'informations, consultez la référence az storage blob show.

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

az storage blob show \
    --container  demo-container \
    --name demo-file.txt \
    --account-name $storageAccount \
    --auth-mode login

Lire et écrire des métadonnées de blob

Les métadonnées de blob sont un ensemble facultatif de paires nom-valeur associés à un blob. Comme montré dans l’exemple précédent, aucune métadonnées n’est associée initialement à un blob, même si elle peut être ajoutée si nécessaire. Pour lire, utilisez la commande az storage blob metadata show. Pour mettre à jour les métadonnées d’objets blob, vous allez utiliser az storage blob metadata update et fournir un tableau de paires clé-valeur. Pour plus d'informations, consultez la référence az storage blob metadata.

Pour plus d'informations, consultez la référence az storage blob metadata.

L’exemple ci-dessous met à jour et valide les métadonnées d’un blob, puis les récupère.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"
blobName="blue-moon.mp3"

metadata=("Written=1934" "Recorded=1958")
metadata+=("Lyricist=Lorenz Hart")
metadata+=("Composer=Richard Rogers")
metadata+=("Artist=Tony Bennett")

#Update metadata
az storage blob metadata update \
    --container-name $containerName \
    --name $blobName \
    --metadata "${metadata[@]}" \
    --account-name $storageAccount \
    --auth-mode login

#Retrieve updated blob metadata
az storage blob metadata show \
    --container-name $containerName \
    --name $blobName \
    --account-name $storageAccount \
    --auth-mode login

Opérations de copie de blobs

Il existe de nombreux scénarios où des blobs de différents types peuvent être copiés. Les exemples décrits dans cet article sont limités aux objets blob de blocs. Azure CLI propose des commandes qui effectuent des opérations sur une ou plusieurs ressources, selon vos besoins.

Pour copier un objet blob spécifique, utilisez la commande az storage blob copy start et spécifiez les valeurs des conteneurs et objets blob source et de destination. Il est également possible de fournir un URI (Uniform Resource Identifier), un partage ou une signature d'accès partagé (SAP) comme source.

Vous pouvez également spécifier les conditions dans lesquelles l'objet blob sera copié. Ces conditions peuvent être définies pour l'objet blob source ou de destination. Vous pouvez faire référence à la date de dernière modification, aux données de l’étiquette ou à la valeur ETag. Vous pouvez, par exemple, choisir de copier les objets blob qui n'ont pas été récemment modifiés dans un conteneur distinct. Pour plus d’informations, consultez Spécification des en-têtes conditionnels pour les opérations du service Blob.

Vous pouvez utiliser la commande az storage blob copy start-batch pour copier de manière récursive plusieurs objets blob entre les conteneurs de stockage d'un même compte de stockage. Cette commande requiert des valeurs pour les paramètres --source-container et --destination-container, et peut copier tous les fichiers entre la source et la destination. Comme les autres commandes batch de l'interface CLI, cette commande prend en charge la correspondance des modèles de noms de fichiers Unix avec le paramètre --pattern. Les modèles pris en charge sont *, ?, [seq] et [!seq]. Pour en savoir plus, consultez la documentation Python sur la correspondance des modèles de noms de fichiers Unix.

Notes

Envisagez l’utilisation d’AzCopy pour la simplicité et le niveau de performance, en particulier lors de la copie de blobs entre des comptes de stockage. AzCopy est un utilitaire de ligne de commande que vous pouvez utiliser pour copier des blobs ou des fichiers vers ou depuis un compte de stockage. En savoir plus sur Démarrage avec AzCopy.

Pour plus d'informations, consultez la référence az storage blob copy.

L’exemple de code suivant fournit un exemple d’opération de copie unique et de copie multiple. Étant donné que certains environnements peuvent avoir plusieurs milliers de ressources, l’utilisation du paramètre --num-results est recommandée. Le premier exemple copie l'objet blob secret-town-road.png du conteneur photos vers le conteneur locations. Les deux conteneurs existent dans le même compte de stockage. Le résultat vérifie le succès de l’opération de copie.

#!/bin/bash
storageAccount="<storage-account>"
sourceContainer="photos"
blobName="secret-town-road.jpg"
destContainer="locations"

az storage blob copy start \
    --destination-container $destContainer \
    --destination-blob $blobName \
    --source-container $sourceContainer \
    --source-blob $blobName \
    --account-name $storageAccount \
    --auth-mode login

Blobs instantanés

Aucun bail associé à l’objet blob de base n’a d’incidence sur l’instantané. Vous ne pouvez pas acquérir de bail pour un instantané. En savoir plus sur les Instantanés de blobs. Pour plus d'informations, consultez la référence az storage blob snapshot.

L’exemple de code suivant extrait un blob d’un conteneur de stockage et crée un instantané de celui-ci.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"
blobName="demo-file.txt"

az storage blob snapshot \
    --container-name $containerName \
    --name Blue-Moon.mp3 \
    --account-name $storageAccount \
    --auth-mode login

Définir un niveau d’objet blob

Lorsque vous changez le niveau d’un blob, vous déplacez ce blob et toutes ses données dans le niveau cible. Vous pouvez choisir le niveau chaud, froid ou archive à l’aide de la commande az storage blob set-tier.

Selon vos besoins, vous pouvez également utiliser l'opération Copy Blob pour copier un objet blob d'un niveau à un autre. L'opération Copy Blob crée un nouveau blob dans le niveau souhaité en conservant le blob source dans le niveau d'origine.

Le changement de niveau de froid ou chaud à archive a lieu presque immédiatement. Quand un objet blob est déplacé vers dans le niveau archive, il est considéré comme hors connexion et ne peut être ni lu ni modifié. Pour pouvoir lire ou modifier les données d’un blob archivé, vous devez le réhydrater à un niveau en ligne. En savoir plus sur la Réhydratation des blobs à partir du niveau archive.

Pour plus d'informations, consultez la référence az storage blob set-tier.

L’exemple de code suivant définit le niveau sur chaud pour un objet blob unique et nommé dans le conteneur archive.

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

az storage blob set-tier 
    --container-name $containerName \
    --name Blue-Moon.mp3 \
    --tier Hot \
    --account-name $storageAccount \
    --auth-mode login

Opérations à l’aide de balises blob

Les balises d’index blob facilitent la gestion et la découverte des données. Les balises d’index blob sont des attributs d’index clé-valeur définis par l’utilisateur que vous pouvez appliquer à vos blobs. Une fois configuré, vous pouvez catégoriser et rechercher des objets au sein d’un conteneur individuel ou de tous les conteneurs. Les ressources blob peuvent être catégorisés dynamiquement en mettant à jour leurs balises d’index sans modifier l’organisation des conteneurs. Cette approche vous offre une certaine flexibilité pour modifier les besoins en matière de données. Vous pouvez utiliser simultanément des métadonnées et des balises d’index. Pour plus d’informations sur les balises d'index, consultez Gérer et rechercher des données Blob Azure avec des balises d’index blob.

Conseil

L'exemple de code fourni ci-dessous utilise la correspondance de modèles pour obtenir un texte à partir d'un fichier XML dont la structure est connue. Cet exemple sert à illustrer une approche simplifiée de l'ajout d’étiquettes d’objets blob à l'aide de la fonctionnalité Bash de base. L'utilisation d'un outil d'analyse syntaxique de données réelles est toujours recommandée lors de la consommation de données pour des charges de travail de production.

L’exemple suivant montre comment ajouter des balises d’index blob à une série de blobs. L’exemple lit les données d’un fichier XML et l’utilise pour créer des balises d’index sur plusieurs blobs. Pour utiliser l’exemple de code, créez un fichier blob-list.xml local dans votre répertoire C:\temp. Les données XML sont fournies ci-dessous.

Pour plus d'informations, consultez la référence az storage blob set-tier.

<Venue Name="House of Prime Rib" Type="Restaurant">
  <Files>
    <File path="transactions/12027121.csv" />
    <File path="campaigns/radio-campaign.docx" />
    <File path="photos/bannerphoto.png" />
    <File path="archive/completed/2020review.pdf" />
    <File path="logs/2020/01/01/logfile.txt" />
  </Files>
</Venue>

L'exemple de code itère les lignes dans le fichier XML. Il localise l'élément Venue et crée des variables pour les valeurs Name et Type. Il parcourt ensuite les lignes restantes et crée des étiquettes pour chaque objet blob référencé par un nœud File.

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

while read line
do
  
#Set Tag values 
if echo "$line" | grep -q "<Venue";then
    name=`echo "$line" | cut -d'"' -f 2`
    type=`echo "$line" | cut -d'"' -f 4`
    tags=("name=$name")
    tags+=("type=$type")
fi

#Add tags to blobs
if echo "$line" | grep -q "<File ";then
    blobName=`echo "$line" | cut -d'"' -f 2`
    
    echo az storage blob tag set \
        --container-name $containerName \
        --name $blobName \
        --account-name $storageAccount \
        --auth-mode login \
        --tags "{$tags[@]}"
fi

done < /mnt/c/temp/bloblist.xml

Supprimer les objets blob

Vous pouvez supprimer un seul blob ou une série de blobs avec les commandes az storage blob delete et az storage blob delete-batch. Lorsque vous supprimez plusieurs objets blob, vous pouvez utiliser des opérations conditionnelles, des boucles ou d'autres automatismes, comme le montrent les exemples ci-dessous.

Avertissement

L’exécution des exemples suivants peut supprimer définitivement des objets blob. 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.

L’exemple de code suivant fournit un exemple d’opérations de suppression individuelle et par lots. Le premier exemple supprime un objet blob unique, nommé. Le deuxième exemple montre l'utilisation d'opérations logiques dans Bash pour supprimer plusieurs objets blob. Le troisième exemple utilise la commande delete-batch pour supprimer tous les objets blob de format bennett-x, à l’exception de bennett-2.

Pour plus d'informations, consultez les références az storage blob delete et az storage blob delete-batch.

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

blobName="demo-file.txt"
blobPrefix="sinatra-"

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

#Iterate a blob list, deleting blobs whose names end with even numbers

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

## Delete all blobs with the format *bennett-x* except *bennett-2.*
for row in $blobList
do
    #Get the blob's number
    tmpBlob=$(echo $row | sed -e 's/\r//g') 
    tmpName=$(echo ${row%.*} | sed -e 's/\r//g')

    if [ `expr ${tmpName: ${#blobPrefix}} % 2` == 0 ]
    then
        
        echo "Deleting $tmpBlob"
        az storage blob delete \
            --container-name $containerName \
            --name $tmpBlob \
            --account-name $storageAccount \
            --auth-mode login

  fi
done

#Delete multiple blobs using delete-batch
az storage blob delete-batch \
    --source $containerName \
    --pattern bennett-[!2].* \
    --account-name $storageAccount \
    --auth-mode login

Dans certains cas, il est possible de récupérer des blobs 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, passer le paramètre --include d et la valeur retourne les blobs qui ont été supprimés pendant la période de rétention du compte. Pour en savoir plus sur la surpression réversible, consultez l’article Suppression réversible pour les blobs.

Utilisez l’exemple suivant pour récupérer une liste de blobs supprimés pendant la période de rétention associée au conteneur. Le premier exemple affiche une liste de tous les objets Blob supprimés récemment et les dates auxquelles ils ont été supprimés. Le deuxième exemple répertorie tous les objets Blob supprimés correspondant à un préfixe spécifique.

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

blobPrefix="sinatra-"

#Retrieve a list of all deleted blobs
az storage blob list \
    --container-name $containerName \
    --include d \
    --output table \
    --account-name $storageAccount \
    --auth-mode login \
    --query "[?deleted].{name:name,deleted:properties.deletedTime}"

#Retrieve a list of all deleted blobs matching a specific prefix
az storage blob list \
    --container-name $containerName \
    --prefix $blobPrefix \
    --output table \
    --include d \
    --account-name $storageAccount \
    --auth-mode login \
    --query "[].{name:name,deleted:deleted}"

Restaurer un objet blob supprimé

Comme indiqué dans la section Blobs 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. Vous pouvez également utiliser le contrôle de version afin de gérer les versions précédentes de vos objets blob pour la récupération et la restauration.

Si le contrôle de version des objets blob et la suppression réversible d’objets blob sont tous deux activés, alors la modification, le remplacement, la suppression ou la restauration d’un objet blob crée automatiquement une nouvelle version. La méthode que vous utiliserez pour restaurer un blob supprimé varie selon que le contrôle de version est activé ou non sur votre compte de stockage.

L’exemple de code suivant restaure tous les objets blob supprimés de manière réversible ou, si le contrôle de version est activé, restaure la dernière version d’un objet blob. Il commence par déterminer si le contrôle de version est activé à l’aide de la commande az storage account blob-service-properties show.

Si le contrôle de version est activé, la commande az storage blob list récupère la liste des versions de blobs dotés d’un nom unique. Ensuite, les versions d’objet blob figurant dans la liste sont récupérées et classées par date. Si aucune version n’est trouvée avec la valeur d’attribut isCurrentVersion, la commande az storage blob copy start est utilisée pour effectuer une copie active de la dernière version du blob.

Si le contrôle de version est désactivé, la commande az storage blob undelete est utilisée pour restaurer chaque objet blob supprimé de manière réversible dans le conteneur.

Pour pouvoir suivre cet exemple, vous devez activer la suppression réversible sur au moins un de vos comptes de stockage. Pour en savoir plus sur l'option de protection des données par suppression réversible, consultez l'article Suppression réversible pour les objets blob ou la référence az storage blob undelete.

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

blobSvcProps=$(
    az storage account blob-service-properties show \
        --account-name $storageAccount \
        --resource-group $groupName)

softDelete=$(echo "${blobSvcProps}" | jq -r '.deleteRetentionPolicy.enabled')
versioning=$(echo "${blobSvcProps}" | jq -r '.isVersioningEnabled')

# If soft delete is enabled
if $softDelete
then
    
    # If versioning is enabled
    if $versioning
    then

        # Get all blobs and versions using -Unique to avoid processing duplicates/versions
        blobList=$(
            az storage blob list \
                --account-name $storageAccount \
                --container-name $containerName \
                --include dv \--query "[?versionId != null].{name:name}" \
                --auth-mode login -o tsv | uniq)
        
        # Iterate the collection
        for blob in $blobList
        do
            # Get all versions of the blob, newest to oldest
            blobVers=$(
                az storage blob list \
                    --account-name $storageAccount \
                    --container-name $containerName \
                    --include dv \
                    --prefix $blob \
                    --auth-mode login -o json | jq 'sort_by(.versionId) | reverse | .[]')
            # Select the first (newest) object
            delBlob=$(echo "$blobVers" | jq -sr '.[0]')
            
            # Verify that the newest version is NOT the latest (that the version is "deleted")
            if [[ $(echo "$delBlob" | jq '.isCurrentVersion') != true ]]; 
            then
                # Get the blob's versionId property, build the URI to the blob
                versionID=$(echo "$delBlob" | jq -r '.versionId')
                uri="https://$storageAccount.blob.core.windows.net/$containerName/$blob?versionId=$versionID"
                
                # Copy the latest version 
                az storage blob copy start \
                    --account-name $storageAccount \
                    --destination-blob $blob \
                    --destination-container $containerName \
                    --source-uri $uri \
                    --auth-mode login
       
                delBlob=""
            fi
        done

    else

        #Retrieve all deleted blobs
        blobList=$( \
            az storage blob list \
                --container-name $containerName \
                --include d \
                --output tsv \
                --account-name $storageAccount \
                --auth-mode login \
                --query "[?deleted].[name]" \
        )

        #Iterate list of deleted blobs and restore
        for row in $blobList
        do
            tmpName=$(echo $row | sed -e 's/\r//g')
            echo "Restoring $tmpName"
            az storage blob undelete \
                --container-name $containerName \
                --name $tmpName \
                --account-name $storageAccount \
                --auth-mode login
        done

    fi

else
    
    #Soft delete is not enabled
    echo "Sorry, the delete retention policy is not enabled."

fi

Étapes suivantes