À la fin de ce tutoriel GitHub Copilot pour IaC, vous saurez positionner Copilot (autocomplete, Chat, Agent Mode, Copilot CLI) sur du Terraform / HCL (Ansible / CloudFormation en bref), configurer des instructions repo, lancer un lab factice module S3, passer les gates terraform validate / tflint / checkov, et appliquer les garde-fous (pas de secrets, pas d’apply cloud réel).

Niveau : Intermédiaire · Temps estimé : 45–55 min · Versions testées : GitHub Copilot (VS Code / JetBrains + Chat GitHub.com, Agent Mode / Copilot CLI 2026) · Terraform ≥ 1.9 · Dernière vérification : 2026-09-11

Slug proposé : github-copilot-iac · Série : Cours IA P0 / IA Outils 2026 — DevOps Elastic Hayway 2026 · Remplace / fusionne : N/A — création

Prérequis

Coût : plan Copilot ; 0 € cloud si vous restez en validate/lint. Risque : IaC hallucinée (ACL publique, IAM *) si apply sans review.

Ce que nous allons construire

lab-copilot-iac/
  ├── .github/copilot-instructions.md
  ├── modules/s3-lab/   (main.tf variables.tf outputs.tf versions.tf)
  ├── envs/lab/main.tf
  ├── .gitignore        (.terraform/, *.tfvars)
  ├── .tflint.hcl
  └── scripts/gates.sh  (validate + tflint + checkov)
       → prompts Copilot · review · gates · jamais apply réel

(Schéma à remplacer par une image locale Excalidraw / draw.io, alt : « GitHub Copilot pour IaC : Chat/Agent, instructions repo, module S3 lab, gates validate/tflint/checkov » — placeholder Visuels.)

Objectif : Copilot = accélérateur IaC sous contrôle, pas un apply autonome.

Étape 1 — Copilot 2026 : surfaces utiles pour l’IaC

Surface Usage IaC
Autocomplete Compléter blocs HCL, arguments, for_each
Copilot Chat (IDE) Expliquer un plan, refactor module, générer variables.tf
Agent Mode Multi-fichiers : module + callers, PR de lab
Copilot CLI Terminal : snippet VPC, revue de diff local
Chat GitHub.com Questions repo / suggestions PR

Combo rentable : Chat + Agent Mode + instructions repo + gates (validate, TFLint, Checkov/tfsec). Autocomplete seul n’impose ni pin provider ni tags. Comparaison Cursor / Claude : Claude vs Cursor vs Copilot — ici on reste Copilot-first Terraform.

Étape 2 — Pourquoi l’IaC (et ses pièges)

Forces : HCL/YAML structurés ; patterns répétables (tags, encryption, modules) ; scaffolding rapide.

Piège Impact
Provider / ressource hallucinés init / plan cassés
Defaults insecure (ACL publique, 0.0.0.0/0) Exposition dès l’apply
Versions non pinées Drift / breaking changes
Secrets dans prompts ou .tf Fuite vendor / Git

Règle : générer → relire → validate/lint/SAST → plan (lab) → humain décide. Jamais apply prod sur suggestion seule.

Étape 3 — Setup : abo, IDE, instructions IaC

  1. Activez Copilot (org : allowlist repos lab d’abord).
  2. Extension GitHub Copilot + Chat (VS Code) ou plugin JetBrains ; connectez-vous.
  3. Workspace lab : Copilot enabled.
  4. Instructions repo pour figer les standards :
<!-- .github/copilot-instructions.md — lab DevOps Elastic Hayway -->
# Instructions IaC (Terraform)
- Provider AWS `hashicorp/aws` `~> 5.0` ; Terraform `required_version >= 1.9`
- Tags obligatoires : Project, Env, ManagedBy
- Interdit : ACL/bucket public, `0.0.0.0/0` sans justification, secrets en clair
- Module = `modules/<name>/` avec main/variables/outputs/versions.tf
- Ne jamais inventer un apply réussi ; proposer validate + lint

Réduit les suggestions « bucket world-readable ». Complétez côté Cursor via Skills si besoin.

Étape 4 — Lab : squelette factice

mkdir -p ~/lab-copilot-iac/{modules/s3-lab,envs/lab,scripts,.github}
cd ~/lab-copilot-iac && git init

cat > .gitignore << 'EOF'
.terraform/
*.tfstate
*.tfstate.*
crash.log
override.tf
*.tfvars
!*.tfvars.example
EOF

printf '%sn' 'config { force = false }' 'plugin "terraform" {' 
  '  enabled = true' '  preset  = "recommended"' '}' > .tflint.hcl

*.tfvars ignoré : pas de secrets dans Git ni (idéalement) dans le contexte Copilot. Gardez un *.tfvars.example vide de secrets.

Étape 5 — Prompts Copilot efficaces (Terraform)

Dans Chat / Agent Mode :

