Déployer sur AWS avec CodePipeline et CodeBuild

1. Introduction

Dans ce tutoriel, nous allons mettre en place un pipeline CI/CD complet sur AWS en utilisant les services natifs AWS CodePipeline et AWS CodeBuild.

L’objectif est d’automatiser tout le cycle de vie d’une application : récupération du code depuis GitHub, build, tests et déploiement, à chaque nouveau push sur le dépôt.

Ce que tu vas apprendre dans ce guide

  • Comprendre le rôle et le fonctionnement de CodePipeline dans une chaîne CI/CD
  • Configurer CodeBuild pour compiler et tester ton application
  • Connecter ton dépôt GitHub à AWS de manière sécurisée
  • Mettre en place un déploiement automatique déclenché par les modifications du code

À la fin de ce tutoriel, ton application sera automatiquement testée, buildée et déployée sur AWS, sans aucune intervention manuelle.

Pourquoi utiliser AWS pour le CI/CD ?

AWS se distingue des autres solutions par son approche 100% cloud et managée :

  • Zéro maintenance : contrairement à Jenkins, pas de serveur à gérer
  • Intégration native : connexion fluide avec tous les services AWS
  • Scalabilité automatique : ton pipeline s'adapte à la charge sans configuration
  • Pay-as-you-go : tu ne paies que pour ce que tu utilises réellement

2. Prérequis et configuration

Avant de commencer, assure-toi d’avoir tous les éléments nécessaires pour suivre ce tutoriel sans blocage :

  • Un compte AWS actif. Tu peux le créer gratuitement (1€)ici. Tu peux utiliser la version gratuite pendant 6 mois.
  • Une application simple (par exemple un projet HTML/CSS/JS ou Node.js)
  • Un compte GitHub avec un repository contenant ton application
  • Connaissance basique de Git et des commandes de push

Les services AWS que nous allons utiliser

  • AWS CodePipeline : service d’orchestration qui définit les étapes de ton pipeline CI/CD (source, build, tests, déploiement). Dès qu’un push est détecté dans ton dépôt GitHub, CodePipeline déclenche automatiquement le flux.
  • AWS CodeBuild : service de build managé qui exécute les commandes définies dans un fichier buildspec.yml. Il permet d’installer les dépendances, lancer les tests, générer les artefacts et préparer ton application pour le déploiement.

Contrairement à Jenkins, AWS gère l’infrastructure. Tu n’as pas besoin de serveur ou d’agent à maintenir. Tu bénéficies d’une solution scalable, sécurisée et directement intégrée à l’écosystème AWS.

3. Création du projet AWS CodeBuild

Nous allons maintenant configurer AWS CodeBuild, le service qui va se charger de builder et tester automatiquement notre application. CodeBuild fonctionne comme un robot qui exécute une série de commandes à chaque fois que ton code change.

Qu'est-ce que CodeBuild fait concrètement ?

Imagine que tu développes une application React. À chaque modification, tu dois normalement :

  • 1. Installer les dépendances (npm install)
  • 2. Lancer les tests (npm test)
  • 3. Créer la version de production (npm run build)

CodeBuild automatise tout ça ! Il exécute ces commandes dans un environnement propre à chaque fois.

Étape 1 : Accéder à CodeBuild

Connecte-toi à la console AWS (ton compte AWS) puis dans la barre de recherche en haut, tape "CodeBuild" et clique sur le service. Une fois sur la page CodeBuild, clique sur le bouton orange Create project.

Étape 2 : Configuration du projet

Tu vas maintenant remplir plusieurs champs. Ne t'inquiète pas, je vais t'expliquer chaque section en détail.

Project configuration

  • Project name : my-app-build

    Choisis un nom descriptif pour identifier facilement ton projet. Exemple : mon-site-web-build ou api-backend-build

  • Description

    Tu peux ajouter une description si tu veux. Elle est optionnelle.

Tu peux laisser tous les autres champs dans Additional configuration

