Setup
Introduction
Le point d'entrée unique, quelque soit l'outil utilisé, est l'API AWS. Comme la plupart des plateformes modernes, c'est via cette API que toutes les modifications de ressources sont reçues par la plateforme.
Même s'il reste possible d'attaquer directement l'API, on utilisera bien souvent des outils pour nous faciliter la vie. Lorsque l'on manipule les ressources d'un cloud provider plusieurs solutions/outils sont disponibles.
Dashboard/console
C'est bien souvent le point d'entrée lorsque l'on découvre une plateforme cloud. Il a l'avantage d'être facile d'accès et permet de découvrir de façon ergonomique les ressources et les différents services. Cependant, il ne sera pas adapté lorsque l'on va vouloir standardiser et industrialiser la création de notre infrastructure. L'inconvénient d'utiliser le dashboard pour la création et gestion des resources (ce qui est parfois nommé 'ClikOps') est que cela ne tient pas à l'échelle avec beaucoup de ressources. Cela n'est pas pratique s'il fallait recréer ou changer toutes les ressources à la main. Cela rentre dans ce que Google et ses SRE appèllent le Toil
Note
Parfois certaines configurations ne pourront pas être réalisées via le dashboard
CLI
La plateforme AWS propose l'outil aws-cli
en ligne de commande (Command Line Interface).
L'ensemble des resources peuvent être créées via cet outil et il peut être pratique pour apporter une certaine
automatisation.
Par exemple, on pourra créer des scripts qui lanceront une suite de commandes AWS CLI pour instancier notre infra puis
pour la détruire (pratique pour instancier un lab par exemple)
IaC
L'Infrastructure As Code (IaC) est une best practice devops impliquant l'automatisation des créations/configuration de resources via du code. Cela a pour avantage de gagner du temps via la réutilisabilité du code et permet réduire les potentielles erreurs bêtes. De plus il est possible d'appliquer les pratiques déjà existantes pour le code classique :
- Versioning/audit
- Dev best practices (DRY/YAGNI...)
- Potentielles chaines de CI/CD de l'infra elle-même
- ...
Plusieurs outils existent et notamment CloudFormation et Terraform.
CloudFormation
C'est l'outil même d'AWS permettant d'instancier des infrastructures (stacks) décrites via des fichiers yaml/json. AWS permet également de simplifier la création de ces fichiers via plusieurs outils CDK/SAM.
Terraform
C'est l'outil d'Infrastructure As Code (IaC) que l'on va privilégier pour ce TP. Terraform a une belle maturité puisqu'il existe depuis 2014 et est maintenu par Hashicorp (racheté par IBM pour plus de 6 Mds !! )
C'est un outil ayant une approche déclarative (on décrit l'infra que l'on veut et l'outil la fait converger), à mettre en opposition avec l'approche plutôt imperative du CLI AWS.
Terraform conserve l'état de l'existant et les dépendances entre les resources afin de faire converger l'infrastructure vers l'état attendu. Un gros avantage de Terraform est sa communauté ainsi que la richesse des providers et modules disponibles et maintenus par la communauté permettant de configurer facilement beaucoup de clouds, tels que AWS/Azure/GCP/Openstack, mais aussi directement des outils comme Vault, Kubernetes, Helm, Gitlab, Keycloak, Pagerduty... Vous pouvez retrouver la liste ici.
Les outils d'Infrastructure As Code sont aussi le point d'entrée essentiel de toute approche GitOps que nous découvrirons en fin de ce cours.
Lors de cette session, nous découvrirons ces trois modes d'instanciation. Nous commencerons souvent par le dashboard qui permettra de découvrir les ressources introduites pour ensuite réaliser une implémentation IaC avec Terraform.
Installation
Dashboard
Pour le dashboard, pas besoin d'installation particulière, votre navigateur préféré suffira. Toutes les informations de connexion vous ont été transmises par mail.
- Puis signing as IAM User (nous verrons ce que signifie IAM)
- Renseigner les informations suivantes :
- Account ID : Il s'agit du compte de l'organisation dans laquelle sera créé toutes les resources (Orga : takima-school dans notre cas)
- User : Votre compte IAM reçu par mail
- Password : Votre mot de passe temporaire reçu par mail
AWS CLI
Terraform
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform
Verifier l'installation