Configuration d'un pipeline CI/CD à l'aide d'AWS et d' CodePipeline AWS CDK - Recommandations AWS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configuration d'un pipeline CI/CD à l'aide d'AWS et d' CodePipeline AWS CDK

Créée par Konstantin Zarudaev (AWS), Cizer Pereira (AWS), Lars Kinder (AWS) et Yasha Dabas (AWS)

Référentiel de code : AWS CodePipeline avec CI/CD

Environnement : PoC ou pilote

Technologies : DevOps

Charge de travail : Open source

Services AWS : AWS CodePipeline

Accueil

L'automatisation du processus de création et de publication de vos logiciels grâce à l'intégration et à la livraison continues (CI/CD) permet de reproduire les versions et de fournir rapidement de nouvelles fonctionnalités à vos utilisateurs. Vous pouvez tester rapidement et facilement chaque modification de code, et vous pouvez détecter et corriger les bogues avant de publier votre logiciel. En exécutant chaque modification dans le cadre de votre processus de préparation et de publication, vous pouvez vérifier la qualité du code de votre application ou de votre infrastructure. Le CI/CD incarne une culture, un ensemble de principes de fonctionnement et un ensemble de pratiques qui aident les équipes de développement d'applications à apporter des modifications de code plus fréquemment et de manière plus fiable. L'implémentation est également connue sous le nom de pipeline CI/CD.

Ce modèle définit un pipeline d'intégration et de livraison continues (CI/CD) réutilisable sur Amazon Web Services (AWS). Le CodePipeline pipeline AWS est écrit à l'aide d'AWS Cloud Development Kit (AWS CDK) v2.

Vous pouvez ainsi modéliser les différentes étapes du processus de publication de votre logiciel via l'interface AWS Management Console, l'AWS Command Line Interface (AWS CLI), CloudFormation AWS ou les kits SDK AWS. CodePipeline Ce modèle illustre la mise en œuvre d'AWS CDK CodePipeline et de ses composants à l'aide d'AWS CDK. Outre la création de bibliothèques, AWS CDK inclut une boîte à outils (la commande CLIcdk), qui est le principal outil pour interagir avec votre application AWS CDK. Entre autres fonctions, le kit d'outils permet de convertir une ou plusieurs piles en CloudFormation modèles et de les déployer sur un compte AWS.

Le pipeline inclut des tests visant à valider la sécurité de vos bibliothèques tierces et contribue à garantir une publication accélérée et automatisée dans les environnements spécifiés. Vous pouvez améliorer la sécurité globale de vos applications en les soumettant à un processus de validation.

L'objectif de ce modèle est d'accélérer votre utilisation des pipelines CI/CD pour déployer votre code tout en garantissant que les ressources que vous déployez respectent les DevOps meilleures pratiques. Après avoir implémenté l'exemple de code, vous disposerez d'un AWS CodePipeline avec des processus de linting, de test, de vérification de sécurité, de déploiement et de post-déploiement. Ce modèle inclut également des étapes pour Makefile. À l'aide d'un Makefile, les développeurs peuvent reproduire les étapes CI/CD localement et accélérer le processus de développement.

Conditions préalables et limitations

Prérequis

  • Un compte AWS actif

  • Une compréhension de base dans les domaines suivants :

    • AWS CDK

    • AWS CloudFormation

    • AWS CodePipeline

    • TypeScript

Limites

Ce modèle utilise AWS CDK TypeScript uniquement pour. Il ne couvre pas les autres langues prises en charge par AWS CDK.

Versions du produit

Utilisez les dernières versions des outils suivants :

  • Interface de ligne de commande AWS (AWS CLI)

  • cfn_nag

  • git-remote-codecommit

  • Node.js

Architecture

Pile technologique cible

  • AWS CDK

  • AWS CloudFormation

  • AWS CodeCommit

  • AWS CodePipeline

Architecture cible

Le pipeline est déclenché par une modification du CodeCommit référentiel AWS (SampleRepository). Au début, CodePipeline crée des artefacts, se met à jour et lance le processus de déploiement. Le pipeline qui en résulte déploie une solution dans trois environnements indépendants :

  • Dev — Vérification du code en trois étapes dans l'environnement de développement actif

  • Test — Environnement de test d'intégration et de régression

  • Prod — Environnement de production

Les trois étapes incluses dans la phase de développement sont le linting, la sécurité et les tests unitaires. Ces étapes s'exécutent en parallèle pour accélérer le processus. Pour garantir que le pipeline ne fournit que des artefacts fonctionnels, il sera arrêté de fonctionner chaque fois qu'une étape du processus échoue. Après un déploiement en phase de développement, le pipeline exécute des tests de validation pour vérifier les résultats. En cas de succès, le pipeline déploiera ensuite les artefacts dans l'environnement de test, qui contient une validation après le déploiement. La dernière étape consiste à déployer les artefacts dans l'environnement Prod.

