TP noté sur terraform

imt

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.