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
Utilisez l’environnement Bash dans Azure Cloud Shell. Pour plus d’informations, consultez Démarrage rapide pour Bash dans Azure Cloud Shell.
Si vous préférez exécuter les commandes de référence de l’interface de ligne de commande localement, installez l’interface Azure CLI. Si vous exécutez sur Windows ou macOS, envisagez d’exécuter Azure CLI dans un conteneur Docker. Pour plus d’informations, consultez Guide pratique pour exécuter Azure CLI dans un conteneur Docker.
Si vous utilisez une installation locale, connectez-vous à Azure CLI à l’aide de la commande az login. Pour finir le processus d’authentification, suivez les étapes affichées dans votre terminal. Pour connaître les autres options de connexion, consultez Se connecter avec Azure CLI.
Lorsque vous y êtes invité, installez l’extension Azure CLI lors de la première utilisation. Pour plus d’informations sur les extensions, consultez Utiliser des extensions avec Azure CLI.
Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade.
- 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