Lab 04 : Utilisation de l'Inventaire Dynamique
Objectifs
Section intitulée « Objectifs »Dans cet atelier, vous allez apprendre à configurer et utiliser un inventaire
dynamique aws_ec2 avec Ansible. Vous découvrirez comment récupérer
automatiquement les informations des instances de VM Outscale et les utiliser
pour cibler les hôtes dans vos playbooks.
Prérequis
Section intitulée « Prérequis »Avant de commencer ce TP, assurez-vous d’avoir :
- Configuré AWS CLI avec vos credentials.
- Installé Ansible sur votre machine.
Architecture du TP
Section intitulée « Architecture du TP »Dans cette partie, vous allez apprendre à :
- Configurer un inventaire dynamique
aws_ec2 - Filtrer et cibler des instances spécifiques en utilisant des tags et des groupes
- Utiliser l’inventaire dynamique dans un playbook Ansible
Configuration de l’Inventaire Dynamique
Section intitulée « Configuration de l’Inventaire Dynamique »Installation des Dépendances
Section intitulée « Installation des Dépendances »Pour utiliser l’inventaire dynamique aws_ec2, vous devez installer la
collection Ansible appropriée et configurer les fichiers requis.
- Installez la collection Ansible
amazon.aws:
ansible-galaxy collection install amazon.aws- Assurez-vous que votre AWS CLI est configuré correctement avec vos credentials :
aws configure --profile tp- Installez la library
boto3etbotocoresi ce n’est pas déjà fait :
pip install boto3 botocore- Créez le fichier
~/.aws/models/endpoints.jsonavec le contenu suivant :
{ "partitions": [ { "defaults": { "hostname": "{service}.{region}.{dnsSuffix}", "protocols": ["https"], "signatureVersions": ["v4"] }, "dnsSuffix": "outscale.com", "partition": "osc", "partitionName": "Outscale", "regionRegex": "^(cloudgouv|us|eu|ap)\\-\\w+\\-\\d+$", "regions": { "eu-west-2": { "description": "EU (Paris)" }, "cloudgouv-eu-west-1": { "description": "CloudGouv EU (Paris)" }, "us-east-2": { "description": "US East (NY)" }, "us-west-1": { "description": "US West (California)" }, "ap-northeast-1": { "description": "Japan (Tokyo)" } }, "services": { "ec2": { "endpoints": { "eu-west-2": { "hostname": "fcu.eu-west-2.outscale.com" }, "cloudgouv-eu-west-1": { "hostname": "fcu.cloudgouv-eu-west-1.outscale.com" }, "us-east-2": { "hostname": "fcu.us-east-2.outscale.com" }, "us-west-1": { "hostname": "fcu.us-west-1.outscale.com" }, "ap-northeast-1": { "hostname": "fcu.ap-northeast-1.outscale.com" } } }, "elasticloadbalancing": { "endpoints": { "eu-west-2": { "hostname": "lbu.eu-west-2.outscale.com" }, "cloudgouv-eu-west-1": { "hostname": "lbu.cloudgouv-eu-west-1.outscale.com" }, "us-east-2": { "hostname": "lbu.us-east-2.outscale.com" }, "us-west-1": { "hostname": "lbu.us-west-1.outscale.com" }, "ap-northeast-1": { "hostname": "lbu.ap-northeast-1.outscale.com" } } }, "iam": { "endpoints": { "eu-west-2": { "hostname": "eim.eu-west-2.outscale.com" }, "cloudgouv-eu-west-1": { "hostname": "eim.cloudgouv-eu-west-1.outscale.com" }, "us-east-2": { "hostname": "eim.us-east-2.outscale.com" }, "us-west-1": { "hostname": "eim.us-west-1.outscale.com" }, "ap-northeast-1": { "hostname": "eim.ap-northeast-1.outscale.com" } } }, "directconnect": { "endpoints": { "eu-west-2": { "hostname": "directlink.eu-west-2.outscale.com" }, "cloudgouv-eu-west-1": { "hostname": "directlink.cloudgouv-eu-west-1.outscale.com" }, "us-east-2": { "hostname": "directlink.us-east-2.outscale.com" }, "us-west-1": { "hostname": "directlink.us-west-1.outscale.com" } } }, "s3": { "endpoints": { "eu-west-2": { "hostname": "oos.eu-west-2.outscale.com" }, "cloudgouv-eu-west-1": { "hostname": "oos.cloudgouv-eu-west-1.outscale.com" }, "us-east-2": { "hostname": "oos.us-east-2.outscale.com" }, "us-west-1": { "hostname": "oos.us-west-1.outscale.com" } } } } } ], "version": 3}- Tester avec la commande suivante qui devrait vous lister les VM existantes :
aws ec2 describe-instances --region eu-west-2- Remplacez le contenu du fichier de configurations ansible avec ce contenu :
[defaults]inventory = infra.aws_ec2.ymlhost_key_checking = Falseenable_plugins = aws_ec2- Créez un fichier nommé
infra.aws_ec2.ymldans votre répertoire de projet : - Ajoutez la configuration suivante pour définir l’inventaire dynamique :
plugin: amazon.aws.aws_ec2aws_profile: tpendpoint_url: https://fcu.eu-west-2.outscale.comregions: - eu-west-2keyed_groups: - key: tags.Group separator: '' - key: tags.Env separator: ''hostnames: - ip-address - private-ip-address- Enregistrez et fermez le fichier.
Utilisation de l’Inventaire Dynamique
Section intitulée « Utilisation de l’Inventaire Dynamique »Lister les Instances EC2
Section intitulée « Lister les Instances EC2 »Une fois l’inventaire configuré, vous pouvez l’utiliser pour lister et gérer les instances EC2.
- Exécutez la commande suivante pour lister toutes les instances EC2 récupérées par l’inventaire dynamique :
ansible-inventory --list- Vérifiez que les instances EC2 de votre région sont bien listées.
Filtrer et Cibler les Instances
Section intitulée « Filtrer et Cibler les Instances »Utilisation des Tags pour Cibler des Instances
Section intitulée « Utilisation des Tags pour Cibler des Instances »Vous pouvez filtrer les instances spécifiques en utilisant des tags et d’autres attributs dans votre inventaire dynamique.
- Modifiez votre fichier
aws_ec2.ymlpour filtrer les instances par tag spécifique :
plugin: amazon.aws.aws_ec2aws_profile: tpendpoint_url: https://fcu.eu-west-2.outscale.comregions: - eu-west-2keyed_groups: - key: tags.Group separator: '' - key: tags.Env separator: ''hostnames: - ip-address - private-ip-addressfilters: instance-state-name: running tag:Env: lab_ansible tag:Group: bastions- Enregistrez et fermez le fichier.
- Exécutez à nouveau la commande pour lister les instances filtrées :
ansible-inventory --listUtilisation de l’Inventaire dans un Playbook
Section intitulée « Utilisation de l’Inventaire dans un Playbook »Maintenant que vous avez configuré et testé l’inventaire dynamique, vous pouvez l’utiliser avec votre premier playbook Ansible.
Validation du TP
Section intitulée « Validation du TP »Pour vérifier que vos playbooks fonctionnent correctement, connectez-vous sur
votre VM webserver1 et contrôlez que le service nginx est bien démarré.
Challenge
Section intitulée « Challenge »Ajoutez une seconde VM webserver et appliquer le premier playbook.