Source

  • Source provider : Sélectionne GitHub

    C'est ici que se trouve ton code source. CodeBuild ira chercher ton code directement depuis GitHub. AWS va te demander d'autoriser l'accès à ton compte GitHub. C'est normal et sécurisé !

    Tu cliques sur Manage credentials pour autoriser AWS à accéder à ton compte GitHub. Voici le processus :

    1. Donne un nom à la connexion
    2. Clique sur Connect to GitHub
    3. Tu seras redirigé vers GitHub puis clique sur Authorize AWS Connector for GitHub
    4. Choisis si tu veux autoriser l'accès à tous tes repositories ou seulement à certains repositories spécifiques (recommandé pour la sécurité)
    5. Clique sur Install new app
    6. Tu reviens automatiquement sur AWS et tu cliques sur Connect puis Save
  • Repository : Clique sur Repository in my GitHub account

    Une fois connecté, sélectionne ton repository dans la liste.

Environment

  • Environment image : Sélectionne Managed image

    AWS te fournit des images préconfigurées. C'est plus simple que de créer ta propre image Docker.

  • Running mode : Sélectionne Container

    Correspond à l'option "Managed image" puisque AWS va lancer l'op&ration sur un container Docker.

  • Operating system : Ubuntu

    Ubuntu est un système Linux stable donc compatible avec la plupart des projets.

  • Runtime(s) : Standard

    Standard inclut les outils les plus courants (Node.js, Python, Java, etc.)

  • Image : Sélectionne la dernière version

    Prends toujours la version la plus récente pour avoir les dernières mises à jour de sécurité.

  • Service role : Laisse New service role

    AWS va créer automatiquement un rôle nommé avec les permissions nécessaires pour faire fonctionner CodeBuild.

Buildspec

  • Build specifications : Sélectionne Use a buildspec file

    Cela indique à CodeBuild qu'il doit chercher un fichier buildspec.yml à la racine de ton projet. On va créer ce fichier juste après !

  • Buildspec name : Laisse vide

    Le nom par défaut buildspec.yml est utilisé

Batch configuration

Cette partie permet de lancer plusieurs builds à la fois. Dans notre cas nous n'en avons pas besoin donc tu peux laisser.

