Tester un Template CloudFormation avec GitHub Actions

Tester un Template CloudFormation avec GitHub Actions


PERSONNEL
Cloud DevOps GitHub Actions AWS CICD Cloud Engineer Academy

Ce projet m’a énormément appris. C’était super intéressant de voir qu’on pouvait valider du code IaC avant de le fusionner dans la branche main. Franchement, je n’y avais jamais pensé avant. Le code du projet est dispo ici.


1 — Vue d’ensemble
2 — Étapes
3 — Conclusion


1 - Vue d’ensemble

L’objectif de ce projet est de créer un workflow GitHub Actions qui automatise la création d’un bucket S3 à l’aide d’un template CloudFormation, et de tester ce déploiement au sein d’une Pull Request (PR). Le but, c’est de valider le template avant qu’il ne soit mergé dans la branche principale.

  • Lorsqu’un dev crée une PR pour merger vers main, le workflow va :
    • Utiliser le template CloudFormation pour créer un bucket S3.
    • Poster le résultat dans la PR avec le nom du bucket.
    • Une fois la PR mergée, le workflow va supprimer la stack (et le bucket), ce qui nettoie les ressources automatiquement.

Ce mécanisme nous permet de tester notre code IaC dans la PR, donc avant qu’il parte en prod. Super pratique pour éviter d’introduire des erreurs dans l’environnement principal.

En prod, un autre workflow (déclenché depuis la branche main) pourrait se charger du déploiement final dans un environnement dédié.

On utilise ici le repo GitHub du projet précédent.


2 - Étapes

Étape 1 : Création d’une Pull Request

Une fois qu’une nouvelle branche est créée, le dev ouvre une pull request. Ça déclenche le workflow qui tente de créer un bucket S3 via le template CloudFormation.

Étape 2 : Gestion des erreurs

Dès le premier run, le workflow a levé une erreur à cause d’une mauvaise indentation dans le template CloudFormation.

  • Les logs ont pointé vers la structure incorrecte du template. Une fois corrigée, on a relancé le pipeline.

Étape 3 : Validation réussie et création des ressources

Après la correction, le pipeline s’est déroulé sans souci. Le bucket S3 a bien été créé, et un message de validation a été posté dans la PR, avec le nom du bucket.

  • Stack CloudFormation créée avec succès :

  • Bucket S3 bien créé :

Étape 4 : Le job de cleanup ne s’exécute pas

Après merge de la PR, on a remarqué que le job de nettoyage (suppression du bucket et de la stack) ne s’était pas déclenché. Il a donc fallu revoir la config du workflow.

Étape 5 : Mise à jour du workflow

Pour corriger ça, on a mis à jour la config avec ce bloc :

on:
  pull_request:
    paths:
      - "cloudformation/**"
    types: [opened, synchronize, reopened, closed]

Ce bloc permet de déclencher le workflow sur des événements PR spécifiques (opened, synchronized, reopened, and closed) et uniquement quand les fichiers cloudformation/ sont modifiés.

Étape 6 : Éviter la validation lors du merge

On ne veut pas que la validation du template se fasse après le merge. On a donc ajouté une condition dans le job validate-cfn :

jobs:
  validate-cfn:
    if: github.event.pull_request.merged == false

Comme ça, la validation ne tourne que si la PR n’est pas encore mergée.

Étape 7 : Cleanup automatique réussi

Une fois les corrections appliquées, tout a bien fonctionné : le job de nettoyage s’est lancé après le merge, et la stack + le bucket ont bien été supprimés.

Et voilà : on a pu valider le template dans la PR, merger en toute confiance, et nettoyer les ressources juste après. Après la création d’une nouvelle branche et d’une pull request, notre workflow a trouvé une erreur dans notre template cloudformation.

3 - Conclusion

Ce projet montre bien la puissance de GitHub Actions couplée à CloudFormation pour automatiser les tâches infra.

Avec ce workflow, on peut :

  • Valider le code IaC dès les pull requests.
  • Assurer la validité du template avant qu’il parte en production.
  • Créer et supprimer automatiquement les ressources, gardant un environnement propre.

En prod, ce genre de setup serait encore plus costaud, avec des workflows séparés pour le staging et la prod.

Et surtout : automatiser la validation et le nettoyage d’infrastructure rend les changements bien plus sûrs, reproductibles et simples à gérer, peu importe l’environnement.

Honnêtement, je ne m’étais jamais dit qu’on pouvait tester de l’IaC comme ça dans une PR. Super découverte !

© 2025 Issam SISBANE