AccueilBlogTest technique Terraform pour la data : IaC, modules, state, CI/CD
Guide recrutement data

Test technique Terraform pour la data : IaC, modules, state, CI/CD

Terraform est devenu incontournable pour les Data Engineers qui provisionnent des ressources cloud. En entretien, on evalue la capacite a ecrire des modules reutilisables et a gerer le state en equipe.

Data Builder·Juin 2025·6 min de lecture·Data Engineer
Sommaire
  1. Concepts fondamentaux
  2. Modules reutilisables
  3. Gestion du state
  4. CI/CD Terraform
  5. Resources data courantes
  6. Import et refactoring
  7. Grille

1Concepts fondamentaux Terraform

Question discriminante

Quelle est la difference entre terraform plan et terraform apply ? Et entre un resource et un data source ?

# Structure d un projet Terraform data . ├── main.tf # ressources principales ├── variables.tf # inputs ├── outputs.tf # outputs ├── versions.tf # versions des providers └── modules/ ├── bigquery/ │ ├── main.tf │ └── variables.tf └── gcs/ └── main.tf # versions.tf terraform { required_version = '>= 1.5' required_providers { google = { source = 'hashicorp/google' version = '~> 5.0' } } }

2Modules : encapsuler l infrastructure data

Question discriminante

Comment creez-vous un module Terraform reutilisable pour un dataset BigQuery ?

# modules/bigquery/main.tf resource 'google_bigquery_dataset' 'this' { dataset_id = var.dataset_id project = var.project_id location = var.location description = var.description labels = var.labels dynamic 'access' { for_each = var.access_roles content { role = access.value.role user_by_email = access.value.email } } delete_contents_on_destroy = var.delete_on_destroy } # Appel du module module 'dataset_analytics' { source = './modules/bigquery' dataset_id = 'analytics_prod' project_id = var.project_id location = 'EU' access_roles = [ { role = 'READER', email = 'analysts@company.com' } ] }

3Gestion du state en equipe

Question discriminante

Pourquoi ne faut-il jamais stocker le state Terraform localement en equipe ? Comment le gerez-vous ?

# backend.tf - remote state dans GCS terraform { backend 'gcs' { bucket = 'mon-projet-tfstate' prefix = 'terraform/data-platform' } } # Locking automatique via Cloud Storage # Empêche deux apply simultanes # Workspaces : environnements separes terraform workspace new staging terraform workspace select production

4CI/CD Terraform avec GitHub Actions

Question discriminante

Comment integrez-vous Terraform dans un pipeline CI/CD ?

# .github/workflows/terraform.yml name: Terraform on: pull_request: paths: ['infra/**'] push: branches: [main] jobs: terraform: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: hashicorp/setup-terraform@v3 - name: Terraform Init run: terraform init working-directory: infra/ - name: Terraform Plan run: terraform plan -out=tfplan - name: Terraform Apply # uniquement sur main if: github.ref == 'refs/heads/main' run: terraform apply tfplan

5Resources data courantes en Terraform

6Import de ressources existantes

Question discriminante

Comment gerez-vous l infrastructure existante qui n a pas ete creee avec Terraform ?

# terraform import : prendre le controle d une ressource existante terraform import google_bigquery_dataset.analytics \ projects/mon-projet/datasets/analytics # Terraform 1.5+ : import block dans le code import { to = google_bigquery_dataset.analytics id = 'projects/mon-projet/datasets/analytics' } # terraform plan -generate-config-out=generated.tf # Genere automatiquement le code Terraform pour les ressources importees

7Grille par niveau

NiveauMaitriseSignal GONO-GO
JuniorSyntaxe HCL, plan/apply, ressources basiquesCree un bucket GCS et un dataset BigQuery, sait faire un planNe sait pas ce qu est le state Terraform
ConfirmeModules, remote backend, variables et outputsA cree un module reutilisable, configure un remote backend GCS/S3Stocke le state en local, ne sait pas creer un module
SeniorCI/CD, import, workspaces, gestion des secretsA integre Terraform dans GitHub Actions, a fait un terraform importNe sait pas ce qu est le state locking

Vous recrutez un Data Engineer cloud ?

Premier entretien gratuit. Rapport GO/NO-GO sous 48h.