Aller au contenu

Infrastructure Terraform

Terraform est un outil open source d’infrastructure as code qui permet de créer, modifier et améliorer une infrastructure de manière sécurisée et prévisible.

Le générateur d’infrastructure Terraform crée un projet d’infrastructure Terraform. L’application générée intègre des bonnes pratiques de sécurité grâce aux vérifications de sécurité Checkov.

Vous pouvez générer un nouveau projet Terraform de deux manières :

  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - terraform#project
  5. Remplissez les paramètres requis
    • name: tf-infra
  6. Cliquez sur Generate
Paramètre Type Par défaut Description
name Requis string - The name of the project.
type string application Whether this is a terraform lib (re-usable modules) or app (deployable).
directory string packages The directory of the new project.

Le générateur crée des structures de fichiers différentes selon le type de projet :

Pour les projets d’application (--type=application), le générateur crée une application Terraform complète avec gestion d’état distant :

  • Répertoiresrc
    • main.tf Fichier de configuration principal Terraform
    • providers.tf Configuration des providers avec backend S3
    • variables.tf Définitions des variables d’entrée
    • outputs.tf Définitions des valeurs de sortie
    • Répertoireenv Fichiers de variables spécifiques à l’environnement
      • dev.tfvars Variables d’environnement de développement
  • Répertoirebootstrap Configuration bootstrap pour l’état distant
    • main.tf Bucket S3 et politiques de stockage d’état
    • providers.tf Configuration du provider AWS
    • variables.tf Définitions des variables bootstrap
  • project.json Configuration du projet et cibles de build

Pour les projets de bibliothèque (--type=library), le générateur crée une structure simplifiée pour des modules Terraform réutilisables :

  • Répertoiresrc
    • main.tf Fichier principal du module Terraform
  • project.json Configuration du projet et cibles de build

Vous pouvez commencer à écrire votre infrastructure Terraform dans src/main.tf, par exemple :

src/main.tf
locals {
account_id = data.aws_caller_identity.current.account_id
aws_region = data.aws_region.current.id
}
resource "null_resource" "print_info" {
# triggers = {
# always_run = timestamp()
# }
provisioner "local-exec" {
command = "echo 'AWS Region: ${local.aws_region}, AWS Account: ${local.account_id}, Environment: ${var.environment}'"
}
}
# Déclarez votre infrastructure ici
resource "aws_s3_bucket" "my_bucket" {
bucket = "my-unique-bucket-name"
}

Pour exécuter un module d’un projet séparé (lib), vous pouvez procéder ainsi :

module "lib_module" {
source = "../../path/to/my-lib/src"
}

Cela mettra automatiquement à jour le graphe Nx pour ajouter une dépendance entre votre application consommatrice et votre librairie.

Configurez les variables spécifiques à l’environnement dans les fichiers src/env/*.tfvars.

Pour ajouter de nouveaux environnements, créez un nouveau fichier src/env/<environment>.tfvars avec les variables spécifiques et ajoutez de nouvelles entrées pour apply, destroy, init, plan dans le project.json. Par exemple, ajoutons un environnement prod :

# Variables d'environnement de production
environment = "prod"
region = "us-west-2"

Bootstrap d’état distant (Projets application uniquement)

Section intitulée « Bootstrap d’état distant (Projets application uniquement) »

Pour les projets application, avant de déployer votre infrastructure, vous devez initialiser le backend d’état distant. Cela crée un bucket S3 pour stocker vos fichiers d’état Terraform :

Terminal window
pnpm nx run tf-infra:bootstrap

Les cibles disponibles dépendent du type de projet :

Validez votre configuration Terraform avec la cible validate :

Terminal window
pnpm nx run tf-infra:validate

Formatez votre code Terraform avec la cible fmt :

Terminal window
pnpm nx run tf-infra:fmt

Exécutez des vérifications de sécurité sur votre infrastructure avec Checkov via la cible test :

Terminal window
pnpm nx run tf-infra:test

Vous trouverez les résultats des tests de sécurité dans le dossier dist racine, sous dist/packages/<my-terraform-project>/checkov.

Les cibles suivantes sont uniquement disponibles pour les projets de type application :

Avant d’appliquer des changements, visualisez les actions Terraform avec la cible plan :

Terminal window
pnpm nx run tf-infra:plan

Cela crée un fichier de plan dans dist/packages/<my-terraform-project>/terraform/dev.tfplan.

Initialisez votre répertoire de travail Terraform avec la cible init :

Terminal window
pnpm nx run tf-infra:init

Après la planification, déployez votre infrastructure sur AWS avec la cible apply :

Terminal window
pnpm nx run tf-infra:apply

Récupérez les valeurs de sortie de votre configuration Terraform :

Terminal window
pnpm nx run tf-infra:output

Pour supprimer votre infrastructure, utilisez la cible destroy :

Terminal window
pnpm nx run tf-infra:destroy

Pour nettoyer les ressources bootstrap (bucket S3 de stockage d’état) :

Terminal window
pnpm nx run tf-infra:bootstrap-destroy

Pour plus d’informations sur Terraform, consultez la Documentation Terraform et la Documentation du provider AWS.