Comment gérer les machines virtuelles avec le module Ansible EC2 AWS

Lorsque vous gérez des instances existantes Amazon Web Service (AWS) EC2, cliquer dans la Console de gestion fonctionne bien. Mais à mesure que votre infrastructure se développe, la gestion des instances prend beaucoup de temps et devient complexe. Existe-t-il un meilleur moyen de gérer les instances ? Oui ! Le module AWS Ansible EC2 peut aider.

Dans ce tutoriel, vous apprendrez comment le module Ansible AWS EC2 vous donne une emprise puissante pour gérer les instances AWS EC2 de manière pratique.

Lisez la suite et commencez !

Prérequis

Ce tutoriel comprend des instructions étape par étape. Si vous souhaitez suivre, assurez-vous d’avoir ce qui suit en place :

Assurez-vous que l’utilisateur IAM est configuré pour un accès programmatique et attribuez-lui la politique existante AmazonEC2FullAccess.

  • Un fichier d’inventaire et un ou plusieurs hôtes sont configurés pour exécuter des commandes et des playbooks Ansible. L’ordinateur distant Linux est appelé monserveur, et ce tutoriel utilise un groupe d’inventaire appelé web.
  • Python v3.6 ou ultérieur doit être installé sur votre hôte de contrôleur Ansible et sur la machine distante. Ce tutoriel utilise Python v3.8.10 sur une machine Ubuntu.
  • Les modules Python boto3 supérieurs à 1.15.0 et botocore supérieurs à 1.18.0 doivent être installés sur l’hôte du contrôleur Ansible et sur la machine du nœud distant.

Création ou redémarrage d’une instance EC2 avec des commandes ad hoc

Si vous prévoyez de créer ou de redémarrer une seule instance EC2 sur un compte AWS, l’exécution de commandes ad hoc suffira. Les commandes ad hoc sont un moyen rapide et efficace d’exécuter une seule commande pour créer une instance EC2 ou modifier le type d’instance d’une instance EC2 AWS.

Connectez-vous à votre contrôleur Ansible et exécutez la commande ansible ci-dessous pour vous connecter (-m amazon.aws.ec2_instance) à l’hôte (web).

La commande passe un argument (-a) qui indique à Ansible de redémarrer l’instance EC2 AWS avec instance_tags=Name=Tag1) dans la région us-east-2. Pour authentifier la connexion au compte AWS, vous ajoutez les détails aws_access_key et aws_secret_key dans la commande ad hoc.

Le tutoriel effectue toutes les actions dans la région us-east-2, mais vous pouvez effectuer les mêmes actions dans n’importe quelle région AWS de votre choix.

ansible web -m amazon.aws.ec2 -a " state=restarted instance_tags=Name=Tag1 aws_access_key=AKIAVWOJMI5I2DPXXXX aws_secret_key=F9PaprqnPUn/XXXXXXXXXXXX region=us-east-2"

Une fois que la commande est terminée, vous verrez un message CHANGED, comme indiqué ci-dessous, qui confirme qu’Ansible a redémarré avec succès l’instance EC2 AWS.

Running an Ad Hoc Command to Restart an Amazon EC2 Instance

Lancement d’une instance EC2 avec Ansible Playbook

Vous venez d’apprendre comment exécuter une commande ad hoc Ansible, ce qui est parfait pour une action ponctuelle ! Mais peut-être avez-vous besoin d’effectuer plusieurs tâches. Si tel est le cas, créez un playbook Ansible qui lancera une instance EC2 pour exécuter plusieurs tâches.

1. Ouvrez le terminal sur votre hôte contrôleur Ansible, puis exécutez les commandes suivantes pour créer un répertoire appelé ~/ansible_aws_ec2_module et basculez dans ce répertoire.

Ce répertoire contiendra le playbook et tous les fichiers de configuration nécessaires que vous utiliserez pour invoquer le module Ansible AWS EC2.

mkdir ~/ansible_aws_ec2_module
cd ~/ansible_aws_ec2_module

