Automatisez les sauvegardes basées sur les événements depuis Amazon S3 GitHub à l’aide CodeBuild et EventBridge
Contexte et Objectifs
Dans un environnement DevOps en constante évolution, l’automatisation des sauvegardes est un élément clé pour garantir la continuité des opérations et la protection des données. Ce projet vise à automatiser la sauvegarde des fichiers d’un dépôt GitHub en mettant en place une architecture event-driven basée sur AWS CodeBuild et Amazon EventBridge. À chaque modification détectée dans le référentiel GitHub, un processus automatisé est déclenché pour cloner, archiver et stocker le dépôt sur Amazon S3. Cette approche assure une gestion optimisée et sécurisée des sauvegardes, offrant une récupération rapide et fiable des données en cas de besoin.
Toujours dans l’optique de vous donner plus de ressources pour pratiquer le cloud AWS et surtout serverless, voici un article qui peut être intéressant à implémenter Construction d’une application serverless en utilisant Step Functions, API Gateway, Lambda et S3 dans AWS.
Durée de mise en place : 30 à 45 min
Prérequis
- Un compte AWS actif. Voici un,lien de création d’un compte créer un compte AWS
- Un GitHub référentiel existant, avec un accès utilisateur configuré en fonction de vos besoins.
- Un compartiment S3 pour le téléchargement des sauvegardes GitHub. Si vous souhaitez en savoir plus sur S3 documentation s3
Temps estimé de lecture: 15 minutes
Temps estimé de réalisation: 2h
Pile technologique
- AWS CodeBuild
- Service managé de compilation et de construction de code.
- Utilisé ici pour cloner le dépôt GitHub, créer une archive ZIP, et l’envoyer vers Amazon S3.
- AWS EventBridge (anciennement CloudWatch Events)
- Permet d’écouter les événements provenant de GitHub et d’invoquer AWS CodeBuild lorsqu’un changement est détecté (ex: git push).
- AWS S3
- Stocke les fichiers ZIP des sauvegardes de GitHub.
- Assure la durabilité et la haute disponibilité des fichiers archivés.
- AWS IAM
- Gère les autorisations des différents services AWS (CodeBuild, S3, EventBridge).
- Création d’un rôle IAM spécifique pour permettre à CodeBuild d’accéder à GitHub, S3 et CloudWatch Logs.
- En savoir plus AWS IAM
- AWS CodeStar Connections
- Assure une connexion sécurisée et authentifiée entre AWS et GitHub.
- Nécessaire pour permettre à AWS d’accéder aux événements du repo GitHub. En savoir plus AWS Code Star
- AWS CloudWatch Logs
- Centralise les logs d’exécution du pipeline CodeBuild.
- Permet de suivre et déboguer le processus en cas d’échec. En savoir plus sur AWS Cloudwatch
- GitHub
- Gère le code source et génère un événement lorsqu’un push est effectué.
Architecture de solution

Réalisation du projet
Etape 1: création d’un rôle IAM AWS CodeBuildConnectez-vous à la console de gestion AWS et ouvrez la console IAM. Choisissez Rôles, puis sélectionnez Créer un rôle. Créez un rôle de service CodeBuild pour cloner le Github.

- Spécifier le le nom du rôle et cliquez sur le bouton “create role”, dans mon cas j’ai mis un nom CodeBuildServicerole
- Ensuite, allez au niveau du menu, et cliquez sur “create policy”.


- Ensuite, allez au niveau du menu, et cliquez sur “create policy”.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::mon-bucket-s3",
"arn:aws:s3:::mon-bucket-s3/*"
]
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue",
"ssm:GetParameter"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"codebuild:BatchGetBuilds",
"codebuild:StartBuild"
],
"Resource": "*"
}
]
}
Une fois que c’est fait, cliquez sur next
- Donnez un nom à votre policy, dans mon cas c’est codeuild-policy



- Attachez la policy au rôle créé précédemment, naviguez et cliquez sur “Role”, ensuite cherchez votre rôle et entrez-y, pour y attacher la policy.