Artifacts (optionnel pour l'instant)

Tu peux laisser No artifacts pour le moment. Les artifacts sont les fichiers générés après le build. On les configurera plus tard au moment du déploiement.

Logs (optionnel)

Tu peux activer CloudWatch logs pour garder une trace de tous tes builds. C'est très utile pour débugger en cas de problème !

Une fois tous les champs remplis, clique sur Create build project en bas de la page. Nous allons maintenant créer le fichier buildspec.yml.

Étape 3 : Créer le fichier buildspec.yml

Le fichier buildspec.yml est le cerveau de ton build. Il contient toutes les instructions que CodeBuild doit exécuter et doit être placé à la racine de ton projet.

Tu peux crée le fichier buildspec.yml avec le contenu suivant :

version: 0.2

phases:
  install:
    commands:
      - npm install
  build:
    commands:
      - npm run build

artifacts:
  files:
    - '**/*'
  base-directory: build

Décryptage du buildspec.yml

  • version: 0.2: c'est la version du format buildspec. Utilise toujours 0.2, c'est la version actuelle.
  • phases: les différentes étapes du build. Chaque phase s'exécute dans l'ordre.
  • install: phase d'installation des dépendances.
  • build : phase de compilation. npm run build crée la version optimisée de ton application.
  • artifacts: définit quels fichiers doivent être sauvegardés après le build. "**/*" signifie "tous les fichiers", et base-directory: build indique que ces fichiers se trouvent dans le dossier build.

Adapter le buildspec à ton projet

Si tu n'utilises pas React/Node.js, voici comment adapter les commandes :

  • Python : Remplace npm install par pip install -r requirements.txt
  • Java/Maven : Utilise mvn clean install
  • HTML/CSS statique : Tu peux sauter la phase de build puisque tu n'as pas de compilation. Voici un exemple de fichier buildspec.yml pour un projet html :
    version: 0.2
    
    phases:
      install:
        runtime-versions:
          nodejs: 18
      
      build:
        commands:
          - echo "Build started on `date`"
      
      post_build:
        commands:
          - echo "Build completed on `date`"
    
    artifacts:
      files:
        - '**/*'

Une fois le fichier créé, commit et push-le sur GitHub.

Étape 4 : Tester ton build

Maintenant que tout est configuré, testons si ça fonctionne !

  1. Retourne sur la page de ton projet CodeBuild dans la console AWS
  2. Clique sur le bouton Start build en haut à droite
  3. Observe le build en temps réel ! Tu verras chaque commande s'exécuter étape par étape

Si ton build est passé au vert, félicitations ! Ton projet CodeBuild est correctement configuré et prêt à être intégré dans un pipeline complet.

Exemple de build réussi

⚠️ Build en échec ?

Pas de panique ! Voici les erreurs les plus courantes :

  • npm: command not found : vérifie que tu as bien sélectionné un runtime avec Node.js
  • buildspec.yml not found : le fichier doit être à la racine de ton repo et s'appeler exactement buildspec.yml
  • npm ERR! missing script: build : ton package.json n'a pas de script "build". Ajoute-le ou change la commande dans le buildspec.

Pour débugger, clique sur ton build et lis attentivement les logs. L'erreur est généralement bien indiquée !

Dans la section suivante, on va automatiser tout ça avec CodePipeline.

4. Création du pipeline avec AWS CodePipeline

Maintenant que notre projet CodeBuild est configuré et testé, nous allons créer le pipeline CI/CD avec AWS CodePipeline.

CodePipeline va automatiser l'enchaînement : détecter les changements sur GitHub → lancer CodeBuild → déployer l'application. Le tout sans intervention manuelle !

Étape 1 : Accéder à CodePipeline

Dans la console AWS, utilise la barre de recherche en haut et tape "CodePipeline", puis clique sur le service. Clique ensuite sur le bouton orange Create pipeline.

AWS te propose plusieurs types de pipelines. Dans notre cas, nous allons choisir l'option "Build custom pipeline" puis cliquer sur Next.

Étape 2 : Configuration générale (Pipeline settings)

Informations de base

  • Pipeline name : my-app-pipeline

    Donne un nom clair à ton pipeline.

  • Service role : Sélectionne New service role

    AWS va automatiquement créer un rôle IAM avec les permissions nécessaires pour que CodePipeline puisse accéder à CodeBuild, GitHub, et aux autres services AWS. Le nom sera généré automatiquement.

Advanced settings

Tu peux laisser les paramètres par défaut, mais voici ce qu'ils signifient :

  • Artifact store : Default location

    AWS va créer automatiquement un bucket S3 pour stocker les artefacts (fichiers générés pendant le build). Tu n'as pas besoin de le créer manuellement.

  • Encryption key : Default AWS Managed Key

    Les artefacts seront chiffrés automatiquement avec une clé gérée par AWS. C'est sécurisé et gratuit.

Une fois rempli, clique sur Next.

Étape 3 : Configurer la source du code (Add source stage)

Cette étape définit d'où vient ton code. C'est ici que tu connectes ton repository GitHub.

  • Source provider : Sélectionne GitHub (via GitHub App)

    "GitHub (via GitHub App)" est la méthode recommandée par AWS. Elle offre une sécurité renforcée avec des permissions granulaires, permet de réutiliser la connexion pour d'autres pipelines, et utilise les GitHub Apps pour une meilleure gestion de l'authentification. L'option OAuth app est désormais obsolète.

  • Connection : Sélectionne ta connexion GitHub existante dans le menu déroulant

    Nous avions déjà créé une connexion GitHub pour CodeBuild, tu peux la réutiliser ici. Cela évite de créer des connexions multiples et simplifie la gestion des autorisations GitHub.

  • Repository name : Sélectionne ton repository

    Une liste déroulante apparaît avec tous tes repositories GitHub. Sélectionne celui qui contient ton application.

  • Branch name : main

    Sélectionne la branche à surveiller.

  • Output artifact format : Laisse CodePipeline default

    C'est le format utilisé pour passer le code source à l'étape suivante (CodeBuild).

Clique sur Next pour passer à l'étape suivante.

Étape 4 : Configurer le build (Add build stage)

Cette étape va lier ton projet CodeBuild au pipeline. C'est ici que le code sera compilé et testé.

Configuration du build

  • Build provider : Sélectionne Other build providers puis AWS CodeBuild

    C'est le seul choix possible si tu utilises les services natifs AWS.

  • Project name : Sélectionne le nom de ton projet CodeBuild.

    C'est le projet CodeBuild que tu as créé dans la section précédente. Tu devrais le voir apparaître dans la liste déroulante.

  • Build type : Laisse Single build

    "Single build" signifie qu'un seul build s'exécute à la fois. Tu pourrais aussi choisir "Batch build" pour exécuter plusieurs builds en parallèle mais ce n'est pas nécessaire pour commencer.

  • Region : Laisse la région actuelle

    La région AWS où se trouve ton projet CodeBuild. Par défaut, c'est la même région que ton pipeline.

Clique sur Next.

Test (optionel)

Cette section est optionnelle mais elle te permet de définir la source de tes tests si tu en as.

Clique sur Next pour passer au déploiement.

Étape 5 : Ajouter le déploiement (Add deploy stage )

Pour l'instant, nous allons sauter l'étape de déploiement. Nous la configurerons dans la section suivante.

Clique sur Skip deploy stage → une popup de confirmation apparaît → clique sur Skip.

Étape 6 : Vérification finale (Review)

AWS te montre un récapitulatif de toute la configuration de ton pipeline. Vérifie que :

  • ✓ Le nom du pipeline est correct
  • ✓ La source est bien ton repository GitHub sur la bonne branche
  • ✓ Le build provider est bien AWS CodeBuild avec le bon projet
  • ✓ Le deploy stage est marqué comme "Skipped"

Si tout est bon, clique sur Create pipeline.

Premier déclenchement automatique

Dès que tu cliques sur "Create pipeline", AWS va automatiquement lancer le pipeline pour la première fois ! Tu vas voir en temps réel :

  1. Source : CodePipeline récupère ton code depuis GitHub
  2. Build : CodeBuild exécute ton buildspec.yml

    Tu peux cliquer sur Details pour voir les logs en temps réel

Pipeline créé avec succès !

Si les deux étapes (Source et Build) sont passées au vert, félicitations ! Ton pipeline CI/CD est maintenant fonctionnel. À partir de maintenant, chaque fois que tu feras ungit push sur la branchemain, le pipeline se déclenchera automatiquement pour builder ton code.

Exemple de pipeline réussi
Tester le déclenchement automatique

Pour vérifier que tout fonctionne bien, fais une petite modification dans ton code et push-la sur GitHub :

Retourne sur la page de ton pipeline dans AWS. En quelques secondes, tu devrais voir un nouveau déclenchement apparaître automatiquement !

Sur la page de ton pipeline, tu peux voir l'historique complet de toutes les exécutions : quand elles ont eu lieu, combien de temps elles ont pris, et si elles ont réussi ou échoué. C'est très utile pour comprendre quand un bug a été introduit ou pour auditer les déploiements.

Nous sommes ainsi arrivés à la fin de l'intégration continue. Nous allons maintenant passer au déploiement de l'application.

5. Déploiement automatique de l'application

Maintenant que ton pipeline récupère le code et le build automatiquement, il ne reste plus qu'à déployer l'application pour la rendre accessible sur Internet ! Pour cela nous allons utiliser le service Amazon S3.

Amazon S3

Qu'est-ce qu’Amazon S3 ?

Amazon S3 (Simple Storage Service) est un service de stockage cloud d'AWS. En plus de stocker des fichiers, il permet aussi d'héberger des sites web statiques.


À quoi sert S3 dans un projet web ?

S3 permet de :

  • Héberger un site vitrine ou un portfolio
  • Déployer une application front-end
  • Stocker des images, vidéos et documents
  • Servir de base à un CDN

Pourquoi c'est souvent un excellent choix

S3 est très rapide, très peu cher, hautement disponible et scalable automatiquement : ton site peut supporter beaucoup de visiteurs sans configuration.


Ce que S3 peut et ne peut pas faire

S3 héberge uniquement des sites statiques en HTML/CSS, React ou Angular mais ne peut pas être utilisé pour héberger des applications avec logique serveur comme des backend Node.js, Django ou PHP. Pour un backend, on utilisera plutôt EC2, ECS ou Lambda.

Étape 1 : Créer un bucket S3

Dans la console AWS, utilise la barre de recherche et tape "S3", puis clique sur le service. Une fois le service sélectionné, clique sur le bouton orange Create bucket.

Configuration du bucket

  • AWS Region

    La région correspondant à tes projets CodfeBuild et CodePipeline est mise par défaut.

  • Bucket name : my-app-bucket

    ⚠️Le nom doit être unique dans tout AWS (pas seulement dans ton compte !). Si "my-app-bucket" est déjà pris, ajoute ton nom ou une date, par exemple :my-app-essi-2025 oufrontend-react-app-prod. Le nom doit contenir uniquement des lettres minuscules, des chiffres et des tirets (-).

  • Object Ownership : Laisse l'option ACLs disabled (recommended)

    C'est le paramètre recommandé par AWS pour simplifier la gestion des permissions.

  • Block Public Access settings : Décoche toutes les cases

    Par défaut, AWS bloque tout accès public pour des raisons de sécurité. Mais comme on veut héberger un site web accessible à tous, il faut autoriser l'accès public.

    ⚠️ Décoche ces 4 options :

    • ☐ Block all public access
    • ☐ Block public access to buckets and objects granted through new access control lists (ACLs)
    • ☐ Block public access to buckets and objects granted through any access control lists (ACLs)
    • ☐ Block public access to buckets and objects granted through new public bucket or access point policies

    ⚠️ Une case de confirmation apparaîtra : coche la case "I acknowledge that the current settings might result in this bucket and the objects within becoming public"

  • Bucket Versioning : Disable (pour commencer)

    Le versioning garde un historique de toutes les modifications de tes fichiers. Pas nécessaire pour débuter, mais utile en production pour pouvoir revenir en arrière.

  • Tags : (optionnel)

    Tu peux ajouter des tags pour organiser tes ressources, par exemple :Environment: Production ouProject: MyApp

  • Default encryption : Laisse Server-side encryption with Amazon S3 managed keys (SSE-S3)

    Tes fichiers seront automatiquement chiffrés au repos. C'est gratuit et recommandé.

Clique sur Create bucket en bas de la page.

Étape 2 : Activer l'hébergement de site web statique

Maintenant que ton bucket est créé, il faut le configurer pour qu'il puisse servir des pages web.

  1. Clique sur le nom de ton bucket dans la liste
  2. Va dans l'onglet Properties (en haut)
  3. Descends tout en bas jusqu'à la section Static website hosting
  4. Clique sur Edit

Configuration de l'hébergement web

  • Static website hosting : Sélectionne Enable
  • Hosting type : Host a static website
  • Index document : index.html

    C'est la page qui s'affichera par défaut quand quelqu'un visite ton site.

  • Error document (optionnel)

    Tu peux mettre la page qui s'affichera en cas d'erreur 404 (page non trouvée). Pour les Single Page Applications (React ou Vue), utilise aussi index.html pour que le routing côté client fonctionne correctement.

Clique sur Save changes.

URL de ton site

Une fois sauvegardé, AWS génère automatiquement une URL publique pour ton site. Tu peux la trouver dans la section "Static website hosting" sous le titre : Bucket website endpoint. Elle ressemble àhttp://my-app-bucket.s3-website-eu-west-1.amazonaws.com

Note cette URL, on en aura besoin pour tester le déploiement !

Étape 3 : Configurer les permissions d'accès public

Pour que les visiteurs puissent accéder à ton site, il faut ajouter une bucket policy qui autorise la lecture publique de tous les fichiers.

  1. Toujours dans ton bucket, va dans l'onglet Permissions
  2. Descends jusqu'à la section Bucket policy
  3. Clique sur Edit

Copie-colle cette policy dans l'éditeur (en remplaçant my-app-bucket par le nom de ton bucket) :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-app-bucket/*"
    }
  ]
}

