Aller au contenu

Lab 04 : Utilisation de l'Inventaire Dynamique

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.

Avant de commencer ce TP, assurez-vous d’avoir :

  • Configuré AWS CLI avec vos credentials.
  • Installé Ansible sur votre machine.

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

Pour utiliser l’inventaire dynamique aws_ec2, vous devez installer la collection Ansible appropriée et configurer les fichiers requis.

  1. Installez la collection Ansible amazon.aws :
Terminal window
ansible-galaxy collection install amazon.aws
  1. Assurez-vous que votre AWS CLI est configuré correctement avec vos credentials :
Terminal window
aws configure --profile tp
  1. Installez la library boto3 et botocore si ce n’est pas déjà fait :
Terminal window
pip install boto3 botocore
  1. Créez le fichier ~/.aws/models/endpoints.json avec 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
}
  1. Tester avec la commande suivante qui devrait vous lister les VM existantes :
Terminal window
aws ec2 describe-instances --region eu-west-2
  1. Remplacez le contenu du fichier de configurations ansible avec ce contenu :
[defaults]
inventory = infra.aws_ec2.yml
host_key_checking = False
enable_plugins = aws_ec2
  1. Créez un fichier nommé infra.aws_ec2.yml dans votre répertoire de projet :
  2. Ajoutez la configuration suivante pour définir l’inventaire dynamique :
plugin: amazon.aws.aws_ec2
aws_profile: tp
endpoint_url: https://fcu.eu-west-2.outscale.com
regions:
- eu-west-2
keyed_groups:
- key: tags.Group
separator: ''
- key: tags.Env
separator: ''
hostnames:
- ip-address
- private-ip-address
  1. Enregistrez et fermez le fichier.

Une fois l’inventaire configuré, vous pouvez l’utiliser pour lister et gérer les instances EC2.

  1. Exécutez la commande suivante pour lister toutes les instances EC2 récupérées par l’inventaire dynamique :
Terminal window
ansible-inventory --list
  1. Vérifiez que les instances EC2 de votre région sont bien listées.

Vous pouvez filtrer les instances spécifiques en utilisant des tags et d’autres attributs dans votre inventaire dynamique.

  1. Modifiez votre fichier aws_ec2.yml pour filtrer les instances par tag spécifique :
plugin: amazon.aws.aws_ec2
aws_profile: tp
endpoint_url: https://fcu.eu-west-2.outscale.com
regions:
- eu-west-2
keyed_groups:
- key: tags.Group
separator: ''
- key: tags.Env
separator: ''
hostnames:
- ip-address
- private-ip-address
filters:
instance-state-name: running
tag:Env: lab_ansible
tag:Group: bastions
  1. Enregistrez et fermez le fichier.
  2. Exécutez à nouveau la commande pour lister les instances filtrées :
Terminal window
ansible-inventory --list

Maintenant que vous avez configuré et testé l’inventaire dynamique, vous pouvez l’utiliser avec votre premier playbook Ansible.

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é.

Ajoutez une seconde VM webserver et appliquer le premier playbook.