Étape 2 (étapes que vous risquez faire a chaque fois la création de votre projet build va échouer suite à l’échec de configuration du WebHook automatiquement) : configuration de webhook GitHub pour la phase de Build avec AWS CodeBuild, dans le cas où la configuration automatique du webhook par CodeBuild échoue.
- Accédez a votre repo GitHub
- Allez dans Settings → Webhooks

- Cliquez sur « Add webhook »


- Payload URL → Mettez l’URL EventBridge pour GitHub: https://events.amazonaws.com
- Content type : application/json
- Which events would you like to trigger this webhook? → Sélectionnez « Push events »

- Validez la configuration en cliquant sur le bouton add webhook

- Sur la CodeBuild console, choisissez Create CodeBuild project. Créez un CodeBuild project.
- NB: utilisez buildspec.yml ci dessous et mettez-y le fichier a la racine de votre repository concerné:
version: 0.2
phases:
install:
runtime-versions:
python: 3.x
build:
commands:
- echo "Clonage du repo GitHub..."
- git clone $CODEBUILD_SOURCE_REPO repo
- cd repo
- echo "Recherche du fichier CloudFormation..."
- FILE=$(ls *.yaml *.yml | head -n 1) # Trouve le premier fichier YAML
- echo "Fichier trouvé : $FILE"
- echo "Compression du fichier..."
- zip backup-$(date +%F).zip "$FILE"
- echo "Envoi vers S3..."
- aws s3 cp backup-$(date +%F).zip s3://nom-du-bucket/

- Spécifiez le nom de votre projet AWS CodeBuild

- Spécifiez la source, qui represente ici, votre repo GitHub, BitBucket ou GitLab, une fois le choix fait, choisir le repository concerne.

- Spécifiez si vous le voulez, la version de la source qui peut être ici, le pull request, la branche, commit ID, tag, ou référence et commit ID

- Sélectionnez le rôle CodeBuild que vous avez créé précédemment

- Mettre le nom de votre fichier buildspec.yaml que vous avez créé précédemment, et qui se trouve aussi à la racine de votre repo github.

- Choisir le type d’Artifact, dans notre cas l’Artifact sera stocké dans S3.


- Et validez la configuration en cliquant sur “create build project”

Étape 4: Création d’une règle EventBridge
- Dans votre console, cherchez EventBridge

- Choisir l’option “Rules” dans le menu

- Ensuite, cliquer sur “create rule”

- Entrez les détails de la règle EventBridge

- Mais avant de continuer, rassurez vous que vous avez activez ou établie la connexion entre votre GitHub et AWS Code Star. Ici, Code star servira de pont sécurisé entre AWS et GitHub, et il permet à ÉventBridge de réagir aux événements GitHub, comme git push. Un autre point important à savoir, EventBridge ne peut pas écouter directement GitHub sans une connexion établie via AWS.
- Cette configuration de connexion entre GitHub et Code star se fait sur la console de CodeBuild, vous allez chercher sur le menu “setting” et vous cliquez dessus.


Comme vous pouvez le voir ci-dessus, ma connexion est déjà créée, mais je vous montre les étapes quand même.
- Après avoir cliqué sur Create connection, vous verrez une fenêtre comme ci-dessous et vous allez faire vos configurations selon votre use case.

- Après avoir terminé avec les prérequis qui concernent la connexion entre GitHub et Code Star, revenons sur la configuration de EventBridge et continuons ou on s’était arrêté.
- La suite c’est la configuration avec l’Event Pattern qui détecte un git push sur un repo GitHub connecté via AWS CodeStar Connections. Et voici le code JSON que nous allons utiliser.
{
"source": ["aws.codestar-connections"],
"detail-type": ["CodeStar Connections Source Event"],
"resources": ["arn:aws:codestar-connections:REGION:ACCOUNT_ID:connection/CONNECTION_ID"],
"detail": {
"event": ["push"]
}
}
- Remplace REGION par votre région AWS (ex : us-east-1)
- Remplace ACCOUNT_ID par votre ID de compte AWS
- Remplace CONNECTION_ID par l’ID de votre connexion CodeStar vers GitHub
Pour mon cas, voici à quoi ça ressemble.

