TP noté sur terraform
1. Objectifs
L’objectif de ce TP est de vous faire pratiquer Terraform pour déployer une application constituée de 5 services disponible sur GitHub : https://github.com/dockersamples/example-voting-app/tree/main
Les tutoriels ne vous ont pas donné tous les éléments nécessaires pour faire ce TP : c’est normal ! Le but est de vous apprendre à chercher de l’information dans les providers Terraform et les documentations. Mais un certain nombre d’éléments des tutoriels peuvent directement être réutilisés.
Important
|
Idéalement ne faites pas un apply sans nous montrer le plan pour éviter de consommer tous les crédits par erreur… au moins au début
|
Différents niveaux sont possibles pour ce TP, plus vous avancez, mieux c’est. Il est obligatoire de faire les parties 1 et 2.
2. Cadre de travail à mettre en place
-
[Obligatoire] Vous devez faire ce TP par 2 (ou 3 ou 1 si nombre impair).
-
[Obligatoire] Le rendu se fera par un lien GitHub contenant vos codes Terraform. Comme vu dans le cours, c’est une bonne pratique de partager et versionner ses codes d’infrastructure. Mettez en place un mécanisme de pull request.
-
[Bonus] Un bonus pourra être accordé si vous mettez en place des GitHub Actions pour automatiser la mise en place de votre infrastructure (équivalent CI/CD).
3. Première partie - Docker
Dans cette première partie, vous allez déployer l’application avec le provider Docker de Terraform. L’application sera donc déployée dans des conteneurs en local sur votre machine.
Tip
|
partez du fichier docker-compose.yml du git et du tutoriel
|
4. Deuxième partie - GKE et Kubernetes
Dans cette deuxième partie, vous allez déployer l’application sur un cluster Kubernetes réservé avec Terraform sur GKE. Il faudra donc utiliser les providers Google GCP et Kubernetes.
Tip
|
vous pouvez repartir des tutoriels GCP/GKE et Kubernetes et utiliser les manifest Kubernetes présents dans le git
|
Important
|
Organiser bien votre code Terraform ! La qualité de l’organisation sera notée (Modules, répertoires, fichiers) |
5. Troisième partie - GKE, Kubernetes et OpenStack
Dans cette partie, vous allez déployer la base de données NoSQL Redis
de l’application dans une VM sur la plateforme OpenStack de l’école. Cette base de données devra donc communiquer avec les autres éléments de l’application déployés sur GKE.
Par défaut, Redis est sensé être utilisé en local uniquement et n’a pas de mot de passe. Il faut donc modifier le code des applications qui utilisent Redis pour leur préciser de se connecter avec un mot de passe.
Dans vote
, app.py
(Python)
# vote/app.py, ligne 22 g.redis = Redis(host="redis", password=XYZ, db=0, socket_timeout=5)
et dans le worker
, Program.cs
(.NET)
// worker/Program.cs, ligne 116 return ConnectionMultiplexer.Connect("redis,password=XYZ");
Remplacer XYZ
par un mot de passe de votre choix.
Dans l’idéal, récupérez le mot de passe via une variable d’environnement.
De plus, pour installer Redis sur une VM, voici le script cloud-init.
#!/usr/bin/env bash DEBIAN_FRONTEND=noninteractive apt update -q DEBIAN_FRONTEND=noninteractive apt install -q -y redis
Enfin, il faut configurer Redis pour lui indiquer le mot de passe et autoriser les connexions provenant de l’extérieur.
Connectez-vous en SSH, puis dans le fichier /etc/redis/redis.conf
:
Trouver la ligne bind
non commentée, et remplacez-là par
bind 0.0.0.0
Puis cherchez requirepass
et décommentez la ligne en changeant le mot de passe.
requirepass XYZ
Dans l’idéal, cette configuration Redis se ferait dans le script.