Maintenant que les bases de notre infrastructure sont en place, je vais vous
présenter comment utiliser Ansible pour automatiser la configuration des
instances dans notre environnement cloud. L’aspect le plus intéressant et
puissant ici est l’utilisation d’un inventaire dynamique, qui permet à
Ansible de s’adapter automatiquement aux changements dans notre
infrastructure cloud (faite avec
Terraform). )
L’inventaire dynamique est une fonctionnalité d’Ansible qui permet de
générer automatiquement un inventaire des instances à partir de sources comme
AWS, Azure et dans notre cas, Outscale.
Pour configurer l’inventaire dynamique, nous utilisons le plugin AWS,
Outscale étant compatible avec l’API
Outscale cela va fonctionner. C’est ce plugin qui se chargera d’obtenir les
informations sur les instances.
Créer un nouveau répertoire nommé playbooks pour y déposer vos fichiers
Ansible.
Créer un fichier yaml dont le nom doit se terminer par .aws_ec2.yml. Ici, je
vais l’appeler demo.aws_ec2.yml :
Quelques explications :
plugin: amazon.aws.aws_ec2 : Indique qu’Ansible utilise le plugin
aws_ec2 pour interagir avec AWS EC2.
aws_profile: outscale : Spécifie le profil AWS à utiliser pour
l’authentification. Cela correspond à un profil défini précédemment.
regions: - eu-west-2 : Définit la région AWS où le plugin doit chercher les
instances.
keyed_groups: Permet de créer des groupes dynamiques basés sur des tags
spécifiques. Dans votre cas, il crée des groupes basés sur les tags
Application, Group et Env sans séparateur (separator: '').
hostnames: - ip-address - private-ip-address : Définit les attributs à
utiliser comme noms d’hôtes dans l’inventaire, ici les adresses IP publiques
et privées des instances.
Pour que cela fonctionne, il faut créer un fichier de configuration contenant
ces lignes :
Cela permet de définir l’inventaire à utiliser, ainsi que l’utilisateur distant
qui sera chargé d’appliquer les taches Ansible.
Testons-le :
Cela fonctionne !
Voici le playbook que je vais lancer dessus qui va configurer une certain nombre
de choses :
Ce playbook modifie le message d’accueil, fais la mise à jour des packages,
change le nom de la machine et créé des entrées dans le fichier /etc/hosts des
machines distantes et locales (je n’ai pas de serveur DNS). Testons son
exécution :
On se connecte à notre bastion :
Nous jouerons ce playbook à chaque fois que nous créerons une nouvelle instance
!
Création d’une instance dans le réseau privé
Après avoir configuré le bastion, je me concentre maintenant sur le sous-réseau
privé. C’est ici que notre service web sera hébergé, isolé du trafic Internet
direct pour une sécurité accrue. Cette section est essentielle pour assurer que
notre service web fonctionne de manière optimale tout en étant protégé.
On crée un nouveau dossier terraform appelé test :
On procède comme précédemment. Éditez le fichier providers.tf et changer la
clé du backend :
On crée notre instance test dans le réseau privé avec ce code :
On peut appliquer :
On applique notre playbook Ansible :
On teste la connexion :
On installe nginx :
On teste que le port 80 est bien démarré :
Création d’un load balancer
Un load balancer distribue le trafic réseau entrant entre plusieurs machines
virtuelles (VM) du Cloud public ou d’un réseau. Les VM enregistrées auprès d’un
load balancer sont appelées des VM back-ends. Vous pouvez enregistrer autant de
VM back-ends que nécessaire auprès d’un load balancer et vous pouvez
enregistrer ou retirer des VM back-ends à tout moment selon vos besoins.
En fonction de ses security groups, une VM back-end peut recevoir soit le trafic
venant uniquement du load balancer soit le trafic venant à la fois du load
balancer et d’une autre source (par exemple un autre load balancer, internet, ou
autres).
Le load balancer vérifie la santé des VM back-ends pour déterminer les VM saines
vers lesquelles il peut distribuer du trafic.
Ici, je vais utiliser un load balancer de type internet. Dans le fichier
main.tf du répertoire test ajoutez ces lignes :
Dans le fichier output.tf ajoutez ces lignes :
Vous remarquez que je déploie le load balancer dans le sous-réseau public et je
le lie à l’instance test qui se trouve dans le sous réseau privé !
On le déploie :
On peut vérifier l’état du load balancer avec la CLI d’AWS :
Il est bien en service. Si ce n’est pas le cas vérifier que depuis le réseau
public, vous pouvez atteindre le port 80 de l’instance test avec la commande
netcat ou un simple.
On teste depuis l’accès depuis internet :
Cela fonctionne 👍
Faire le ménage
Dans chaque répertoire Terraform, en commençant par l’instance test, puis
l’instance bastion et pour finir l’infrastructure :
Conclusion
En conclusion, la création d’une infrastructure réseau sur le cloud Outscale
en utilisant Terraform, Ansible et Packer est une démarche complexe,
mais enrichissante. Nous avons parcouru les étapes de configuration de
l’environnement, création du VPC et des sous-réseaux, mise en place du
sous-réseau public et privé, intégration du Load Balancer et l’automatisation
avec Ansible. Nous avons également abordé les bonnes pratiques et les
techniques de dépannage et de restauration.
Ce projet illustre l’importance d’une approche structurée et réfléchie dans la
gestion d’infrastructures cloud. Les compétences et outils que nous avons
utilisés sont essentiels pour tout professionnel DevOps souhaitant évoluer dans
l’environnement cloud moderne.
Je vous encourage à explorer davantage ces outils et à les adapter à vos propres
besoins en infrastructure. Le potentiel d’apprentissage et d’optimisation est
immense dans le domaine du cloud computing.