Automatiser le déploiement et la montée en charge de votre infrastructure cloud est essentiel pour garantir fiabilité et agilité. Dans ce tutoriel, nous montrons comment déployer une infrastructure AWS scalable avec Terraform et GitHub Actions, de la définition des ressources à la livraison continue, avec des exemples concrets et des bonnes pratiques de sécurité.

déployer une infrastructure AWS scalable avec terraform et github actions

1. Prérequis et configuration initiale

  • Compte AWS avec une IAM role ou un utilisateur disposant de droits AdministratorAccess.
  • Installer Terraform v1.5+ (Terraform v1.5) et la CLI AWS (bash ou PowerShell).
  • Repository GitHub prêt à recevoir le code Terraform.

2. Structure du projet Terraform

  1. Créer un répertoire infra/ dans votre repo.
  2. Ajouter les fichiers suivants :
    • main.tf : définition des ressources AWS.
    • variables.tf : paramètres (Région, nombre d’instances…).
    • backend.tf : configuration du state dans un bucket S3.

Exemple de main.tf

provider "aws" {
  region = var.aws_region
}

resource "aws_autoscaling_group" "app_asg" {
  name                      = "app-asg"
  max_size                  = 4
  min_size                  = 2
  desired_capacity          = 2
  launch_template {
    id      = aws_launch_template.app_lt.id
    version = "$$Latest"
  }
  vpc_zone_identifier       = var.subnet_ids
}

Configuration du backend S3

terraform {
  backend "s3" {
    bucket         = "mon-terraform-state"
    key            = "prod/infra.tfstate"
    region         = var.aws_region
    encrypt        = true
    dynamodb_table = "terraform-lock"
  }
}

3. Pipeline GitHub Actions

Dans .github/workflows/ci-cd.yml, on déclenche terraform plan puis terraform apply en cas de push sur main.

name: Terraform CI/CD

on:
  push:
    branches:
      - main

jobs:
  terraform:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v2

      - name: Terraform Init
        run: |
          terraform init \
            -backend-config="bucket=mon-terraform-state" \
            -backend-config="region=${{ secrets.AWS_REGION }}"

      - name: Terraform Plan
        run: terraform plan -out=tfplan

      - name: Terraform Apply
        if: github.ref == 'refs/heads/main'
        run: terraform apply -auto-approve tfplan

4. Commandes CLI essentielles et erreurs fréquentes

  • terraform init : initialisation, vérifier l’accès S3 et DynamoDB pour le verrouillage.
  • terraform fmt -check : normes de style.
  • terraform validate : syntaxe, piège fréquent → déclaration de variable manquante.
Erreur courante : “Error: Missing required argument” → vérifier que variables.tf fournit bien toutes les variables (ex. subnet_ids).

bonnes pratiques pour une infrastructure scalable et sécurisée

  • Verrouillage d’état : activez dynamodb_table pour éviter les conflits sur le state.
  • Versions figées : utilisez required_version et provider locks pour fiabiliser le déploiement (ex. Terraform >= 1.5, AWS >= 5.0).
  • Chiffrement : activez encrypt = true sur votre backend S3 et chiffrez les volumes EBS.
  • Revue de code : intégrez des checks automatiques (terraform fmt, tflint) dans la pipeline.

conclusion

En combinant Terraform et GitHub Actions, vous obtenez un flux DevOps complet, traçable et sécurisé, capable de monter en charge sans effort manuel. Ce setup permet de réduire les temps de provisioning à moins de 5 minutes et d’assurer une traçabilité des modifications.

Vous souhaitez aller plus loin dans l’automatisation et la sécurisation de votre cloud ? Découvrez nos expertises AWS ou contactez notre équipe d’augmentation d’effectif tech pour un accompagnement sur-mesure.