Pourquoi Infrastructure as Code pour l'IA ?

Déployer manuellement une infrastructure IA sur AWS, c'est garantir des incohérences entre les environnements, des erreurs humaines et une impossibilité de reproduire exactement la même configuration. Terraform résout tous ces problèmes en un seul fichier déclaratif.

Prérequis : Terraform v1.6+, AWS CLI configuré, kubectl installé. Coût estimé de l'infrastructure : 800-2000€/mois selon les workloads.

Structure du projet Terraform

ai-infra-aws/ ├── main.tf # Point d'entrée ├── variables.tf # Variables paramétrables ├── outputs.tf # Valeurs exposées ├── versions.tf # Versions des providers ├── modules/ │ ├── networking/ # VPC, subnets, security groups │ ├── eks/ # Cluster Kubernetes │ ├── rds/ # Base de données PostgreSQL │ ├── s3/ # Stockage modèles et datasets │ ├── sagemaker/ # Studio et endpoints │ └── monitoring/ # CloudWatch, alertes

Étape 1 : VPC et networking

module "networking" { source = "./modules/networking" vpc_cidr = "10.0.0.0/16" availability_zones = ["eu-west-3a", "eu-west-3b", "eu-west-3c"] private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"] public_subnets = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"] enable_nat_gateway = true single_nat_gateway = false # HA par AZ tags = { Project = "ai-platform" Environment = var.environment ManagedBy = "terraform" } }

Étape 2 : Cluster EKS pour workloads ML

module "eks" { source = "terraform-aws-modules/eks/aws" version = "~> 20.0" cluster_name = "ai-platform-${var.environment}" cluster_version = "1.29" vpc_id = module.networking.vpc_id subnet_ids = module.networking.private_subnets # Node groups pour ML eks_managed_node_groups = { # Noeud CPU pour inférence légère cpu_workers = { instance_types = ["m5.2xlarge"] min_size = 2; max_size = 10; desired_size = 3 } # Noeuds GPU pour entraînement gpu_workers = { instance_types = ["g4dn.xlarge"] min_size = 0; max_size = 4; desired_size = 0 taints = [{ key = "nvidia.com/gpu", value = "true", effect = "NO_SCHEDULE" }] } } }

Étape 3 : S3 pour datasets et modèles

resource "aws_s3_bucket" "ml_artifacts" { bucket = "nando-it-ml-${var.environment}-${random_id.suffix.hex}" tags = local.common_tags } resource "aws_s3_bucket_versioning" "ml_artifacts" { bucket = aws_s3_bucket.ml_artifacts.id versioning_configuration { status = "Enabled" } } # Lifecycle pour optimiser les coûts resource "aws_s3_bucket_lifecycle_configuration" "ml_artifacts" { bucket = aws_s3_bucket.ml_artifacts.id rule { id = "archive-old-models" status = "Enabled" transition { days = 90 storage_class = "GLACIER" } } }

Étapes 4-10 : RDS, SageMaker, monitoring...

Les étapes suivantes couvrent : RDS PostgreSQL pour les métadonnées MLflow, SageMaker Studio pour l'expérimentation interactive, ElastiCache Redis pour le caching des prédictions, CloudWatch pour le monitoring et les alertes, et le déploiement des rôles IAM avec le principe du moindre privilège.

Le code complet est disponible sur demande — je l'inclus dans mes missions de consulting.

Conseils pour réduire les coûts