- Dans « Select targets » (Cibles), choisir : AWS service
- Dans le champ « Select a target service », choisis : CodeBuild project
- Sélectionne ton projet CodeBuild (ex : CodeBuild-Project-Demo)


- Maintenant, il faut juste faire la revue de votre configuration et créer votre événement


Étape 5: phase de teste du projet
- Prérequis avant de commencer les testes, il faut s’assurer que:
✔️ Ton projet CodeBuild est bien configuré avec le bon rôle IAM.
✔️ Ta règle EventBridge écoute bien GitHub (git push).
✔️ CodeStar Connections est « Connected » et actif dans la console.
✔️ Ton buildspec.yml est dans le repo à la racine.
✔️ Ton bucket S3 est bien créé pour stocker le .zip.
- Ouvrir votre terminal, naviguez au niveau de votre repo GitHub
- Ajouter un fichier de tes, exemple test.txt ou mettre à jour les fichiers existants, ensuite faire des:
- git add test.txt
- git commit -m « Test EventBridge & CodeBuild »
- git push origin main
Dans mon cas, j’ai juste fait une mise à jour.

- Surveiller Codebuild
- Allez dans la console AWS
- Ouvrez le service « CodeBuild »
- Cliquez sur votre projet
- Dans l’onglet « Build history » (Historique des builds), vous devriez voir un nouveau build lancé automatiquement.

-
Vous entrez dans le Build history, et vous verrez le build logs

-
-
Vérifiez si le fichier ZIP est bien dans S3
-
Allez sur la console AWS
-
Ouvrez « Amazon S3 »
-
Allez dans votre bucket
-
Vérifiez si un fichier ZIP avec votre code GitHub a été généré et stocké.
-

-
Vérifiez les logs dans CloudWatch
- Si quelque chose ne marche pas :
-
Allez dans « Amazon CloudWatch »
-
Cliquez sur « Logs » > « Log groups »
-
Trouvez le groupe de logs de ton projet CodeBuild
-
Regarde les erreurs possibles


Astuces résolution des Problèmes (Si Ça Ne Fonctionne Pas)
Problèmes |
Solutions |
Aucun build ne démarre |
Vérifiez si EventBridge reçoit bien l’événement GitHub. Si non, vérifiez la connexion CodeStar. |
CodeBuild échoue |
Regardez les logs CloudWatch et vérifiez le buildspec.yml. |
Le ZIP n’apparaît pas dans S3 |
Vérifiez que le rôle IAM a la permission s3:PutObject sur le bucket. |
Erreur d’authentification GitHub |
Assurez-vous que CodeStar Connections est actif et reconnectez-le si besoin. |
Conclusion
Ce projet illustre comment AWS peut automatiser la sauvegarde des fichiers depuis GitHub en utilisant un workflow entièrement serverless et scalable. L’approche event-driven qui garantit la disponibilité et la sécurité des données tout en minimisant l’intervention manuelle. En intégrant cette solution dans un pipeline CI/CD, les équipes DevOps peuvent renforcer la gestion de version et la résilience de leurs applications. Cette architecture peut être répliquée et adaptée pour d’autres types de fichiers et services.
Si vous avez aimé l’article, alors nous vous suggérons plus d’articles pratiques sur notre blog vous permettant de développer vos compétences cloud. Et si vous souhaitez aller plus loin dans le cloud AWS n’hésitez pas à consulter notre formation sur devenez AWS certified Associate Architect et SysOps.
Auteur
- Lahda Biassou Alphonsine: Ingénieur Cloud et formatrice
- LinkedIn: Alphonsine Lahda
Références
📄 AWS EventBridge Documentation
Hashtags
#AWS #CodeBuild #EventBridge #GitHub #CloudAutomation #S3 #DevOps #CloudFormation #IaC #CloudBackup #AWSCloud #Serverless