Crée un module Terraform AWS sous modules/s3-lab (bucket S3 lab).
Contraintes STRICTES :
- versions.tf : terraform >= 1.9 ; provider hashicorp/aws ~> 5.0
- block_public_acls / ignore_public_acls / block_public_policy / restrict_public_buckets = true
- Versioning ON ; SSE AES256 (kms optionnel via variable)
- Tags via variable map required : Project, Env, ManagedBy
- variables.tf + outputs bucket_id / bucket_arn ; aucun secret ; aucun apply
- Préfixe ressource "lab-" ; region non hardcodée dans le module
Objectif Ajout prompt
VPC minimal 2 AZ ; pas d’IGW sauf subnet public tagué
Ansible Playbook idempotent ; pas de password en clair
CloudFormation YAML, Parameters typés, DeletionPolicy Retain bucket lab

Anti-prompt : « génère un VPC prod et applique ». Toujours pin, deny public, lab only.

Étape 6 — Review + appel module

Checklist après génération : public access block strict ? pas d’acl = "public-read" ? versions.tf aligné ? outputs utiles ?

# envs/lab/main.tf — lab only, ne pas apply sur un vrai compte
terraform {
  required_version = ">= 1.9"
  required_providers {
    aws = { source = "hashicorp/aws", version = "~> 5.0" }
  }
}

provider "aws" {
  region = "ca-central-1"
  # profil local "lab" ou skip credentials — pas d'apply
}

module "s3_lab" {
  source      = "../../modules/s3-lab"
  bucket_name = "lab-copilot-iac-example-do-not-apply"
  tags = {
    Project   = "copilot-iac-lab"
    Env       = "lab"
    ManagedBy = "terraform"
  }
}

output "bucket_arn" { value = module.s3_lab.bucket_arn }

Si Copilot met force_destroy = true par défaut : refusez sauf lab jetable documenté.

Étape 7 — Gates : validate, TFLint, Checkov

# scripts/gates.sh
#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$ROOT/envs/lab"
terraform fmt -recursive "$ROOT"
terraform init -backend=false
terraform validate
command -v tflint >/dev/null && tflint -c "$ROOT/.tflint.hcl" || true
if command -v checkov >/dev/null; then
  checkov -d "$ROOT/modules/s3-lab" --framework terraform --quiet
elif command -v tfsec >/dev/null; then
  tfsec "$ROOT/modules/s3-lab"
else
  echo "Install checkov or tfsec (lab SAST)"
fi
echo "gates OK — do NOT terraform apply on real cloud"
chmod +x scripts/gates.sh
# terraform init -backend=false && ./scripts/gates.sh

En CI : script en check required ; Copilot / review IA en advisory (AI code review PR). Déploiements sans access keys : Actions OIDC AWS.

Étape 8 — Sécurité prompts, contexte, state

Règle Pratique
Pas de secrets dans le chat Jamais access keys, tokens, mots de passe
.gitignore tfvars / state State distant hors lab
Review avant apply Diff humain + plan lisible
SAST IaC Checkov / tfsec en plus de Copilot
Prompt injection README malveillant peut biaiser l’Agent — détail
Org policies Allowlist repos Copilot

Copilot n’est pas un contrôleur IAM cloud. OIDC, branch protection et SAST restent vos gates. En résumé sécurité P0 : never-apply depuis l’agent, secrets hors chat/Git, instructions repo deny-public, et Checkov/tfsec en check required.