Décryptage de la bucket policy

  • "Effect": "Allow" : on autorise l'action par opposition à "Deny" qui bloquerait l'action
  • "Principal": "*" : l'astérisque (*) signifie "tout le monde", donc n'importe qui sur Internet
  • "Action": "s3:GetObject" : on autorise uniquement la lecture des fichiers, pas la modification ou la suppression
  • "Resource": "arn:aws:s3:::my-app-bucket/*" : cette règle s'applique à tous les fichiers (/*) dans le bucket spécifié.

Après avoir copié et collé la policy, clique sur Save changes.

Configurer les permissions IAM pour CodePipeline

Pour que CodePipeline puisse déployer automatiquement sur ton bucket S3, il faut lui donner les permissions nécessaires.

  1. Dans la console AWS, va dans le service IAM
  2. Dans le menu de gauche, clique sur Roles
  3. Cherche et clique sur le rôlecorrespondant à ton pipeline. Il sera sous la forme : AWSCodePipelineServiceRole-[région]-[nom-pipeline]
  4. Dans l'onglet Permissions, clique sur Add permissionsCreate inline policy
  5. Passe en mode JSON
  6. Colle cette politique en remplaçant my-app-bucket par le nom de ton bucket :
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl",
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::my-app-bucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::my-app-bucket"
            ]
        }
    ]
}
  1. Clique sur Review policy
  2. Donne un nom : S3DeploymentPolicy
  3. Clique sur Create policy

