L’Amazon Elastic Block Store (EBS) est un service qui fournit du stockage pour les instances Amazon EC2. EBS est ce sur quoi s’exécute chaque volume de vos instances EC2. Lorsque vous comptez sur un service pour exécuter une infrastructure importante, il est sage de s’assurer que les données sont sauvegardées. Dans cet article de blog, apprenez comment gérer et automatiser les instantanés EC2 en utilisant le langage de script PowerShell.
Chaque volume EBS attaché à une instance EC2 peut être sauvegardé via un instantané EBS. Chaque instantané peut être créé de deux façons ; un instantané complet ou incrémentiel. Eh bien, techniquement les deux mais…suivez-moi sur ce coup-là.
Lorsque la première sauvegarde instantanée est créée pour une instance EC2, elle crée une sauvegarde de l’ensemble du volume. Lorsque des instantanés ultérieurs sont créés, seules les données au niveau du stockage de blocs qui ont changé depuis le dernier instantané sont sauvegardées. Cependant, contrairement aux sauvegardes incrémentielles classiques, puisque les instantanés peuvent être chaînés, lorsqu’un instantané est restauré, toutes les données pour ce volume sont restaurées le rendant similaire à une sauvegarde complète.
Les instantanés peuvent se produire de manière asynchrone, ce qui signifie que des instantanés peuvent être en cours de création en parallèle. Lorsqu’il est lancé, un instantané entre dans une phase en attente jusqu’à ce que tous les blocs nécessaires soient copiés vers Amazon S3 où tous les instantanés EBS sont stockés.
Utilisation de PowerShell pour créer des instantanés AWS EC2
Il existe plusieurs façons différentes dont AWS vous permet de gérer les instantanés EBS. Vous pouvez utiliser la Console de gestion AWS, l’interface de ligne de commande AWS (AWS CLI), PowerShell ou les API directement si vous le souhaitez. Dans cet article, nous allons utiliser PowerShell, car le module AWSPowerShell offre un excellent support pour la gestion des instantanés EBS avec des commandes PowerShell.
Prérequis
Avant d’aller trop loin, je présume que vous avez quelques prérequis pour tirer le meilleur parti de ce tutoriel. Vous aurez besoin de :
- Un compte AWS
- Une instance EC2 avec un volume attaché
- Être authentifié avec l’utilisateur root ou un utilisateur IAM ayant l’autorisation CreateSnapshot (arn:aws:ec2:region::snapshot/*)
Une fois que vous avez tous ces prérequis en ordre, nous sommes prêts à commencer !
Recherche des instantanés EC2 existants
Une des premières tâches que nous ferons est de découvrir si nous avons déjà des instantanés existants. Pour le savoir, nous utilisons la commande Get-EC2Snapshot
. C’est la commande qui recherchera tous les instantanés qui ont déjà été créés et les affichera dans la console PowerShell.
Vous remarquerez que les instantanés EC2 AWS qui apparaissent ne sont pas ceux de votre instance EC2. Ce sont tous des instantanés qui vous ont été partagés et qui sont disponibles pour être restaurés sur vos instances EC2. Pour découvrir tous les instantanés provenant de vos instances EC2, utilisez le paramètre OwnerId
avec la valeur self
.
Création d’un nouvel instantané EBS
En supposant que vous avez déjà créé une instance EC2, vous pouvez maintenant créer une capture instantanée. Vous pouvez créer de nouvelles captures instantanées en utilisant la commande New-EC2Snapshot
, mais d’abord, vous devrez rassembler l’ID du volume pour chaque volume que vous souhaitez capturer. Pour ce faire, nous devons d’abord trouver l’ID de l’instance EC2 à laquelle le volume est attaché.
Une fois que vous connaissez l’ID de l’instance EC2, vous devrez l’utiliser pour trouver les volumes. Pour trouver tous les volumes attachés à l’instance EC2, vous utiliserez la commande Get-EC2Volume
et filtrerez la sortie pour ne garder que les volumes avec un ID d’instance attaché correspondant à celui que nous recherchons.
Maintenant que nous avons les volumes, AWS recommande d’arrêter l’instance ou au moins de démonter le volume. Nous allons donc arrêter l’instance.
Nous pouvons maintenant boucler sur chacun d’eux et passer l’ID du volume au paramètre VolumeId
sur la commande New-EC2Snapshot
. Une fois cela fait, vous remarquerez alors que la capture instantanée passera à un état de pending.
Vous pouvez confirmer que la capture instantanée est terminée en exécutant à nouveau Get-EC2Snapshot
et en confirmant que l’état State est désormais completed.
Attribution de balises
Si vous avez beaucoup de captures instantanées à gérer, il peut être difficile de les garder toutes droites. Pour trier les captures instantanées et les catégoriser pour chaque découverte, vous pouvez également leur attribuer des balises. Les balises font partie intégrante d’EC2 et peuvent être utilisées avec vos captures instantanées EBS.
Vous pouvez attribuer des balises lors de la création de la capture instantanée ou après. Pour attribuer des balises lors de la création de la capture instantanée, utilisez le paramètre TagSpecification
sur New-EC2Snapshot
.
Par exemple, peut-être que je veux étiqueter cette capture instantanée AWS EC2 que je viens de prendre avant d’apporter une modification en production. J’aimerais créer une étiquette appelée Stage et lui attribuer la valeur Dev. Pour ce faire, je peux créer un objet TagSpecification, assigner un ou plusieurs objets Tag à la propriété Tags, puis définir le type de ressource auquel cette étiquette sera attachée.
Une fois l’objet TagSpecification créé, je peux ensuite le passer à New-EC2Snapshot
.
Création d’une nouvelle AMI à partir des snapshots
Une autre fonctionnalité intéressante des snapshots est que vous pouvez créer une toute nouvelle image (AMI) à partir d’un snapshot. Si vous avez un snapshot du volume racine d’une instance EC2 Linux uniquement, vous pouvez facilement créer une nouvelle AMI à partir de ce snapshot de volume. Disons que je veux créer une nouvelle image à partir du snapshot que je viens de créer. Je peux le faire en utilisant la commande New-EC2Image
.
I’ll first need to capture the snapshot ID.
Ensuite, je peux transmettre cet ID sous forme de hashtable au paramètre BlockDeviceMapping
sur New-EC2Image
.
Suppression des snapshots AWS EC2
Si nous avons terminé avec le snapshot, nous pouvons maintenant les supprimer. C’est facile à faire. Il suffit de rediriger l’instance renvoyée par Get-EC2Snapshot
vers Remove-EC2Snapshot
. Cependant, vous pouvez rencontrer cette erreur si une AMI est en cours d’utilisation.
Dans ce cas, l’AMI est enregistrée et vous devez d’abord la désenregistrer en utilisant la commande Unregister-EC2Image
.
Résumé
PowerShell vous permet de gérer tous les aspects des instantanés EBS. Si les scénarios que nous avons couverts ici ne correspondent pas à ce que vous devez faire, je vous suggère de consulter l’ensemble des commandes d’instantané EC2 disponibles en exécutant Get-Command -Noun *ec2snapshot* -Module AWSPowerShell
. Cela vous donnera une bonne idée de ce qui est possible avec PowerShell et les instantanés EC2 (EBS).