Jusqu’à maintenant, je n’utilisais que les drivers docker et vagrant pour
provisionner des machines de tests avec molecule lors de mes développements de
roles et collections Ansible. Comme je n’ai plus assez de ressources à la maison
pour les provisionner, je me suis dit pourquoi utiliser des instances AWS EC2.
Après avoir tâtonnè longtemps, j’ai fini par réussir, j’ai décidé de vous en
faire profiter.
Installation
Par défaut molécule n’installe que les drivers docker et delegated. Il faut
donc installer le driver ec2, ainsi que la librairie boto3.
Création de la configuration AWS
Maintenant que nous avons tout ce qu’il nous, passons à l’installation et la
configuration la cli awx. Comme très souvent je vais utiliser
asdf pour l’installer.
Pour ceux qui ne connaissent pas molecule je vous renvoie à mon premier
tutoriel. Créons le role :
Configuration du scenario molecule
Bon il reste un peu de travail avant d’instancier notre première instance EC2.
Commencons par éditer le scenario avec le fichier présent dans le dossier
molecule/<nom_scenario>/molecule.yml.
Quelques explications sur les variables :
image_owner : le nom du owner de l’AMI. Ici canonical
image_name : le nom de l’AMI
instance_type : le type d’instance. Ici une t3a.micro une des moins
chères, quelques centimes/heures.
vpc_subnet_id : le sous-réseau à utiliser. Dans mon exemple j’utilise le
réseau publique accessible directement.
key_inject_method : La méthode pour injecter la clé. J’utilise de
l’injecter au moment de la création de l’instance.
ssh_user: l’utilisateur défini dans l’image qui est fonction du type
d’AMI. Pour une ubuntu : ubuntu, pour une Amazon Linux, ec2_user…
Toutes les variables sont documentés dans le fichier
molecule/<nom_scenario>/create.yml
Création et destruction de l’instance.
Bon tout est prêt lancons le converge pour créer l’instance :
Pour se connecter dessus puis la détruire :
Quelques indications en cas difficultés
Destruction de la VM dans la console AWS
Il se peut que vous rencontriez quelques problèmes. Par exemple vous avez
détruit l’instance à la main dans la console EC2 (pas bien), résultat la
commande molecule destroy plante. Pour rétablir la situation :
Ouf, c’est moins compliqué que lorsque vous perdez le state
terraform!
Utilisation dans une CI.
Attention à l’utilisation du scenario Test.
Si vous utilisez la commande molecule test sur ne nombreux rôles, vous risquez
de détruire toutes les VM présentes dans le même subnet_id ! Donc 2 solutions,
Créez des subnet dédiés à chaque rôle ou retirer destroy du scenario test.
Pour cela à la fin du fichier molecule.yml ajoutez ces lignes :
Je dois vérifier s’il est possible de filtrer les instances par ta, ce qui
serait plus simple à mettre en oeuvre.
D’autres cas
Si je trouve d’autres situations, je complèterai le billet.
Plus loin
Il ne vous reste plus qu’à développer vos roles et collections Ansible !
N’oubliez pas la sécurité avant tout en durcissant vos
roles Ansible.