Décryptage de la policy IAM

  • "s3:PutObject" : permet d'uploader des fichiers dans le bucket
  • "s3:GetObject" : permet de lire les fichiers existants
  • "s3:ListBucket" : permet de lister le contenu du bucket
  • "Resource" avec /* : les actions s'appliquent aux objets dans le bucket
  • "Resource" sans /* : l'action s'applique au bucket lui-même

Étape 4 : Ajouter l'étape de déploiement dans CodePipeline

Retourne maintenant sur CodePipeline pour ajouter l'étape de déploiement qui manquait.

  1. Va sur la console CodePipeline et clique sur le nom de ton pipeline
  2. Clique sur le bouton Edit
  3. En bas du pipeline (après l'étape "Build"), clique sur + Add stage
  4. Donne un nom à cette étape : Deploy
  5. Dans cette nouvelle étape, clique sur + Add action group

Configuration de l'action de déploiement

  • Action name : Deploy-to-S3

    Choisis un nom descriptif pour identifier facilement cette action

  • Action provider : Sélectionne Amazon S3

    C'est le service qui va recevoir les fichiers de ton application

  • Region : Laisse la région actuelle

    Normalement, c'est la même région que ton bucket S3

  • Input artifacts : BuildArtifact

    Ce sont les fichiers générés par CodeBuild. CodePipeline les a automatiquement sauvegardés et les transmet maintenant au déploiement.

  • Bucket : Sélectionne ton bucket

    Tu devrais voir ton bucket apparaître dans la liste déroulante. Sélectionne le.

  • S3 object key : Laisse vide

    En laissant vide, les fichiers seront déployés à la racine du bucket

  • Extract file before deploy : Coche cette case !

    ⚠️ Cette option décompresse l'archive ZIP créée par CodeBuild et déploie les fichiers individuellement. Si tu ne coches pas cette case, S3 recevra juste un fichier ZIP et ton site ne fonctionnera pas !

  • Deployment path : Laisse vide (optionnel)

    Tu pourrais spécifier un sous-dossier si tu voulais déployer dans bucket/v2/ par exemple

  • CannedACL : Laisse vide

    Les buckets S3 modernes ont les ACLs désactivées par défaut pour des raisons de sécurité. Pour rendre ton site public, tu configureras les permissions directement via la politique du bucket (Bucket Policy) ou CloudFront après le déploiement.

  • Cache control : (optionnel) Tu peux mettre max-age=3600

    Cela indique aux navigateurs de garder les fichiers en cache pendant 1 heure (3600 secondes), ce qui améliore les performances

Clique ensuite sur Done, puis sur Save en haut de la page. Une popup de confirmation apparaît. Clique sur Save pour confirmer les modifications du pipeline.

Premier déploiement automatique

Dès que tu sauvegardes, CodePipeline va automatiquement relancer le pipeline complet avec la nouvelle étape de déploiement ! Tu vas voir :

  1. Source : Récupération du code depuis GitHub
  2. Build : Compilation de l&aposz;application avec CodeBuild
  3. Deploy : Déploiement des fichiers sur S3

Vérifier que le déploiement a fonctionné

  1. Retourne sur S3 et ouvre ton bucket
  2. Tu devrais voir tous les fichiers de ton application
  3. Copie l'URL de ton site (Tu le trouveras dans Properties → Static website hosting → Bucket website endpoint)
  4. Ouvre cette URL dans ton navigateur
  5. Ton application est en ligne !
Utiliser CloudFront (optionnel)

L'URL S3 fonctionne, mais elle n'est pas idéale pour la production car :

  • • Elle n'utilise pas HTTPS par défaut
  • • Elle est longue et peu mémorable
  • • Elle n'est pas optimisée pour la vitesse mondiale

Pour aller plus loin, tu peux ajouter CloudFront devant ton bucket S3 pour avoir :

  • • HTTPS automatique
  • • CDN mondial (ton site sera ultra-rapide partout dans le monde)
  • • Possibilité d'utiliser ton propre nom de domaine (exemple.com)

On pourra voir ça dans un prochain tutoriel!

6. Tester le pipeline CI/CD complet

Maintenant que tout est en place, il est temps de tester le pipeline complet de bout en boutpour vérifier que chaque modification de code se déploie automatiquement en production !

Ce que nous allons vérifier

Un pipeline CI/CD complet doit :

  1. Se déclencher automatiquement dès qu'on push du code sur GitHub
  2. Récupérer le code sans intervention manuelle
  3. Builder et tester l'application dans un environnement propre
  4. Déployer la nouvelle version directement en production
  5. Tout cela en quelques minutes seulement

Étape 1 : Faire une modification dans ton code

Pour tester le pipeline, tu peux faire une modification visible dans l'application. Une fois ta modification faite, fais un commit et push sur Github.

Étape 2 : Observer le pipeline en action

Dès que tu as push ton code, le pipeline se déclenche automatiquement ! Voici comment le suivre en temps réel :

  1. Va sur la console AWS et ouvre CodePipeline
  2. Clique sur ton pipeline
  3. Tu devrais voir une nouvelle exécution qui vient de démarrer : en haut de la page, un bandeau indique "Execution in progress"
  4. Observe les 3 étapes s'exécuter l'une après l'autre :
    • Source : CodePipeline détecte le nouveau commit et récupère le code depuis GitHub
    • Build : CodeBuild compile ton application et lance les tests
    • Deploy : Les fichiers sont uploadés sur S3
Exemple de déploiement réussi

Étape 3 : Vérifier le déploiement

Une fois que toutes les étapes sont passées au vert, ton application est déployée ! Vérifions que tout fonctionne :

  1. Récupère l'URL de ton site S3
    • • Va dans S3 et ouvre ton bucket
    • • Onglet "Properties" puis section "Static website hosting"
    • • Copie l'URL "Bucket website endpoint"
  2. Ouvre l'URL dans ton navigateur
    • • Force le rafraîchissement avec Ctrl+F5 (Windows) ou Cmd+Shift+R (Mac) pour bypasser le cache si tu l'avais mis plus haut
  3. Vérifie que ta modification est visible
    • • Le nouveau titre doit apparaître
    • • Si tu ne vois pas la modification, attends 30 secondes et rafraîchis à nouveau

Si tu vois ta modification en ligne, c'est que le pipeline complet fonctionne de bout en bout. À partir de maintenant, chaque commit sur la branche main sera automatiquement déployé en productionsans que tu aies à faire quoi que ce soit manuellement !

Le pipeline a échoué ?

En cas d'échec, voici comment tu peux débugger :

  1. Identifie quelle étape a échoué (Source, Build ou Deploy)
  2. Clique sur "Details" pour voir les logs complets
  3. Lis le message d'erreur en partant de la fin (le dernier message est souvent le plus informatif)
  4. Erreurs courantes :
    • Build failed : erreur de syntaxe dans ton code ou tests qui échouent
    • npm ERR! : problème avec une dépendance. Essaie de mettre à jour ton package.json
    • Access Denied : problème de permissions IAM ou bucket policy
    • Timeout : le build prend trop de temps. Tu peux augmenter le timeout dans les paramètres de CodeBuild
  5. Corrige l'erreur localement, puis recommit et push

7. Bonnes pratiques CI/CD sur AWS

Maintenant que ton pipeline fonctionne, voici les bonnes pratiques essentielles pour sécuriser, optimiser et professionnaliser ton CI/CD en production.

Sécurité : Principe du moindre privilège

Les rôles IAM créés automatiquement par AWS ont parfois trop de permissions. Applique le principe du moindre privilège, c&apos,est-à-dire que chaque service ne doit avoir que les permissions strictement nécessaires.

  • CodeBuild doit pouvoir lire S3 (pour les artefacts) et écrire dans CloudWatch (pour les logs)
  • CodePipeline doit pouvoir déclencher CodeBuild et écrire dans S3
  • • Évite les permissions *:* (accès complet à tout)

Tu peux utiliser IAM Access Analyzer pour identifier les permissions non utilisées et les supprimer progressivement.

Gestion des secrets avec AWS Secrets Manager

Ne mets jamais de clés API, mots de passe ou tokens directement dans ton code ou dans les variables d'environnement en clair !
A la place, tu peux utiliser AWS Secrets Manager. Il te permet de stocker tes variables secrètes dans Secrets Manager ou Systems Manager Parameter Store

Tu peux ensuite récupérer dynamiquement ces variables dans ton fichier buildspec.yml :

version: 0.2

env:
  secrets-manager:
    DATABASE_PASSWORD: prod/myapp/db:password
    API_KEY: prod/myapp/api:key

phases:
  build:
    commands:
      - echo "Building with secure credentials..."
      - npm run build
Ajouter des tests automatiques

Il est conseillé d'ajouter une phase de tests dans ton pipeline pour éviter de déployer du code cassé en production.
Voici un exemple de buildspec avec tests :

version: 0.2

phases:
  install:
    commands:
      - npm install
  
  pre_build:
    commands:
      - echo "Running linter..."
      - npm run lint
      - echo "Running unit tests..."
      - npm test -- --coverage
  
  build:
    commands:
      - echo "Building application..."
      - npm run build
  
  post_build:
    commands:
      - echo "Running integration tests..."
      - npm run test:integration

artifacts:
  files:
    - '**/*'
  base-directory: build
