Sauvegarde et restaure ton Compte de stockage avec AzCopy
Il y a plusieurs années, j’ai travaillé sur un projet dans lequel nous stockions des données dans le Table Storage et le Blob Storage d’Azure.
De même qu’on peut faire un backup et un restore d’une BD pour l’utiliser dans différents paliers (poste de développement, unitaire, fonctionnel, acceptation, pré-production, production, ….), j’ai utilisé l’outil AzCopy pour faire un backup et un restore de mon compte de stockage et l’utiliser dans les différents paliers.
À noter que sur le poste de développement, on utilise le Storage Emulator.
Cette technique peut notamment être très utile lorsqu’il s’agit de trouver la source d’un bug en utilisant les mêmes données afin de tenter de le reproduire dans des paliers inférieurs.
Cette semaine, je me suis retrouvé face à cette même situation. Je me suis donc dit que j’allais partagé mes trucs avec toi, car ça pourrait probablement te servir ! 🙂
AzCopy c’est quoi ?
La documentation de Microsoft le décrit parfaitement bien :
AzCopy est un utilitaire en ligne de commande conçu pour copier des données depuis / vers Microsoft Azure Blob, File et Table Storage, en utilisant des commandes simples conçues pour des performances optimales. Vous pouvez copier des données entre un système de fichiers et un compte de stockage, ou entre des comptes de stockage.
Où puis-je l’obtenir ?
Tu peux le télécharger pour Windows ou Linux. Ensuite, tu l’installes sur ta machine.
Une fois installé, tu trouveras l’exécutable « AzCopy.exe » dans « %ProgramFiles(x86)%\Microsoft SDKs\Azure\AzCopy\ » si tu es sur un système 64-bits, ou dans « %ProgramFiles%\Microsoft SDKs\Azure\AzCopy\ » si tu es sur un système 32-bits.
Attention !
Par défaut, le répertoire d’installation d’AzCopy n’est pas ajouté au chemin d’accès système sur ton ordinateur (variable d’environnement « Path »).
Tu dois donc naviguer via la ligne de commande jusqu’au répertoire d’installation ou alors spécifier le chemin d’accès complet à AzCopy.exe pour exécuter l’outil.
Je te conseille vivement d’ajouter le répertoire d’installation à la variable d’environnement « Path ».
Comment ça fonctionne ?
Mon but n’est pas de te faire l’inventaire des commandes d’AzCopy, mais plutôt de te donner envie de l’essayer et, why not, de l’adopter.
Si tu cherches un inventaire complet des commandes, je te réfères à la documentation officielle de Microsoft, qui est mise à jour au fur et à mesure des nouvelles versions.
Je vais toutefois te présenter quelques commandes afin de :
- Te familiariser avec la syntaxe d’AzCopy
- Te présenter quelques commandes fort utiles
C’est parti !
Exemple 1: Copier le contenu de la table « matable » du compte de stockage (sur Azure) « mystorageaccount » vers mon répertoire local nommé « MyData » :
AzCopy /Source:https://mystorageaccount.table.core.windows.net/matable/ /Dest:C:\MyData\ /SourceKey:StorageAccountKey
Exemple 2: Copier le contenu de la table « matable » du compte de stockage (depuis le Storage Emulator) vers mon répertoire local nommé « MyData » :
AzCopy /Source:http://127.0.0.1:10002/devstoreaccount1/matable/ /Dest:C:\MyData\ /SourceKey: Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw== /SourceType:table
Il est important de noter que la clé du compte de stockage (SourceKey) est toujours la même pour le Storage Emulator et ce, peu importe l’instance ou la machine sur laquelle le Storage Emulator s’exécute. C’est une valeur statique.
Exemple 3: Cet exemple est un peu plus complexe. On veut copier le contenu de répertoire local « MyData » vers la table « matable » dans le Storage Emulator :
AzCopy /Source:C:\MyData\ /Dest:http://127.0.0.1:10002/devstoreaccount1/matable/ /DestKey:Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw== / Manifest:"mystorageaccount_matable_20160719T044003.0671776Z.manifest" /EntityOperation:InsertOrReplace /destType:table
Il y a plusieurs points à souligner ici :
- La clé du compte de stockage (DestKey) est toujours la même pour le Storage Emulator et ce, peu importe l’instance ou la machine sur laquelle le Storage Emulator s’exécute. C’est une valeur statique;
- Lorsqu’on fait un backup d’un compte de stockage (d’une table dans ce cas-ci), un fichier « .manifest » est généré. C’est ce fichier qu’il faut indiqué au paramètre « Manifest »;
- On spécifie ici le type d’opération « InsertOrReplace » pour éviter qu’un élément existant dans le Storage Emulator vienne interrompre le processus de copie.
Exemple 4: Copier le contenu du blob « employees » depuis le compte de stockage « mystorageaccount » (sur Azure) vers le blob « employees » dans le Storage Emulator :
AzCopy /Source:https://mystorageaccount.blob.core.windows.net/employees /Dest:http://127.0.0.1:10000/devstoreaccount1/employees /SourceKey:StorageAccountKey /DestKey:Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw== /S /Y /destType:blob
Exemple 5: Télé-verser (upload) le contenu du répertoire local « MyData » vers le blob « employees » du compte de stockage « mystorageaccount » (sur Azure) :
AzCopy /Source:C:\MyData\ /Dest:https://mystorageaccount.blob.core.windows.net/employees /DestKey:StorageAccountKey /S
Exemple 6: Télé-verser (upload) les fichiers d’extension « .png » dont le nom commence par « new_ » depuis le répertoire local « MyData » vers le blob « employees » du compte de stockage « mystorageaccount » (sur Azure) :
AzCopy /Source:C:\MyData\ /Dest:https://mystorageaccount.blob.core.windows.net/employees /DestKey:StorageAccountKey /Pattern:"new_*.png"
À noter que si on veut seulement télé-verser un seul fichier, il suffit d’indiquer son nom dans le paramètre « Pattern ».
Exemple 7: Télécharger le contenu du blob « employees » depuis compte de stockage « mystorageaccount » (sur Azure) vers le répertoire local « MyData » :
AzCopy /Source:https://mystorageaccount.blob.core.windows.net/employees /Dest:C:\MyData\ /SourceKey:StorageAccountKey /S
Exemple 8: Télécharger les fichiers d’extension « .png » dont le nom commence par « new_ » depuis le répertoire local « MyData » vers le blob « employees » du compte de stockage « mystorageaccount » (sur Azure) :
AzCopy /Source:https://mystorageaccount.blob.core.windows.net/employees /Dest:C:\MyData\ /SourceKey:StorageAccountKey /Pattern:"new_*.png"
À noter que si on veut seulement télécharger un seul fichier, il suffit d’indiquer son nom dans le paramètre « Pattern ».
Exemple 9: Il est également possible de copier des blobs d’un compte de stockage vers un autre. Un exemple serait de déplacer le disque dur (VHD) d’une VM vers un autre emplacement de stockage. Sans AzCopy, il faudrait d’abord télécharger le fichier en local depuis l’emplacement source, puis le télé-verser (upload) vers l’emplacement de destination. Bien que ce soit possible, c’est long et fastidieux. AzCopy nous simplifie la vie dans ce cas en permettant de le faire via une seule commande, comme ceci :
AzCopy /Source:https://mystorageaccount.blob.core.windows.net/vhds /Dest:https://mystorageaccount2.blob.core.windows.net/vhds /SourceKey:SourceStorageAccountKey /DestKey:DestStorageAccountKey
Où obtenir la clé du compte de stockage ?
Dans les commandes précédentes, tu te demandes peut être où trouver ces fameuses clés (SourceKey et DestKey) ?
Tu peux les obtenir depuis le portail Azure en allant sur ton compte de stockage comme ceci :
Tu peux prendre n’importe laquelle des deux clés.
Tu en as deux car ça te permets d’avoir un roulement des clés. Par exemple, tu pourrais avoir une clé à l’usage de tes applications et la seconde à l’usage des applications de tes clients. Ainsi, si tu veux révoquer l’accès à tes clients à ton compte de stockage, tu n’as qu’à invalider la clé en la régénérant.
En conclusion…
Nous avons vu ici comment faire un backup et un restore d’un compte de stockage de manière similaire à ce qu’on ferait pour une BD.
Une autre utilisation très utile que nous avons vu dans les exemples ci-dessus est de pouvoir déplacer des gros fichiers d’un compte de stockage vers un autre. C’est très utile quand tu veux déplacer le VHD d’une VM.
On peut pousser cette technique plus loin et l’utiliser dans le cadre d’un pipeline de déploiement, dans un contexte DevOps.
À la prochaine !