Le schéma suivant montre le flux de travail entre le CodeCommit référentiel et les processus de création et de mise à jour exécutés par CodePipeline, les trois étapes de l'environnement de développement, ainsi que le déploiement et la validation ultérieurs dans chacun des trois environnements.

L'environnement de développement inclut le linting, la sécurité et les tests unitaires, tous incluant le déploiement et la validation.

Outils

Services AWS

  • AWS Cloud Development Kit (AWS CDK) est un framework de développement logiciel qui vous aide à définir et à provisionner l'infrastructure du cloud AWS sous forme de code.

  • AWS vous CloudFormation aide à configurer les ressources AWS, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie sur l'ensemble des comptes et des régions AWS. Dans ce modèle, les CloudFormation modèles peuvent être utilisés pour créer un CodeCommit référentiel et un pipeline CodePipeline CI/CD.

  • AWS CodeCommit est un service de contrôle de version qui vous permet de stocker et de gérer de manière privée des référentiels Git, sans avoir à gérer votre propre système de contrôle de source.

  • AWS CodePipeline est un service CI/CD qui vous permet de modéliser et de configurer rapidement les différentes étapes d'une version logicielle et d'automatiser les étapes nécessaires à la publication continue des modifications logicielles.

  • L'interface de ligne de commande AWS (AWS CLI) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.

Autres outils

  • cfn_nag est un outil open source qui recherche des modèles dans des CloudFormation modèles afin d'identifier les problèmes de sécurité potentiels.

  • git-remote-codecommitest un utilitaire permettant de transférer et d'extraire du code depuis des CodeCommit référentiels en étendant Git.

  • Node.js est un environnement d' JavaScript exécution piloté par les événements conçu pour créer des applications réseau évolutives.

Code

Le code de ce modèle est disponible dans le référentiel de pratiques GitHub AWS CodePipeline with CI/CD.

Bonnes pratiques

Passez en revue les ressources, telles que les politiques AWS Identity and Access Management (IAM), pour vérifier qu'elles sont conformes aux meilleures pratiques de votre organisation.

Épopées

TâcheDescriptionCompétences requises

Installez des outils sur macOS ou Linux.

Si vous utilisez macOS ou Linux, vous pouvez installer les outils en exécutant la commande suivante dans votre terminal préféré ou en utilisant Homebrew pour Linux.

brew install brew install git-remote-codecommit brew install ruby brew-gem brew-gem install cfn-nag
DevOps ingénieur

Installez des outils à l'aide d'AWS Cloud9.

Si vous utilisez AWS Cloud9, installez les outils en exécutant la commande suivante.

gem install cfn-nag

Remarque : Node.js et npm doivent être installés sur AWS Cloud9. Pour vérifier l'installation ou la version, exécutez la commande suivante.

node -v npm -v
DevOps ingénieur

Configurez l'AWS CLI.

Pour configurer l'AWS CLI, suivez les instructions correspondant à votre système d'exploitation :

DevOps ingénieur
TâcheDescriptionCompétences requises

Téléchargez ou clonez le code.

Pour obtenir le code utilisé par ce modèle, effectuez l'une des opérations suivantes :

  • Téléchargez le dernier code source des versions du GitHub dépôt et décompressez le fichier téléchargé dans un dossier.

  • Clonez le projet en exécutant la commande suivante.

git clone --depth 1 https://github.com/aws-samples/aws-codepipeline-cicd.git

Supprimez le .git répertoire du référentiel cloné.

cd ./aws-codepipeline-cicd rm -rf ./.git

Plus tard, vous utiliserez un CodeCommit dépôt AWS nouvellement créé comme origine distante.

DevOps ingénieur

Connectez-vous au compte AWS.

Vous pouvez vous connecter à l'aide d'un jeton de sécurité temporaire ou d'une authentification par zone d'atterrissage. Pour vérifier que vous utilisez le bon compte et la bonne région AWS, exécutez les commandes suivantes.

AWS_REGION="eu-west-1" ACCOUNT_NUMBER=$(aws sts get-caller-identity --query Account --output text) echo "${ACCOUNT_NUMBER}"
DevOps ingénieur

Démarrez l'environnement.

Pour démarrer un environnement AWS CDK, exécutez les commandes suivantes.

npm install npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"

Une fois que vous avez réussi à démarrer l'environnement, le résultat suivant doit être affiché.

⏳ Bootstrapping environment aws://{account}/{region}... ✅ Environment aws://{account}/{region} bootstrapped

Pour plus d'informations sur le démarrage d'AWS CDK, consultez la documentation du CDK AWS.