Étape 9 — Agent Mode, CLI et mini scénario

  • Agent Mode : scaffolder module + callers + .gitignore, puis stop avant apply ; bornez mentalement à modules/** et envs/lab/**.
  • Copilot CLI : expliquer un validate en échec ou patch TFLint.
  • Chat GitHub.com : commentaires PR IaC — croiser SAST.

Validation 10 min : (1) prompt contraint → s3-lab (2) relire public block / encryption / tags (3) brancher envs/lab (4) ./scripts/gates.sh (5) demander à Copilot 3 risques restants sans modifier les fichiers (6) pas d’apply.

Critères de décision (Copilot sur IaC)

  1. Surface : autocomplete pour un bloc ; Chat pour expliquer/refactor ; Agent Mode seulement si multi-fichiers lab + instructions repo.
  2. Never-apply cloud : aucun terraform apply réel depuis Copilot ; gates validate / TFLint / Checkov d’abord.
  3. Secrets : pas de clés ni .tfvars secrets dans le chat ; profil lab ou zero credentials.
  4. Standards figés : .github/copilot-instructions.md (pins ~> 5.0, tags, deny public) avant de générer.
  5. Vs Claude Code : Copilot IDE-first ; Claude Code pour agent terminal dense — comparatif, Claude Code Terraform.

Si Agent Mode n’est pas borné (modules/**, envs/lab/**) ou si les instructions manquent, restez en Chat + review manuelle.

Checklist lab Copilot (30–45 min)

  • [ ] Copilot enabled sur le workspace lab + fichier .github/copilot-instructions.md
  • [ ] Scaffold modules/s3-lab via prompt contraint (public block, SSE, tags, pas d’apply)
  • [ ] Brancher envs/lab/main.tf ; relire force_destroy / ACL / versions.tf
  • [ ] ./scripts/gates.sh : fmt + validate + tflint + checkov/tfsec
  • [ ] Demander à Copilot 3 risques restants sans modifier les fichiers
  • [ ] Commit lab/* ; pas d’apply cloud

Erreurs fréquentes

Symptôme Cause Correction
Ressource AWS inconnue Hallucination Doc provider 5.x ; pin version dans le prompt
Bucket public suggéré Prompt vague Instructions repo + deny ACL
Tags absents Pas d’instructions copilot-instructions.md + tags required
Secret dans le Chat Collé par erreur Révoquer / rotator
Apply vers vrai compte Profil AWS défaut Profil lab ou zero credentials
CI verte, IaC dangereuse Pas de Checkov SAST IaC required
Confusion Copilot / Cursor Surfaces différentes Comparatif
Agent Mode hors lab Pas de borne de chemins Limiter à modules/** et envs/lab/** ; review diff

Quiz (5 questions)

1. Rôle de Copilot sur un module Terraform ?
– A. Remplacer plan + review humaine
– B. Accélérer génération/refactor ; gates + humain obligatoires
– C. Apply auto sur AWS

2. Fichier pour standards IaC repo ?
– A. /etc/shadow
– B. .github/copilot-instructions.md
– C. Presse-papiers seul

3. Gate lab sans toucher le cloud ?
– A. terraform destroy -auto-approve prod
– B. terraform validate (+ tflint / checkov)
– C. Uploader des keys dans le Chat

4. Pourquoi ignorer *.tfvars ?
– A. Terraform ne les lit jamais
– B. Éviter de committer / exposer valeurs et secrets au contexte IA
– C. Désactiver Copilot

5. Avant un apply hors lab, required ?
– A. Uniquement LGTM Copilot
– B. Plan lisible + SAST IaC + review humaine (+ OIDC/CI selon policy)
– C. Rien

Réponses : 1‑B · 2‑B · 3‑B · 4‑B · 5‑B

FAQ

Chat ou Agent Mode pour un nouveau module ?
Chat pour une question / un fichier ; Agent Mode pour multi-fichiers. Toujours instructions + review + gates.

Ansible / CloudFormation aussi ?
Mêmes principes (versions, deny insecure, pas de secrets). Lab détaillé = Terraform (overview).

Désactiver Copilot sur repos IaC prod ?
Pas obligatoire : org policy, instructions strictes, pas d’apply depuis l’agent ; certains limitent Agent Mode aux branches lab/*.

Vs Claude Code sur Terraform ?
Surfaces et abo différents — comparatif, Claude Code Terraform.

Faut-il un apply pour valider le lab ?
Non. terraform validate + TFLint + Checkov suffisent pour le lab factice. Un plan (profil lab) est optionnel ; l’apply cloud reste humain et hors scope Copilot.

Comment traiter les secrets avec Copilot ?
Ne jamais coller access keys / tokens dans le Chat. Gitignorer *.tfvars et *.tfstate. En CI, déployer via OIDC AWS plutôt que des clés longues.

Copilot remplace-t-il Checkov / review PR ?
Non. Copilot est advisory ; SAST IaC et review humaine restent required avant tout merge sensible — AI code review PR.

Pour aller plus loin / Ressources & suite

Maillage série IA Outils 2026 — Cours IA P0

← Précédent Claude vs Cursor vs GitHub Copilot
→ Suite AI code review sur PR
Hub IA pour DevOps : parcours 2026
Latéral prompt injection · installer Terraform · Actions OIDC AWS · Claude Code Terraform · OpenTofu vs Terraform

Meta publication (à remplir dans Rank Math / SEO)

  • Title SEO : GitHub Copilot pour IaC : Terraform & garde-fous (2026)
  • Meta description (≤ 155) : GitHub Copilot pour IaC 2026 : Terraform, Agent Mode, instructions repo, lab S3 + validate/tflint/checkov. Guide DevOps FR.
  • Focus keyphrase : github copilot iac
  • KW secondaires : github copilot terraform, copilot agent mode iac, copilot-instructions.md terraform, sécurité copilot iac, tflint checkov copilot, prompts terraform copilot
  • Schemas Rank Math : Article + HowTo (lab) + FAQ/Quiz (5)
  • Image mise en avant : assets/web/devopelastichayway/cover-github-copilot-iac-1200x630.webp (placeholder Visuels)
  • Catégorie : IA · Niveau : Intermédiaire
  • Slug : github-copilot-iac
  • URL cible : https://devopelastichayway.com/tutoriels/github-copilot-iac/
  • Statut : densifié P0 — publish page Tutoriels parent 5463

Retour parcours Git — hub de la série et leçons sœurs.