2. Ensuite, ouvrez votre éditeur de texte préféré, créez un fichier appelé main.yml dans le répertoire ~/ansible_aws_ec2_module. Remplissez le fichier main.yml avec le contenu du playbook YAML suivant.

Le playbook ci-dessous contient la tâche qui démarre une instance avec une adresse IP publique dans un VPC particulier dans un compte AWS.

À partir de ce point tout au long du tutoriel, remplacez les valeurs de aws_access_key, aws_secret_key par les vôtres.

---
- name: Ansible EC2 instance Launch module demo
# Définition du serveur distant où le module Ansible EC2 gérera les objets
  hosts: web
  remote_user: ubuntu # Utilisation de l'utilisateur distant en tant qu'ubuntu
  tasks:
		# Tâche pour démarrer une instance AWS EC2 avec une IP publique
    - name: start an instance with a public IP address
      amazon.aws.ec2:
				# Configuration du nom de la clé 
        key_name: mykey
				# Définir le type d'instance, l'image, l'identifiant de sous-réseau VPC, attribuer une IP publique, la région aws
        instance_type: t2.micro
        image: ami-0b9064170e32bde34
        wait: yes
        count: 1
        vpc_subnet_id: subnet-0dc9af4c75ad3e2ee
        assign_public_ip: yes
        aws_region: us-east-2
        aws_access_key: AKIAVWOJMI5XXXXXXXX
        aws_secret_key: F9PaprqnPUn/NP8lzQXXXXXXXXXXXXXXXXXX

3. Exécutez la commande ci-dessous pour invoquer le playbook (main.yml). Le playbook exécute ensuite les tâches pour créer une nouvelle instance dans la région us-east-2 avec un type d’instance t2.micro.

ansible-playbook main.yml

Vous pouvez voir ci-dessous que certaines tâches affichent un statut changed, ce qui indique qu’Ansible a créé l’instance avec succès et a modifié l’état de la tâche pour exécuter la commande. En revanche, vous voyez un statut ok car certaines tâches ne nécessitent pas de modifications.

Executing a Playbook

4. Maintenant, ouvrez votre navigateur Web préféré et connectez-vous à la Console de gestion AWS.

5. Enfin, cliquez sur la barre de recherche en haut de la console, recherchez EC2, et cliquez sur l’élément de menu EC2. Cela redirige votre navigateur vers la page EC2.

Searching the EC2 service in the AWS account

Sur la page EC2, vous verrez votre instance nouvellement créée, comme indiqué ci-dessous.

newly created instance

Arrêt de plusieurs instances EC2 AWS

Peut-être que certaines instances AWS EC2 ne servent plus à rien. Si c’est le cas, vous pouvez arrêter ou terminer plusieurs instances en exécutant un playbook Ansible. Spécifiez les IDs des instances et déclarez les valeurs dans une tâche pour définir le comportement du module AWS EC2 Ansible lors de l’arrêt des instances.

1. Créez un playbook Ansible nommé stop.yml et copiez/collez le code ci-dessous dans le playbook.

Le playbook ci-dessous arrête deux instances (i-0d8c7eb4eb2c643a1 et i-0dbc17a67c0f7577c).

---
- name: Stopping the already Launched EC2 instances using Ansible EC2 Module
# Définition du serveur distant où le module AWS EC2 Ansible gérera les objets
  hosts: web
  gather_facts: false
  # Utilisation de l'utilisateur distant ubuntu
  remote_user: ubuntu 
  vars:
    instance_ids:
      - 'i-0d8c7eb4eb2c643a1'
      - 'i-0dbc17a67c0f7577c'
    region: us-east-2
  tasks:
    - name: Stopping the already launched AWS EC2 instances
      amazon.aws.ec2:
        instance_ids: '{{ instance_ids }}'
        region: '{{ region }}'
        state: stopped
        wait: True
        vpc_subnet_id: subnet-0dc9af4c75ad3e2ee
        assign_public_ip: yes
        aws_access_key: AKIAVWOJMI5XXXXXXXX
        aws_secret_key: F9PaprqnPUn/NP8lzQXXXXXXXXXXXXXXXXXX