DevOps ingénieur

Synthétisez un modèle.

Pour synthétiser une application AWS CDK, utilisez la cdk synth commande.

npm run cdk synth

Le résultat suivant doit s'afficher.

Successfully synthesized to <path-to-directory>/aws-codepipeline-cicd/cdk.out Supply a stack id (CodePipeline, Dev-MainStack) to display its template.
DevOps ingénieur

Déployez la CodePipeline pile.

Maintenant que vous avez amorcé et synthétisé le CloudFormation modèle, vous pouvez le déployer. Le déploiement créera le CodePipeline pipeline et un CodeCommit référentiel, qui seront la source et le déclencheur du pipeline.

npm run cdk -- deploy CodePipeline --require-approval never

Après avoir exécuté la commande, vous devriez constater un déploiement réussi de la CodePipeline pile et des informations de sortie. Vous CodePipeline.RepositoryName donne le nom du CodeCommit référentiel dans le compte AWS.

CodePipeline: deploying... CodePipeline: creating CloudFormation changeset... ✅ CodePipeline Outputs: CodePipeline.RepositoryName = SampleRepository Stack ARN: arn:aws:cloudformation:REGION:ACCOUNT-ID:stack/CodePipeline/STACK-ID
DevOps ingénieur

Configurez le CodeCommit référentiel et la branche distants.

Une fois le déploiement réussi, CodePipeline lancera la première exécution du pipeline, que vous trouverez dans la CodePipeline console AWS. Comme AWS CDK CodeCommit n'initie pas de branche par défaut, cette exécution initiale du pipeline échouera et renverra le message d'erreur suivant.

The action failed because no branch named main was found in the selected AWS CodeCommit repository SampleRepository. Make sure you are using the correct branch name, and then try again. Error: null

Pour corriger cette erreur, configurez une origine distante en tant que SampleRepository et créez la main branche requise.

RepoName=$(aws cloudformation describe-stacks --stack-name CodePipeline --query "Stacks[0].Outputs[?OutputKey=='RepositoryName'].OutputValue" --output text) echo "${RepoName}" # git init git branch -m master main git remote add origin codecommit://${RepoName} git add . git commit -m "Initial commit" git push -u origin main
DevOps ingénieur
TâcheDescriptionCompétences requises

Validez une modification pour activer le pipeline.

Après un déploiement initial réussi, vous devriez disposer d'un pipeline CI/CD complet avec une main branche pour SampleRepository en tant que branche source. Dès que vous validez les modifications apportées à la main branche, le pipeline lance et exécute la séquence d'actions suivante :

  1. Récupérez votre code depuis le CodeCommit dépôt.

  2. Créez votre code.

  3. Mettez à jour le pipeline lui-même (UpdatePipeline).

  4. Exécutez trois tâches parallèles pour le linting, la sécurité et les tests unitaires.

  5. En cas de succès, le pipeline déploiera la Main pile depuis ./lib/main-stack.ts l'environnement de développement.

  6. Exécutez une vérification des ressources déployées après le déploiement. Vous pouvez suivre toutes les CodePipeline étapes et les résultats dans la CodePipeline console.

  7. En cas de succès, le pipeline répétera le déploiement et la validation pour les environnements de test et de production.

DevOps ingénieur
TâcheDescriptionCompétences requises

Lancez le processus de développement à l'aide d'un Makefile.

Vous pouvez exécuter l'ensemble du pipeline localement à l'aide de la make commande, ou vous pouvez exécuter une étape individuelle (par exemple,make linting).

Pour tester l'utilisationmake, effectuez les actions suivantes :

  • Implémentez le pipeline local : make

  • Exécutez uniquement des tests unitaires : make unittest

  • Déployer sur le compte courant : make deploy

  • Nettoyez l'environnement : make clean

Développeur d'applications, DevOps ingénieur
TâcheDescriptionCompétences requises

Supprimez les ressources de l'application AWS CDK.

Pour nettoyer votre application AWS CDK, exécutez la commande suivante.

cdk destroy --all

Sachez que les compartiments Amazon Simple Storage Service (Amazon S3) créés lors du démarrage ne sont pas automatiquement supprimés. Ils ont besoin d'une politique de rétention autorisant leur suppression, ou vous devez les supprimer manuellement dans votre compte AWS.

DevOps ingénieur

Résolution des problèmes

ProblèmeSolution

Le modèle ne fonctionne pas comme prévu.

Si quelque chose ne va pas et que le modèle ne fonctionne pas, assurez-vous que vous disposez des éléments suivants :

  • Les versions appropriées des outils.

  • Accès au compte AWS cible (connectivité réseau).

  • Autorisations suffisantes pour le compte AWS cible.

Ressources connexes