Dans un contexte où les startups et les PME adoptent de plus en plus les architectures microservices, maîtriser l’infrastructure as code (IaC) devient un atout majeur. Terraform, avec sa version 1.5 et son écosystème riche, permet de provisionner et de gérer efficacement des clusters Kubernetes (EKS) sur Amazon Web Services. Ce tutoriel technique s’adresse aux CTO et ingénieurs DevOps souhaitant automatiser leur infrastructure AWS de manière fiable et reproductible.

pré-requis et installation de Terraform

  • Terraform v1.5 installé (https://terraform.io)
  • Compte AWS avec droits IAM pour EKS, EC2, VPC
  • kubectl et AWS CLI configurés (aws configure)
# Sous macOS via Homebrew
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
terraform -version  # doit afficher v1.5.x

1. configurer le backend distant pour l’état Terraform

Pour collaborer en équipe, centralisez l’état Terraform dans un bucket S3 avec verrouillage DynamoDB :

terraform {
  backend "s3" {
    bucket         = "mon-terraform-state"
    key            = "prod/eks/terraform.tfstate"
    region         = "eu-west-1"
    dynamodb_table = "terraform-locks"
  }
}

2. déclarer le provider AWS et variables

provider "aws" {
  region = var.aws_region
}

variable "aws_region" {
  default = "eu-west-1"
}

variable "cluster_name" {
  default = "startup-eks-cluster"
}

3. créer le réseau et le cluster EKS

Utilisez le module officiel :

module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "4.0.0"
  name    = "vpc-eks"
  cidr    = "10.0.0.0/16"
  azs     = ["eu-west-1a","eu-west-1b"]
  public_subnets  = ["10.0.1.0/24","10.0.2.0/24"]
  private_subnets = ["10.0.101.0/24","10.0.102.0/24"]
}

module "eks" {
  source          = "terraform-aws-modules/eks/aws"
  version         = "19.0.0"
  cluster_name    = var.cluster_name
  cluster_version = "1.27"
  subnets         = module.vpc.private_subnets
  vpc_id          = module.vpc.vpc_id
  manage_aws_auth = true
}

4. auto-scaling des nœuds

module "node_groups" {
  source          = "terraform-aws-modules/eks-node-group/aws"
  cluster_name    = module.eks.cluster_name
  node_group_name = "workers"
  subnet_ids      = module.vpc.private_subnets
  instance_types  = ["t3.medium"]
  scaling_config = {
    desired_size = 3
    max_size     = 6
    min_size     = 2
  }
}

5. déployer vos microservices conteneurisés

Avec Helm, automatisez le déploiement :

provider "helm" {
  kubernetes {
    config_path = "~/.kube/config"
  }
}

resource "helm_release" "api_service" {
  name       = "api-service"
  repository = "https://charts.myrepo.com"
  chart      = "api-service"
  version    = "2.3.1"
  values     = [file("values-prod.yaml")]
}

bonnes pratiques Terraform pour production

  • Verrouillage d’état avec DynamoDB pour éviter les conflits.
  • Modules réutilisables pour standardiser VPC, EKS, RDS…
  • Séparation des environnements via workspaces (dev/prod).
  • Linting et validation avec terraform validate et tflint.
  • CI/CD : Intégrez Terraform dans Jenkins ou GitHub Actions pour déploiement continu.

conclusion

En adoptant Terraform pour gérer votre infrastructure AWS, vous gagnez en agilité et en fiabilité. Cette approche permet d’industrialiser le déploiement de vos microservices, de réduire drastiquement les risques d’erreur manuelle et d’accélérer votre time-to-market. Pour un accompagnement DevOps sur mesure ou une séance de conseil offerte, contactez-nous ou obtenez un devis.