À 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’applycloud 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
- Hub IA pour DevOps : parcours 2026
- Claude vs Cursor vs GitHub Copilot
- Installer Terraform, notions state/plan (overview, modules)
- AI code review sur PR, prompt injection & sécurité
- Abonnement GitHub Copilot ; VS Code ou JetBrains + extension Copilot
- Lab local — aucun token cloud, kubeconfig,
.tfvarssecrets niterraform applyréel
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
- Activez Copilot (org : allowlist repos lab d’abord).
- Extension GitHub Copilot + Chat (VS Code) ou plugin JetBrains ; connectez-vous.
- Workspace lab : Copilot enabled.
- 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/**etenvs/lab/**. - Copilot CLI : expliquer un
validateen é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)
- Surface : autocomplete pour un bloc ; Chat pour expliquer/refactor ; Agent Mode seulement si multi-fichiers lab + instructions repo.
- Never-apply cloud : aucun
terraform applyréel depuis Copilot ; gatesvalidate/ TFLint / Checkov d’abord. - Secrets : pas de clés ni
.tfvarssecrets dans le chat ; profillabou zero credentials. - Standards figés :
.github/copilot-instructions.md(pins~> 5.0, tags, deny public) avant de générer. - 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-labvia 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’applycloud
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
- Docs GitHub : Copilot Chat, Agent Mode, Copilot CLI, custom instructions
- Terraform : installer · modules · S3 sécurité
- Actions OIDC AWS · AI code review PR · prompt injection
- Hub : IA parcours 2026 · Claude vs Cursor vs Copilot
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.