Automatisez les sauvegardes basées sur les événements depuis Amazon S3 GitHub à l’aide CodeBuild et EventBridge

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

  1. 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.
  2. 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).
  3. AWS S3
    • Stocke les fichiers ZIP des sauvegardes de GitHub.
    • Assure la durabilité et la haute disponibilité des fichiers archivés.
  4. 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
  5. 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
  6. 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
  7. GitHub
    • Gère le code source et génère un événement lorsqu’un push est effectué.

Architecture de solution

Installation de packer

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.

Installation de packer
  • 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”.
Installation de packer
Installation de packer
  • 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
Installation de packer
Installation de packer
Installation de packer
  • 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.
Installation de packer
Installation de packer
Installation de packer

É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
Installation de packer

  • Cliquez sur « Add webhook »
Installation de packer
Installation de packer
  • 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 »
Installation de packer
  • Validez la configuration en cliquant sur le bouton add webhook
Installation de packer
Etape 3: créer un projet AWS CodeBuild

  • 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/

Installation de packer
  • Spécifiez le nom de votre projet AWS CodeBuild
Installation de packer
  • Spécifiez la source, qui represente ici, votre repo GitHub, BitBucket ou GitLab, une fois le choix fait, choisir le repository concerne.
Installation de packer
  • 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
Installation de packer
  • Sélectionnez le rôle CodeBuild que vous avez créé précédemment
Installation de packer
  • 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.
Installation de packer
  • Choisir le type d’Artifact, dans notre cas l’Artifact sera stocké dans S3.
Installation de packer
Installation de packer
  • Et validez la configuration en cliquant sur “create build project”
Installation de packer

Étape 4: Création d’une règle EventBridge

  • Dans votre console, cherchez EventBridge
Installation de packer
  • Choisir l’option “Rules” dans le menu
Installation de packer
  • Ensuite, cliquer sur “create rule”
Installation de packer
  • Entrez les détails de la règle EventBridge
Installation de packer
  • 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.
Installation de packer
Installation de packer

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.
Installation de packer
  • 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.
Installation de packer
Ajouter la Cible (AWS CodeBuild)

  • 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)
Installation de packer
Installation de packer
  • Maintenant, il faut juste faire la revue de votre configuration et créer votre événement
Installation de packer
Installation de packer

É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.

Installation de packer
  • 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.
Installation de packer
  • Vous entrez dans le Build history, et vous verrez le build logs

    Installation de packer
      • 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é.

    Installation de packer
      • 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

    Installation de packer
    Installation de packer

    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 CodeBuild Documentation

    📄 AWS EventBridge Documentation

    📄 AWS S3 Documentation

    📄 AWS IAM Best Practices

     

    Hashtags

    #AWS #CodeBuild #EventBridge #GitHub #CloudAutomation #S3 #DevOps #CloudFormation #IaC #CloudBackup #AWSCloud #Serverless