Comment configurer un pipeline de déploiement automatisé pour un site Web S3
L'hébergement de votre site Web à l'aide de S3 est une pratique assez courante sur AWS. Il est bon marché, ne nécessite aucun serveur et prend même en charge les applications Web côté client avec des frameworks tels que React. Pour faciliter les choses, nous allons mettre en place un pipeline de déploiement pour gérer les mises à jour.
Comment cela marche-t-il?
Pour un site S3, vous pouvez effectuer des mises à jour en exécutant aws s3 sync
, ou en ajoutant manuellement de nouveaux objets au compartiment. Cependant, il s'agit d'un processus très manuel et il peut être automatisé assez facilement.
À l'aide du service CodePipeline CI / CD d'AWS, vous pouvez configurer un pipeline pour écouter les modifications de votre contrôle de source. Chaque fois qu'une modification est détectée, CodePipeline enverra la source à CodeBuild, qui gérera la création du projet. Pour les applications Web, cela inclut notamment l'exécution npm run build
, qui regroupera les actifs du projet dans une version de production. La construction est envoyée directement à S3, mettant à jour l'application.
Notez que si votre projet ne nécessite aucun type de bâtiment avec npm
, et vous voulez simplement synchroniser votre dépôt Git avec S3, la configuration sera beaucoup plus facile. Configurez simplement l'étape source pour vous connecter à votre contrôle de source, ignorez l'étape de construction, puis choisissez «AWS S3» pour l'étape de déploiement. Saisissez les détails de votre bucket et le contenu de votre dépôt sera synchronisé avec le bucket à chaque mise à jour.
Configuration du pipeline
Dans la console CodePipeline, cliquez sur «Créer un nouveau pipeline», donnez-lui un nom et choisissez de créer un nouveau rôle de service.
Pour l'étape source, sélectionnez votre référentiel Git. Si vous utilisez le propre CodeCommit d'AWS, vous pouvez sélectionner le dépôt et la branche. Sinon, vous devrez vous connecter à votre compte Github ou Bitbucket. Gitlab n'est pas pris en charge.
Pour l'étape de construction, sélectionnez «CodeBuild» et créez un nouveau projet de construction.
Cela ouvrira une fenêtre de dialogue, qui configurera automatiquement la source du nouveau projet CodeBuild pour utiliser CodePipeline. Vous devrez configurer votre environnement ici, sélectionner un système d'exploitation et choisir une version d'exécution. Vous souhaiterez également créer un nouveau rôle de service, qui devra être modifié pour pouvoir accéder à votre bucket de déploiement.
Pour la configuration de construction, choisissez d'utiliser un fichier buildspec.
Buildspec est un format YAML pour définir les commandes que CodeBuild exécutera. Cela variera en fonction de votre application. Pour cet exemple, nous supposerons que vous créez votre application JavaScript avec npm
. Collez ce qui suit dans un nouveau fichier appelé buildspec.yml
, placé à la racine de votre référentiel.
version: 0.2 phases: install: runtime-versions: nodejs: 10 commands: - npm i npm@latest -g pre_build: commands: - npm install build: commands: - npm run build post_build: commands: - aws s3 sync ./build s3://bucket-name
Ce Buildspec s'occupe en fait du déploiement sur S3 – pendant la phase de post-build, CodeBuild s'exécutera aws s3 sync
pour synchroniser le /build
dossier avec le compartiment spécifié.
Cliquez sur créer sur le projet de construction, ce qui vous ramènera à CodePipeline. Cliquez sur "Suivant" et choisissez d'ignorer l'étape de déploiement, car CodeBuild peut gérer l'exécution de la commande. Créez le pipeline.
Pour la première exécution, l'étape de génération échouera, car le rôle de service CodeBuild n'a pas accès à S3. Rendez-vous sur la console de gestion IAM, recherchez le rôle CodeBuild sous «Rôles» et attachez une nouvelle stratégie qui autorise l'accès à S3. Vraiment, vous devriez probablement limiter cela pour accéder uniquement au compartiment de déploiement.
Revenez à CodePipeline et cliquez sur «Release Change» sur votre pipeline pour déclencher manuellement une mise à jour du pipeline. Si rien ne va pas avec votre Buildspec, vous devriez voir le pipeline réussir.
Si vous effectuez un commit sur Git, une nouvelle compilation sera lancée et S3 sera mis à jour avec les artefacts de construction. S'il y a des erreurs dans la construction, CodePipeline s'arrêtera avant la mise à jour.
Si votre pipeline échoue, vous pouvez cliquer sur «CodeBuild» dans la barre latérale pour afficher les journaux de la version la plus récente, ce qui vous aidera à localiser les erreurs.