Surveillance avec CloudWatch

Tu peux activer les logs CloudWatch pour surveiller tes builds et être alerté en cas de problème. Voici la configuration recommandée :

  • CloudWatch Logs : active les logs pour chaque exécution de CodeBuild
  • CloudWatch Metrics : surveille la durée des builds, le taux d'échec, etc.
  • CloudWatch Alarms : te permet de recevoir une notification si un build échoue

Tu peux aussi créer un dashboard CloudWatch pour visualiser en un coup d'oeil ton pipeline, le nombre de déploiements par jour, et le temps moyen de build.

Optimiser les coûts

CodePipeline et CodeBuild sont payants au-delà du Free Tier. Voici comment réduire les coûts :

  • Cache les dépendances : tu peux utiliser le cache S3 de CodeBuild pour éviter de retélécharger npm packages à chaque build
  • Ajuste la taille de l'instance : par défaut CodeBuild utilise "small" (3 GB RAM), mais "large" coûte 4x plus cher
  • Limite les builds inutiles : tu peux configurer des filtres Git pour ne builder que sur certains chemins. Tu peux par exemple ignorer les modifications du README.
  • Nettoie les anciens artefacts : tu peux configurer une lifecycle policy sur ton bucket S3 pour supprimer les vieux builds après 30 jours ou plus.

8. Conclusion

Tu as maintenant mis en place un pipeline CI/CD complet sur AWS avec CodePipeline et CodeBuild. À chaque push de ton code, ton application est automatiquement buildée et déployée.

Ce workflow est une base solide utilisée en entreprise. Tu peux maintenant l’enrichir avec des tests avancés, des environnements de déploiement différents ou des déploiements de backend sur ECS ou EC2.

← Retour au blog← Retour à la série