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.
Automatically build and deploy a Java application to Amazon EKS using a CI/CD pipeline
Créée par MAHESH RAGHUNANDANAN (AWS), James Radtke (AWS) et Jomcy Pappachen (AWS)
Référentiel de code : aws-cicd-java-eks | Environnement : Production | Technologies : Conteneurs et microservices ; CloudNative DevOps ; Modernisation |
Charge de travail : toutes les autres charges de travail | Services AWS : AWS CloudFormation ; AWS ; AWS CodeCommit CodePipeline ; registre des conteneurs Amazon EC2 ; Amazon EKS |
Récapitulatif
Ce modèle décrit comment créer un pipeline d'intégration et de livraison continues (CI/CD) qui crée et déploie automatiquement une application Java selon les DevSecOps pratiques recommandées sur un cluster Amazon Elastic Kubernetes Service (Amazon EKS) sur le cloud Amazon Web Services (AWS). Ce modèle utilise une application d'accueil développée avec un framework Java Spring Boot et qui utilise Apache Maven.
Vous pouvez utiliser l'approche de ce modèle pour créer le code d'une application Java, empaqueter les artefacts de l'application sous forme d'image Docker, scanner l'image de sécurité et télécharger l'image en tant que conteneur de charge de travail sur Amazon EKS. L'approche de ce modèle est utile si vous souhaitez migrer d'une architecture monolithique étroitement couplée vers une architecture de microservices. Cette approche vous permet également de surveiller et de gérer l'ensemble du cycle de vie d'une application Java, ce qui garantit un niveau d'automatisation supérieur et permet d'éviter les erreurs ou les bogues.
Conditions préalables et limitations
Prérequis
Un compte AWS actif.
Interface de ligne de commande AWS (AWS CLI) version 2, installée et configurée. Pour plus d'informations à ce sujet, consultez la section Installation, mise à jour et désinstallation de la version 2 de l'interface de ligne de commande AWS dans la documentation de l'interface de ligne de commande AWS.
La version 2 de l'AWS CLI doit être configurée avec le même rôle IAM que celui qui crée le cluster Amazon EKS, car seul ce rôle est autorisé à ajouter d'autres rôles IAM au.
aws-auth
ConfigMap
Pour plus d'informations et pour connaître les étapes de configuration de l'AWS CLI, consultez la section Principes de base de la configuration dans la documentation de l'AWS CLI.Rôles et autorisations AWS Identity and Access Management (IAM) avec accès complet à AWS CloudFormation. Pour plus d'informations à ce sujet, consultez la section Contrôle de l'accès avec IAM dans la CloudFormation documentation AWS.
Un cluster Amazon EKS existant, avec les détails du nom du rôle IAM et du rôle IAM Amazon Resource Name (ARN) des nœuds de travail du cluster EKS.
Kubernetes Cluster Autoscaler, installé et configuré dans votre cluster Amazon EKS. Pour plus d'informations, consultez Cluster Autoscaler dans la documentation Amazon EKS.
Accès au code du GitHub référentiel.
Remarque importante
AWS Security Hub est activé dans le cadre des CloudFormation modèles AWS inclus dans le code. Par défaut, une fois Security Hub activé, il est fourni avec un essai gratuit de 30 jours, après quoi un coût est associé à ce service AWS. Pour plus d'informations sur les tarifs, consultez les tarifs d'AWS Security Hub
Versions du produit
Helm version 3.4.2 ou ultérieure
Apache Maven version 3.6.3 ou ultérieure
BridgeCrew Checkov version 2.2 ou ultérieure
Aqua Security Trivy version 0.37 ou ultérieure
Architecture
Pile technologique
AWS CodeBuild
AWS CodeCommit
Amazon CodeGuru
AWS CodePipeline
Amazon Elastic Container Registry
Amazon Elastic Kubernetes Service
Amazon EventBridge
AWS Security Hub
Amazon Simple Notification Service (Amazon SNS)
Architecture cible
![""](images/pattern-img/95a5b5c2-d7fb-41eb-9089-455318c0d585/images/4f5fd8c2-2b6d-4945-aa64-fcf317521711.png)
Le schéma suivant illustre le flux de travail suivant :
Le développeur met à jour le code de l'application Java dans la branche de base du CodeCommit référentiel, ce qui crée une pull request (PR).
Dès que le PR est soumis, Amazon CodeGuru Reviewer passe automatiquement en revue le code, l'analyse en fonction des meilleures pratiques pour Java et donne des recommandations au développeur.
Une fois le PR fusionné avec la branche de base, un EventBridge événement Amazon est créé.
L' EventBridge événement initie le CodePipeline pipeline, qui démarre.
CodePipeline exécute la phase de CodeSecurity scan (sécurité continue).
CodeBuild lance le processus d'analyse de sécurité dans lequel les fichiers Helm du déploiement Dockerfile et Kubernetes sont analysés à l'aide de Checkov, et le code source de l'application est analysé en fonction des modifications de code incrémentielles. L'analyse du code source de l'application est effectuée par le wrapper de l'interface de ligne de commande (CLI) CodeGuru Reviewer
. Si la phase d'analyse de sécurité est réussie, la phase de construction (intégration continue) est lancée.
Au cours de la phase de construction CodeBuild , génère l'artefact, l'empaquette dans une image Docker, scanne l'image pour détecter les failles de sécurité à l'aide d'Aqua Security Trivy et stocke l'image dans Amazon ECR.
Les vulnérabilités détectées à l'étape 8 sont téléchargées vers Security Hub pour une analyse plus approfondie par les développeurs ou les ingénieurs. Security Hub fournit une vue d'ensemble et des recommandations pour remédier aux vulnérabilités.
Les notifications par e-mail relatives aux différentes phases du CodePipeline pipeline sont envoyées via Amazon SNS.
Une fois les phases d'intégration continue terminées, CodePipeline passe à la phase de déploiement (livraison continue).
L'image Docker est déployée sur Amazon EKS en tant que charge de travail de conteneur (pod) à l'aide de graphiques Helm.
Le pod d'application est configuré avec l'agent Amazon CodeGuru Profiler qui envoie les données de profilage de l'application (processeur, utilisation du tas et latence) à Amazon CodeGuru Profiler, ce qui aide les développeurs à comprendre le comportement de l'application.
Outils
Services AWS
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.
AWS CodeBuild est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
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.
Amazon CodeGuru Profiler collecte les données de performances d'exécution de vos applications en ligne et fournit des recommandations qui peuvent vous aider à affiner les performances de vos applications.
Amazon CodeGuru Reviewer utilise l'analyse des programmes et l'apprentissage automatique pour détecter les défauts potentiels difficiles à détecter pour les développeurs et propose des suggestions pour améliorer votre code Java et Python.
AWS vous CodePipeline aide à modéliser et à configurer rapidement les différentes étapes d'une version logicielle et à automatiser les étapes nécessaires à la publication continue des modifications logicielles.
Amazon Elastic Container Registry (Amazon ECR) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.
Amazon Elastic Kubernetes Service (Amazon EKS) vous aide à exécuter Kubernetes sur AWS sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
Amazon EventBridge est un service de bus d'événements sans serveur qui vous permet de connecter vos applications à des données en temps réel provenant de diverses sources. Par exemple, les fonctions AWS Lambda, les points de terminaison d'appel HTTP utilisant des destinations d'API ou les bus d'événements dans d'autres comptes AWS.
AWS Identity and Access Management (IAM) vous aide à gérer en toute sécurité l'accès à vos ressources AWS en contrôlant qui est authentifié et autorisé à les utiliser.
AWS Security Hub fournit une vue complète de votre état de sécurité dans AWS. Il vous permet également de vérifier que votre environnement AWS est conforme aux normes du secteur de la sécurité et aux meilleures pratiques.
Amazon Simple Notification Service (Amazon SNS) vous aide à coordonner et à gérer l'échange de messages entre les éditeurs et les clients, y compris les serveurs Web et les adresses e-mail.
Amazon Simple Storage Service (Amazon S3) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.
Autres services
Helm
est un gestionnaire de paquets open source pour Kubernetes. Apache Maven
est un outil de gestion et de compréhension de projets logiciels. BridgeCrew Checkov
est un outil d'analyse de code statique permettant de scanner les fichiers d'infrastructure en tant que code (IaC) pour détecter les erreurs de configuration susceptibles d'entraîner des problèmes de sécurité ou de conformité. Aqua Security Trivy
est un scanner complet pour détecter les vulnérabilités dans les images de conteneurs, les systèmes de fichiers et les référentiels Git, en plus des problèmes de configuration.
Code
Le code de ce modèle est disponible dans le GitHub aws-codepipeline-devsecops-amazoneks
Bonnes pratiques
Le principe du moindre privilège a été suivi pour les entités IAM dans toutes les phases de cette solution. Si vous souhaitez étendre la solution avec des services AWS supplémentaires ou des outils tiers, nous vous recommandons de suivre le principe du moindre privilège.
Si vous avez plusieurs applications Java, nous vous recommandons de créer des pipelines CI/CD distincts pour chaque application.
Si vous avez une application monolithe, nous vous recommandons de diviser l'application en microservices autant que possible. Les microservices sont plus flexibles, ils facilitent le déploiement des applications sous forme de conteneurs et ils offrent une meilleure visibilité sur l'ensemble de la création et du déploiement de l'application.
Épopées
Tâche | Description | Compétences requises |
---|---|---|
Clonez le GitHub dépôt. | Pour cloner le dépôt, exécutez la commande suivante.
| Développeur d'applications, DevOps ingénieur |
Créez un compartiment S3 et téléchargez le code. |
| AWS DevOps, DevOps ingénieur, administrateur du cloud, DevOps |
Créez une CloudFormation pile AWS. |
| AWS DevOps, DevOps |
Validez le déploiement de la CloudFormation pile. |
| DevOps ingénieur |
Supprimez le compartiment S3. | Videz et supprimez le compartiment S3 que vous avez créé précédemment. Pour plus d'informations, consultez Supprimer un compartiment dans la documentation Amazon S3. | AWS DevOps, DevOps |
Tâche | Description | Compétences requises |
---|---|---|
Configurez les diagrammes Helm de votre application Java. |
Vous pouvez activer différentes fonctionnalités pour les charges de travail Kubernetes en modifiant les valeurs du | DevOps |
Validez les graphiques de Helm pour détecter les erreurs de syntaxe. |
| DevOps ingénieur |
Tâche | Description | Compétences requises |
---|---|---|
Créez le pipeline CI/CD. |
| AWS DevOps |
Tâche | Description | Compétences requises |
---|---|---|
Activez l'intégration d'Aqua Security. | Cette étape est nécessaire pour télécharger les résultats de vulnérabilité des images Docker signalés par Trivy vers Security Hub. AWS CloudFormation ne prenant pas en charge les intégrations de Security Hub, ce processus doit être effectué manuellement.
| Administrateur AWS, DevOps ingénieur |
Tâche | Description | Compétences requises |
---|---|---|
Permet CodeBuild d'exécuter des commandes Helm ou kubectl dans le cluster Amazon EKS. | CodeBuild Pour être authentifié afin d'utiliser Helm ou des Important : La procédure suivante doit être terminée avant la phase d'approbation du déploiement dans CodePipeline.
| DevOps |
Tâche | Description | Compétences requises |
---|---|---|
Vérifiez que le pipeline CI/CD démarre automatiquement. |
Pour plus d'informations sur le démarrage du pipeline en utilisant CodePipeline, consultez les sections Démarrer un pipeline dans CodePipeline, Démarrer un pipeline manuellement et Démarrer un pipeline selon un calendrier dans la CodePipeline documentation AWS. | DevOps |
Approuvez le déploiement. |
| DevOps |
Validez le profilage des applications. | Une fois le déploiement terminé et le module d'application déployé dans Amazon EKS, l'agent Amazon CodeGuru Profiler configuré dans l'application essaie d'envoyer les données de profilage de l'application (processeur, résumé du segment de mémoire, latence et goulots d'étranglement) à Amazon Profiler. CodeGuru Lors du déploiement initial d'une application, Amazon CodeGuru Profiler prend environ 15 minutes pour visualiser les données de profilage. | AWS DevOps |
Ressources connexes
Numérisation d'images avec Trivy dans un AWS CodePipeline
(article de blog) Améliorer vos applications Java à l'aide d'Amazon CodeGuru Profiler
(article de blog)
Informations supplémentaires
CodeGuru Profiler ne doit pas être confondu avec le service AWS X-Ray en termes de fonctionnalités. CodeGuru Profiler est idéal pour identifier les lignes de code les plus coûteuses, susceptibles de provoquer des blocages ou des problèmes de sécurité, et pour les corriger avant qu'elles ne deviennent un risque potentiel. Le service AWS X-Ray est destiné à la surveillance des performances des applications.
Dans ce modèle, les règles d'événements sont associées au bus d'événements par défaut. Si nécessaire, vous pouvez étendre le modèle pour utiliser un bus d'événements personnalisé.
Ce modèle utilise CodeGuru Reviewer comme outil de test statique de sécurité des applications (SAST) pour le code des applications. Vous pouvez également utiliser ce pipeline pour d'autres outils, tels que SonarQube Checkmarx. Les instructions de configuration de numérisation correspondantes de n'importe lequel de ces outils peuvent être ajoutéesbuildspec/buildspec_secscan.yaml
, en remplacement des instructions de numérisation de CodeGuru.