AWS DevOps : CodeCommit, CodePipeline, CodeBuild et CodeDeploy

AWS DevOps CICD

Continuous Integration, Continuous Deployment (CICD), comprendre intégration continue et déploiement continu est un concept essentiel du développement logiciel.

C'est une pierre angulaire de la méthodologie DevOps. Le DevOps permet d'automatiser une grande partie du processus de développement, de test et de déploiement, du code source aux fichiers exécutables.

Quels sont les avantages du DevOps ?

Le développement de logiciels est un processus itératif, ce qui signifie qu'il existe plusieurs versions d'un même produit. Pensez au système d'exploitation Windows, qui compte plusieurs versions - Windows XP, Windows 10, etc.
Le DevOps permet d'accélérer le cycle de développement en intégrant le développement, les tests et le déploiement/les opérations en un seul processus continu. Cela permet au code d'échouer rapidement en automatisant le processus de maturation du code et en fournissant un feedback constant.

Bien que ce ne soit pas un concept entièrement nouveau, des outils tels que Docker, Jenkins et Chef ont facilité l'expansion de la pratique du DevOps. Ces outils ont rendu possible le développement et le déploiement continus, s'éloignant des méthodologies telles que la cascade où le développement est plus lent. AWS fournit des analogues de ces outils, ce qui en fait une plateforme hautement évolutive pour le développement et l'hébergement d'applications.

DevOps permet une intégration continue entre les cycles de développement logiciels, ce qui permet de réduire le temps entre les itérations.

Cette série d'articles explique comment mettre en œuvre DevOps avec AWS :

1. Gestion du code source - CodeCommit, CodePipeline, CodeBuild, CodeDeploy
2. Surveillance, audit et messagerie : CloudWatch, X-Ray et CloudTrail, SQS, SNS et Kinesis.
3. Microservices et conteneurs - ECS, ECR et Fargate
4. Sécurité et chiffrement - KMS

python ia machine learning

CodeCommit

CodeCommit utilise Git pour créer un repository de code source qui est géré par AWS.
Le contrôle de version est un outil essentiel, qui permet aux développeurs de revenir à des versions antérieures de fichiers en se basant sur le hash (identifiant unique) d'un commit (code ajouté à un repo).
Les développeurs peuvent collaborer simultanément sur le même code en créant des branches permettant aux autres développeurs de l'équipe de modifier le code sans affecter le travail des autres.
Les branches facilitent également la maturité du code en permettant aux développeurs de revoir les changements individuels avant de les fusionner avec une branche "master".
Git est un outil important que tous les développeurs devraient apprendre à utiliser.

CodeCommit n'a pas de limite de stockage et est entièrement géré par AWS, ce qui présente de nombreux avantages. La sécurité est gérée par des politiques IAM, les données sont cryptées par KMS et par SSH ou HTTPS lorsqu'elles sont en transit.

CodeCommit peut être intégré à d'autres outils tels que CloudWatch pour créer des règles d'événements ou CodePipeline.

python keras pandas tensorflow pytorch

CodePipeline

CodePipeline permet de visualiser les processus qui contribuent à la maturation du code, tels que la construction, les tests ou le déploiement. Les pipelines permettent aux sections de code de passer à un état de maturité complet, tout en permettant aux développeurs de poursuivre le développement.

Au fur et à mesure que le code mûrit, divers points de contrôle, connus sous le nom de stages, définissent la maturité du code sur la base d'actions telles que les tests unitaires, l'intégration ou le peer review (l'examen par les pairs).

Les stages exécutent les actions du pipeline de manière séquentielle ou en parallèle. Les artefacts créés à chaque étape sont collectés dans S3 et transmis à l'étape suivante.

Simple Notification Service (SNS) peut être intégré pour notifier les développeurs lorsque des changements se produisent dans CloudWatch. La console CodePipeline notifie les utilisateurs lorsqu'un pipeline échoue. CloudTrail peut être utilisé pour auditer les appels d'API. Les rôles du service IAM doivent être attachés pour permettre à CodePipeline d'exécuter chaque étape.

langage python langage go iziday

CodeBuild

CodeBuild fonctionne avec CodePipeline pour faciliter l'intégration continue en créant des packages de logiciels.
CodeBuild compile le code source et exécute des tests en fonction du stade de maturité du code.

Docker est utilisé pour créer des images CodeBuild qui peuvent être reproduites et modifiées. Les Builds sont basés sur le code source et définis par un fichier Buildspec.yml, qui doit être stocké à la racine d'un progiciel avec des variables d'environnement telles que les informations d'identification.

Il y a 4 phases dans un Buildspec :

Installer - pour installer les dépendances
Prebuild - pour préparer le build
Build - pour exécuter le build
Post Build - Traitement des artefacts tels que les fichiers zip.

CodeDeploy

CodeDeploy est la dernière étape afin de déployer du code sur une instance EC2.
Chaque instance EC2 doit exécuter un agent CodeDeploy qui recherche en permanence les mises à jour.

Les instances sont regroupées par types de déploiement tels que dev, test et prod. Les artefacts provenant de S3 ou de CodePipelines ainsi que des dépôts de code source tels que Github sont déployés à partir de CodeDeploy.

CodeDeploy prend également en charge les fonctions Lambda et les conteneurs Docker.

Les déploiements sont définis par une variété d'attributs. Le nom de l'application et la plateforme informatique (EC2 ou Lambda doivent être définis) ainsi que les configurations de déploiement qui définissent le succès et l'échec, y compris les groupes qui sont déployés.

La révision de l'application est définie par le code et appspec.yml, tandis que la révision cible définit la version de l'application cible qui est déployée.

Le fichier appspec.yml pour EC2 ou appspec.yaml pour Lambda ou ECS doit être placé à la racine.

La section fichier détermine où et comment copier le code source sur le système de fichiers.
Les crochets sont des instructions de déploiement qui définissent l'ordre dans lequel le code doit être déployé

AppStop - arrête l'application en cours d'exécution
DownloadBundle - installe les dépendances
BeforeInstall - prépare l'installation
AfterInstall - post-installation
ApplicationStart - démarre l'application
ValidateService - vérifie l'installation

Les configurations de déploiement déterminent comment l'application doit être déployée.
Les développeurs peuvent déterminer si l'application doit être déployée sur une instance EC2, une instance à la fois, la moitié des instances et la dernière moitié des instances si la première moitié est déployée, toutes les instances en même temps pour le développement, ou des configurations personnalisées.
Si un déploiement échoue, l'instance EC2 restera dans un état d'échec, les nouveaux déploiements seront d'abord déployés sur les instances ayant échoué. Les instances qui sont déployées sont déterminées par les balises EC2 ou directement par les groupes d'autoscaling.

Conclusion

Les services AWS CodeCommit permettent une intégration transparente du code du développement au déploiement avec CodeCommit, CodePipeline, CodeBuild et CodeDeploy.
Un outil appelé CodeStar peut être utilisé pour combiner tous ces services et les intégrer à CloudFormation et CloudWatch pour créer un projet CICD. Cette suite d'outils permet d'automatiser la maturation du code.

Le prochain article abordera la manière dont les services AWS sont audités et surveillés.

En savoir plus

Contactez nos équipes pour en savoir plus sur notre expertise IT

NOUS CONTACTER

Adopter Iziday

Trouver une solution à vos enjeux IT n'a jamais été aussi simple

TROUVER UN consultant