Si vous préférez terminer les instances plutôt que de les arrêter, changez la valeur de state en absent.

2. Exécutez maintenant la commande ci-dessous pour exécuter le playbook (stop.yml), qui arrêtera les instances que vous avez spécifiées dans le playbook. ansible-playbook stop.yml

ansible-playbook stop.yml
Executing the Ansible playbook using the ansible-playbook command.

3. Enfin, accédez à vos instances AWS dans votre navigateur web, et vous verrez que deux instances ont été arrêtées avec succès, comme indiqué ci-dessous.

Viewing Stopped Instances

Création d’une instance avec étiquette, volume et surveillance Cloud Watch.

Peut-être devez-vous provisionner votre instance avec des composants plus avancés tels que le balisage, la surveillance avec des alarmes CloudWatch et la création d’un volume pour le stockage. Dans ce cas, l’utilisation du module AWS EC2 Ansible dans un playbook fera l’affaire.

Les balises sont un excellent moyen d’organiser les ressources AWS et de réaliser des calculs efficaces des coûts des ressources dans la console de gestion AWS.

1. Créez un nouveau playbook Ansible nommé advanced.yml et remplissez le playbook avec le code ci-dessous.

Le playbook ci-dessous lancera une instance AWS EC2 avec (volumes—> /dev/sdb, la surveillance et l’étiquetage de l’instance avec Instance1).

---
- name: Adding Tag, Volumes, and cloud Watch Monitoring to an an instance
  hosts: web
  remote_user: ubuntu
  tasks:
    - name: Adding Tag, Volumes, and cloud Watch Monitoring to an an instance
      amazon.aws.ec2:
        instance_type: t2.micro
        image: ami-0b9064170e32bde34
        vpc_subnet_id: subnet-0dc9af4c75ad3e2ee
        region: us-east-2
        aws_access_key: AKIAVWOJMI5I2DXXXX
        aws_secret_key: F9PaprqnPUn/NP8lzQ5lWjXXXXXXXXXXXXXXXx
				# Création des volumes et fixation à l'instance AWS EC2 de type io1
        volumes:
          - device_name: /dev/sdb
            volume_type: io1
            iops: 1000
            volume_size: 100
				# Activation de la surveillance CloudWatch
				# de l'instance AWS EC2 qui sera lancée
        monitoring: yes
				# Étiquetage de l'instance AWS EC2 qui sera lancée
        instance_tags:
            Name: Instance1

2. Exécutez maintenant la commande ci-dessous pour exécuter le playbook (advanced.yml), qui lancera une instance AWS EC2 avec des balises, un volume et une surveillance CloudWatch. ansible-playbook advanced.yml

ansible-playbook advanced.yml
Executing the Ansible Playbook to Create an Instance with Tag, Volume, and Cloud Watch Monitoring

3. Accédez à l’onglet Stockage de l’instance que vous souhaitez vérifier dans la console AWS EC2. Sous périphériques de blocage, cliquez sur un ID de volume dans la liste pour afficher les informations détaillées de l’instance.

Verifying the volume created in the AWS account for the AWS EC2 instance.

4. Enfin, cliquez sur l’onglet Étiquettes dans la page d’informations de synthèse de l’instance. Vous verrez l’étiquette que vous avez définie pour l’instance dans le playbook (étape un), comme celle ci-dessous.

Verifying the tags in the AWS account for the AWS EC2 instance.

Conclusion

Dans ce tutoriel, vous avez profité du module AWS EC2 d’Ansible pour gérer les instances AWS EC2 avec une seule commande. Vous avez également appris à ajuster les instances AWS EC2 telles que le redémarrage, la terminaison, l’ajout d’étiquettes, et ainsi de suite.

Maintenant que vous avez une connaissance solide du module AWS EC2 d’Ansible, seriez-vous prêt à intégrer le module AWS EC2 d’Ansible dans votre routine de gestion des instances ? Peut-être souhaiteriez-vous automatiser la tâche en ajoutant une tâche cron ?

Source:
https://adamtheautomator.com/ansible-ec2/