Skip to content

Latest commit

 

History

History
184 lines (126 loc) · 10.5 KB

File metadata and controls

184 lines (126 loc) · 10.5 KB

TP Débutant

Objectif

Ce TP vise à vous familiariser avec les bases de Terraform en déployant et en gérant une ressource simple sur AWS. Vous allez créer un bucket S3, utiliser des variables et des datasources, générer un fichier template, et manipuler des outputs.

Bonne chance !

Prérequis

Exercices

Configuration du provider :

  • Créer un fichier providers.tf permettant de configurer Terraform pour utiliser le provider AWS. La région à utiliser sera eu-west-1
  • Lancer la commande terraform init
  • Inspecter le contenu du dossier .terraform/providers/ que contient-il ?
  • Inspecter le contenu du fichier .terraform.lock.hcl a quoi sert-il ?

Aide:

Découverte des commandes "plan" et "apply"

  • Avant de créer une première ressource, exécuter la commande terraform plan. Que fait cette commande ?
  • Exécuter ensuite la commande terraform apply. Quelle est la différence entre ces deux commandes ?
  • Observez la création d'un nouveau fichier terraform.tfstate et inspectez son contenu

Aide:

Création d'un "Bucket S3"

  • Créer un fichier resources.tf dans lequel sera défini la ressource aws_s3_bucket
  • Définissez son nom en utilisant l'argument bucket
  • Expliquer ce qu'est un argument et donner un exemple pour la ressource aws_s3_bucket
  • Expliquer ce qu'est un attribut et donner un exemple pour la ressource aws_s3_bucket
  • Lancer la commande terraform validate. A quoi sert-elle ?
  • Lancer la commande terraform fmt. A quoi sert-elle ?
  • Appliquer les changements
  • Observer à nouveau le contenu du fichier terraform.tfstate
  • Utiliser la commande terraform destroy pour détruire le Bucket S3

Aide:

Variabilisation du nom du Bucket S3 (.tfvars)

Variabiliser le nom donné au Bucket S3. Celui-ci sera défini dans un nouveau fichier nommé vars.tf

  • Le nom de la variable sera bucket_prefix
  • Ne pas définir de valeur par défaut pour le moment
  • Lancer un plan/apply
  • Au "prompt" de la variable bucket_prefix entrer le nom souhaité

Afin d'éviter un "prompt" de la valeur au lancement, définir une valeur par défaut (différente de l'ancienne) pour la variable bucket_prefix.

  • Que se passe-t-il au lancement du plan/apply ?
  • Valider le changement

Pour les questions suivantes, choisir un nom de bucket différent de la valeur par défaut pour s'assurer du succès de la commande:

  • Effectuer un nouvel apply en exportant la variable d'environnement TF_VAR_bucket_prefix
  • Effectuer un nouvel apply en surchargeant la valeur définie par défaut directement en CLI
  • Effectuer un autre apply en surchargeant la valeur définie par défaut en utilisant un fichier de définition de variables nommmé vars.tfvars

Quel est l'ordre de priorité pour la prise en compte des variables ?

Aide:

Variabilisation du nom du Bucket S3 (locals / Data source)

L'objectif de cet exercice est de définir le nom du bucket à l'aide de deux variables:

  • bucket_prefix (défini dans le fichier vars.tf)
  • L'ID du compte AWS sur lequel la ressource est créée (obtenu à l'aide d'une Data-Source nommée aws_caller_identity)

Dans un nouveau fichier nommé data.tf:

  • Définir la "data source" aws_caller_identity qui permettra d'obtenir l'attribut account_id

Dans un nouveau fichier nommé locals.tf:

  • Creer une variable bucket_name concaténant la variable bucket_prefix et l'attribut account_id de la data source aws_caller_identity

Appliquer les changements

Aide:

Upload d'un fichier dans le Bucket S3 (Argument Access / New Provider)

L'objectif de cet exercice est d'upload un fichier local dans le Bucket S3 créé précédemment en utilisant la ressource aws_s3_object. Les contraintes sont les suivantes:

  • L'argument bucket doit spécifier le nom du bucket créé précédemment en appelant le bon attribut de la ressource aws_s3_bucket.
  • L'argument key doit être une concaténation du nom du compte courant AWS (utilisé précédemment) et d'un UUID généré à l'aide de la ressource random_uuid.
  • Le chemin du fichier spécifié dans l'argument source doit être défini depuis le fichier .tfvars.
  • Utiliser le fichier README.md ou créer votre propre fichier à upload.

Pourquoi la commande terraform init est-elle nécessaire à nouveau ?

Aide:

Interaction avec une ressource non gérée par Terraform (Data source)

L'objectif de cet exercice est de récupérer une ressource déjà existante (non gérée par Terraform) et de la copier dans le bucket S3 venant d'être créé.

Dans le fichier data.tf:

  • Définir une "data source" référençant un fichier nommé tf_logo.png dans un bucket nommé formation-terraform-common.

Dans le fichier resources.tf:

  • Utiliser la "data source" pour copier le fichier tf_logo.png dans le bucket créé précédemment.
  • Le fichier de destination s'appellera my_logo.png
  • Variabiliser ce qui peut l'être dans les arguments de aws_s3_object_copy

Aide:

Affichage de métadonnées en sortie (Attribute Access / Outputs)

L'objectif de cet exercice est de récupérer une métadonnée d'une ressource et de l'afficher lors de l'exécution de Terraform.

Dans un nouveau fichier nommé outputs.tf:

  • Créer un "output" permettant d'afficher la date de dernière modification du fichier my_logo.png créé dans l'exercice précédent.

Appliquer les changements et vérifier que cette date est bien affiché en sortie.

Aide:

Configuration d'un backend spécifique

L'objectif de cet exercice est de comprendre ce qu'est un Backend et comment le configurer.

Dans un nouveau fichier backend.tf:

  • Définir un nouveau backend de type local permettant de choisir un nouvel emplacement pour le "state" Terraform. Celui-ci devra être stocké dans un fichier nommé my_state.tfstate
  • Appliquer les changements et vérifier que le "state" se trouve bien dans le nouveau fichier
  • Expliquer la différence entre le flag -reconfigure et le flag -migrate-state

Aide:

Nettoyage

Utiliser la commande terraform destroy pour détruire l'ensemble des ressources créées durant ce TP.

Aide: