Une plateforme IA Google Cloud en modules Terraform
Découper l'infrastructure d'un service IA en modules Terraform réutilisables (réseau, IAM, Artifact Registry, Secret Manager, buckets, journaux, Cloud Run), la composer en dev et en prod avec un état distant verrouillé, puis la créer, l'appeler et la détruire pour de vrai.

Le ticket arrive un lundi : « Le service de tri des demandes tombe en prod depuis vendredi, mais marche en dev. » Après une heure, la cause apparaît : en dev, le compte de service a été créé à la main avec le rôle editor ; en prod, quelqu'un a appliqué le main.tf de 1 400 lignes avec une variable oubliée, et le rôle Vertex AI manque. Personne ne sait plus quel fichier décrit quel environnement, et l'état Terraform de prod vit sur le portable d'un collègue en congé.
Ce projet reconstruit cette plateforme proprement : des modules petits avec un contrat clair, une composition par environnement, un état distant versionné et verrouillé, des secrets qui ne touchent jamais l'état. Puis il la crée réellement sur Google Cloud, l'appelle, et la détruit en vérifiant qu'il ne reste rien.
L'entreprise, « Logi-Express », un logisticien de 900 personnes, est fictive. Ses contraintes, elles, sont courantes : données dans l'UE, astreinte réduite, budget cloud suivi par centre de coût.
Ce que vous livrez
- Sept modules réutilisables :
network,service-accounts,artifact-registry,secrets,buckets,logging,cloud-run-service, et une compositionplatformqui les assemble. - Deux environnements,
infra/envs/devetinfra/envs/prod, qui n'appellent queplatformavec des valeurs différentes. - Un bucket d'état GCS versionné, verrou natif, créé par
infra/bootstrap. - Un service FastAPI de tri des demandes (Gemini 2.5 Flash sur Vertex AI), privé, sans clé, avec un jeton lu dans Secret Manager.
- Un
Makefilequi crée, teste et détruit le tout, nettoyage vérifié.
Architecture
flowchart TB
subgraph envs["Racines Terraform"]
DEV["envs/dev<br/>terraform.tfvars"]
PROD["envs/prod<br/>terraform.tfvars"]
end
DEV --> PF["module platform"]
PROD --> PF
PF --> SA["service-accounts"]
PF --> AR["artifact-registry"]
PF --> SM["secrets"]
PF --> BK["buckets"]
PF --> LG["logging"]
PF --> NW["network (prod)"]
PF --> CR["cloud-run-service"]
STATE[("Bucket d'état GCS<br/>versionné + verrou")] -. "état dev / prod" .- DEV
STATE -.- PROD
CR --> VX["Vertex AI<br/>gemini-2.5-flash"]
SM -. "TICKETING_TOKEN" .-> CR
CR -. "journaux" .-> LG
LG --> BK
Stack, coût, durée
| Élément | Choix | Pourquoi |
|---|---|---|
| Terraform | 1.16.0 (≥ 1.11 requis) | arguments write-only pour les secrets |
| Provider | hashicorp/google 8.7 | deletion_policy générique, Cloud Run v2 |
| Exécution | Cloud Run, à zéro instance au repos en dev | facturé à la requête |
| Modèle | gemini-2.5-flash, Vertex AI europe-west1 | données traitées dans l'UE |
| État | GCS, versioning, verrou natif du backend | pas de table de verrou à gérer |
Coût mesuré d'un cycle complet cloud-up + e2e + cloud-down : de l'ordre de quelques centimes (aucune ressource facturée à l'heure en dev). Durée : 6 h de lecture et de pratique ; make cloud-up prend environ une minute.
Prérequis
- Terraform lu et pratiqué :
resource,variable,output,terraform plan/apply. - Un projet Google Cloud où vous avez les droits d'administration IAM, et
gcloudconnecté. - Docker en local pour construire l'image.
- Sans projet Google Cloud :
make testet la lecture de toutes les leçons restent possibles ;make plandemande des identifiants.
Programme
| # | Leçon | Vous finissez avec |
|---|---|---|
| 1 | Découper en modules | make test vert sur 7 modules |
| 2 | État distant et environnements | un bucket d'état réel, un verrou démontré |
| 3 | Identités, registre et secrets | un secret absent de l'état, vérifié |
| 4 | Stockage, journaux et réseau | un sink qui a le droit d'écrire |
| 5 | Le service Cloud Run et la composition | le module platform complet |
| 6 | Planifier dev et prod | deux plans lus et compris |
| 7 | Appliquer, appeler, détruire | make e2e vert, make cloud-down vérifié |
Le code complet est dans files/ ; le projet suivant, Terraform testé et gouverné, ajoute tests natifs, tflint, checkov, politiques OPA et détection de dérive sur ces mêmes modules.
Ressources
Tout télécharger (.zip)Références
- Terraform : backend GCS (état distant et verrouillage)developer.hashicorp.com
- Terraform : quand ne pas utiliser les workspaces CLIdeveloper.hashicorp.com
- Terraform : arguments write-only (secrets hors de l'état)developer.hashicorp.com
- Google Cloud : bonnes pratiques Terraform, modules réutilisablescloud.google.com
- Google Cloud : bonnes pratiques Terraform, modules racinescloud.google.com
- Provider google : google_cloud_run_v2_serviceregistry.terraform.io
- IAM : délai de propagation des changements d'accèscloud.google.com