Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Automatisches Erstellen und Bereitstellen einer Java-Anwendung auf Amazon EKS mithilfe einer CI/CD-Pipeline
Erstellt von MAHESH RAGHUNANDANAN (AWS), James Radtke (AWS) und Jomcy Pappachen (AWS)
Code-Repository: aws-cicd-java-eks | Umgebung: Produktion | Technologien: Container und Mikroservices; CloudNative DevOps; Modernisierung |
Arbeitslast: Alle anderen Workloads | AWS-Dienste: AWS CloudFormation; AWS CodeCommit CodePipeline; Amazon EC2 Container Registry; Amazon EKS |
Übersicht
Dieses Muster beschreibt, wie Sie eine CI/CD-Pipeline (Continuous Integration and Continuous Delivery) erstellen, die automatisch eine Java-Anwendung mit empfohlenen DevSecOps Verfahren für einen Amazon Elastic Kubernetes Service (Amazon EKS) -Cluster in der Amazon Web Services (AWS) -Cloud erstellt und bereitstellt. Dieses Muster verwendet eine Begrüßungsanwendung, die mit einem Spring Boot Java-Framework entwickelt wurde und Apache Maven verwendet.
Sie können den Ansatz dieses Musters verwenden, um den Code für eine Java-Anwendung zu erstellen, die Anwendungsartefakte als Docker-Image zu verpacken, das Image sicherheitstechnisch zu scannen und das Image als Workload-Container auf Amazon EKS hochzuladen. Der Ansatz dieses Musters ist nützlich, wenn Sie von einer eng gekoppelten monolithischen Architektur zu einer Microservices-Architektur migrieren möchten. Dieser Ansatz hilft Ihnen auch dabei, den gesamten Lebenszyklus einer Java-Anwendung zu überwachen und zu verwalten, wodurch ein höheres Maß an Automatisierung gewährleistet und Fehler oder Bugs vermieden werden können.
Voraussetzungen und Einschränkungen
Voraussetzungen
Ein aktives AWS-Konto.
AWS-Befehlszeilenschnittstelle (AWS CLI) Version 2, installiert und konfiguriert. Weitere Informationen dazu finden Sie unter Installation, Aktualisierung und Deinstallation von AWS CLI Version 2 in der AWS CLI-Dokumentation.
AWS CLI Version 2 muss mit derselben IAM-Rolle konfiguriert werden, die den Amazon EKS-Cluster erstellt, da nur diese Rolle berechtigt ist, dem weitere IAM-Rollen hinzuzufügen.
aws-auth
ConfigMap
Informationen und Schritte zur Konfiguration von AWS CLI finden Sie unter Grundlagen der Konfiguration in der AWS-CLI-Dokumentation.Rollen und Berechtigungen von AWS Identity and Access Management (IAM) mit vollem Zugriff auf AWS CloudFormation. Weitere Informationen dazu finden Sie in der CloudFormation AWS-Dokumentation unter Zugriffskontrolle mit IAM.
Ein vorhandener Amazon EKS-Cluster mit Details zum IAM-Rollennamen und zum Amazon Resource Name (ARN) der IAM-Rolle der Worker-Knoten im EKS-Cluster.
Kubernetes Cluster Autoscaler, installiert und konfiguriert in Ihrem Amazon EKS-Cluster. Weitere Informationen finden Sie unter Cluster Autoscaler in der Amazon EKS-Dokumentation.
Zugriff auf Code im Repository. GitHub
Wichtiger Hinweis
AWS Security Hub wird als Teil der CloudFormation AWS-Vorlagen aktiviert, die im Code enthalten sind. Standardmäßig wird Security Hub nach der Aktivierung mit einer kostenlosen 30-Tage-Testversion geliefert. Danach fallen für diesen AWS-Service Kosten an. Weitere Informationen zu den Preisen finden Sie unter AWS Security Hub Hub-Preise
Produktversionen
Helm Version 3.4.2 oder höher
Apache Maven Version 3.6.3 oder höher
BridgeCrew Checkov Version 2.2 oder höher
Aqua Security Trivy Version 0.37 oder höher
Architektur
Technologie-Stack
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)
Zielarchitektur
![""](images/pattern-img/95a5b5c2-d7fb-41eb-9089-455318c0d585/images/4f5fd8c2-2b6d-4945-aa64-fcf317521711.png)
Das Diagramm zeigt den folgenden Workflow:
Der Entwickler aktualisiert den Java-Anwendungscode im Basiszweig des CodeCommit Repositorys, wodurch eine Pull-Anfrage (PR) erstellt wird.
Sobald die PR eingereicht wurde, überprüft Amazon CodeGuru Reviewer den Code automatisch, analysiert ihn auf der Grundlage von Best Practices für Java und gibt dem Entwickler Empfehlungen.
Nachdem der PR mit dem Basiszweig zusammengeführt wurde, wird ein EventBridge Amazon-Event erstellt.
Das EventBridge Ereignis initiiert die CodePipeline Pipeline, die gestartet wird.
CodePipeline führt die CodeSecurity Scan-Phase aus (kontinuierliche Sicherheit).
CodeBuild startet den Sicherheitsscan-Prozess, bei dem die Helm-Dateien für die Dockerfile- und Kubernetes-Bereitstellung mit Checkov gescannt werden und der Quellcode der Anwendung auf der Grundlage inkrementeller Codeänderungen gescannt wird. Der Anwendungsquellcodescan wird vom CodeGuru Reviewer Command Line Interface (CLI) -Wrapper
durchgeführt. Wenn die Sicherheitsscan-Phase erfolgreich ist, wird die Build-Phase (kontinuierliche Integration) eingeleitet.
In der CodeBuild Build-Phase erstellt das Artefakt, packt das Artefakt in ein Docker-Image, scannt das Image mithilfe von Aqua Security Trivy auf Sicherheitslücken und speichert das Image in Amazon ECR.
Die in Schritt 8 erkannten Sicherheitslücken werden zur weiteren Analyse durch Entwickler oder Techniker auf Security Hub hochgeladen. Security Hub bietet einen Überblick und Empfehlungen zur Behebung der Sicherheitslücken.
E-Mail-Benachrichtigungen zu verschiedenen Phasen innerhalb der CodePipeline Pipeline werden über Amazon SNS gesendet.
Nachdem die Phasen der kontinuierlichen Integration abgeschlossen sind, CodePipeline beginnt die Bereitstellungsphase (kontinuierliche Bereitstellung).
Das Docker-Image wird mithilfe von Helm-Diagrammen als Container-Workload (Pod) in Amazon EKS bereitgestellt.
Der Anwendungs-Pod ist mit Amazon CodeGuru Profiler Agent konfiguriert, der die Profilerstellungsdaten der Anwendung (CPU, Heap-Nutzung und Latenz) an Amazon CodeGuru Profiler sendet, was Entwicklern hilft, das Verhalten der Anwendung zu verstehen.
Tools
AWS-Services
AWS CloudFormation hilft Ihnen dabei, AWS-Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten Lebenszyklus über AWS-Konten und Regionen hinweg zu verwalten.
AWS CodeBuild ist ein vollständig verwalteter Build-Service, der Sie beim Kompilieren von Quellcode, beim Ausführen von Komponententests und beim Erstellen von Artefakten unterstützt, die sofort einsatzbereit sind.
AWS CodeCommit ist ein Versionskontrollservice, mit dem Sie Git-Repositorys privat speichern und verwalten können, ohne Ihr eigenes Quellcodeverwaltungssystem verwalten zu müssen.
Amazon CodeGuru Profiler sammelt Laufzeitleistungsdaten aus Ihren Live-Anwendungen und gibt Empfehlungen, die Ihnen bei der Feinabstimmung Ihrer Anwendungsleistung helfen können.
Amazon CodeGuru Reviewer verwendet Programmanalyse und maschinelles Lernen, um potenzielle Fehler zu erkennen, die für Entwickler schwer zu finden sind, und bietet Vorschläge zur Verbesserung Ihres Java- und Python-Codes.
AWS CodePipeline hilft Ihnen dabei, die verschiedenen Phasen einer Softwareversion schnell zu modellieren und zu konfigurieren und die Schritte zu automatisieren, die für die kontinuierliche Veröffentlichung von Softwareänderungen erforderlich sind.
Amazon Elastic Container Registry (Amazon ECR) ist ein verwalteter Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist.
Amazon Elastic Kubernetes Service (Amazon EKS) hilft Ihnen dabei, Kubernetes auf AWS auszuführen, ohne Ihre eigene Kubernetes-Steuerebene oder Knoten installieren oder verwalten zu müssen.
Amazon EventBridge ist ein serverloser Event-Bus-Service, mit dem Sie Ihre Anwendungen mit Echtzeitdaten aus einer Vielzahl von Quellen verbinden können. Zum Beispiel AWS-Lambda-Funktionen, HTTP-Aufruf-Endpunkte, die API-Ziele verwenden, oder Event-Busse in anderen AWS-Konten.
AWS Identity and Access Management (IAM) hilft Ihnen dabei, den Zugriff auf Ihre AWS-Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.
AWS Security Hub bietet einen umfassenden Überblick über Ihren Sicherheitsstatus in AWS. Es hilft Ihnen auch dabei, Ihre AWS-Umgebung anhand von Sicherheitsstandards und Best Practices der Branche zu überprüfen.
Amazon Simple Notification Service (Amazon SNS) unterstützt Sie bei der Koordination und Verwaltung des Nachrichtenaustauschs zwischen Herausgebern und Kunden, einschließlich Webservern und E-Mail-Adressen.
Amazon Simple Storage Service (Amazon S3) ist ein cloudbasierter Objektspeicherservice, der Sie beim Speichern, Schützen und Abrufen beliebiger Datenmengen unterstützt.
Andere Dienste
Helm
ist ein Open-Source-Paketmanager für Kubernetes. Apache Maven
ist ein Tool für die Verwaltung und Untersuchung von Softwareprojekten. BridgeCrew Checkov
ist ein statisches Code-Analyse-Tool zum Scannen von IaC-Dateien (Infrastructure as Code) auf Fehlkonfigurationen, die zu Sicherheits- oder Compliance-Problemen führen können. Aqua Security Trivy
ist ein umfassender Scanner für Sicherheitslücken in Container-Images, Dateisystemen und Git-Repositorys sowie für Konfigurationsprobleme.
Code
Der Code für dieses Muster ist im Repository verfügbar. GitHub aws-codepipeline-devsecops-amazoneks
Bewährte Methoden
Das Prinzip der geringsten Rechte wurde für IAM-Entitäten in allen Phasen dieser Lösung befolgt. Wenn Sie die Lösung um zusätzliche AWS-Services oder Tools von Drittanbietern erweitern möchten, empfehlen wir, dem Prinzip der geringsten Rechte zu folgen.
Wenn Sie über mehrere Java-Anwendungen verfügen, empfehlen wir, für jede Anwendung separate CI/CD-Pipelines zu erstellen.
Wenn Sie eine Monolith-Anwendung haben, empfehlen wir, die Anwendung so weit wie möglich in Microservices aufzuteilen. Microservices sind flexibler, sie erleichtern die Bereitstellung von Anwendungen als Container und bieten einen besseren Einblick in den gesamten Aufbau und die Bereitstellung der Anwendung.
Epen
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Klonen Sie das GitHub Repository. | Führen Sie den folgenden Befehl aus, um das Repository zu klonen.
| App-Entwickler, DevOps Ingenieur |
Erstellen Sie einen S3-Bucket und laden Sie den Code hoch. |
| AWS DevOps, DevOps Ingenieur, Cloud-Administrator, DevOps |
Erstellen Sie einen CloudFormation AWS-Stack. |
| AWS DevOps, DevOps |
Validieren Sie die CloudFormation Stack-Bereitstellung. |
| DevOps Ingenieur |
Löschen Sie den S3-Bucket. | Leeren und löschen Sie den S3-Bucket, den Sie zuvor erstellt haben. Weitere Informationen finden Sie unter Löschen eines Buckets in der Amazon S3 S3-Dokumentation. | AWS DevOps, DevOps |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Konfigurieren Sie die Helm-Charts Ihrer Java-Anwendung. |
Sie können verschiedene Funktionen für die Kubernetes-Workloads aktivieren, indem Sie die Werte in der | DevOps |
Überprüfen Sie Helm-Diagramme auf Syntaxfehler. |
| DevOps Ingenieur |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Erstellen Sie die CI/CD-Pipeline. |
| AWS DevOps |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Schalten Sie die Aqua Security-Integration ein. | Dieser Schritt ist erforderlich, um die von Trivy gemeldeten Ergebnisse der Docker-Image-Sicherheitslücke auf Security Hub hochzuladen. Da AWS CloudFormation keine Security Hub Hub-Integrationen unterstützt, muss dieser Prozess manuell durchgeführt werden.
| AWS-Administrator, DevOps Ingenieur |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
CodeBuild Erlaubt die Ausführung von Helm- oder kubectl-Befehlen im Amazon EKS-Cluster. | CodeBuild Um für die Verwendung von Helm oder Wichtig: Das folgende Verfahren muss vor der Genehmigung der Bereitstellung abgeschlossen sein CodePipeline.
Der | DevOps |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Stellen Sie sicher, dass die CI/CD-Pipeline automatisch initiiert wird. |
Weitere Informationen zum Starten der Pipeline mithilfe CodePipeline von finden Sie in der CodePipeline AWS-Dokumentation unter Starten einer Pipeline in CodePipeline, Manuelles Starten einer Pipeline und Starten einer Pipeline nach einem Zeitplan. | DevOps |
Genehmigen Sie die Bereitstellung. |
| DevOps |
Überprüfen Sie die Anwendungsprofilerstellung. | Nachdem die Bereitstellung abgeschlossen und der Anwendungs-Pod in Amazon EKS bereitgestellt wurde, versucht der in der Anwendung konfigurierte Amazon CodeGuru Profiler-Agent, Profilerstellungsdaten der Anwendung (CPU, Heap-Zusammenfassung, Latenz und Engpässe) an Amazon Profiler zu senden. CodeGuru Bei der ersten Bereitstellung einer Anwendung benötigt Amazon CodeGuru Profiler etwa 15 Minuten, um die Profilerstellungsdaten zu visualisieren. | AWS DevOps |
Zugehörige Ressourcen
Zusätzliche Informationen
CodeGuru Profiler sollte in Bezug auf die Funktionalität nicht mit dem AWS X-Ray-Service verwechselt werden. CodeGuru Profiler wird bevorzugt, um die teuersten Codezeilen zu identifizieren, die zu Engpässen oder Sicherheitsproblemen führen können, und um sie zu beheben, bevor sie zu einem potenziellen Risiko werden. Der AWS X-Ray-Service dient der Überwachung der Anwendungsleistung.
In diesem Muster sind die Ereignisregeln dem Standard-Event-Bus zugeordnet. Bei Bedarf können Sie das Muster erweitern, um einen benutzerdefinierten Event-Bus zu verwenden.
Dieses Muster verwendet CodeGuru Reviewer als statisches Tool zum Testen der Anwendungssicherheit (SAST) für Anwendungscode. Sie können diese Pipeline auch für andere Tools wie SonarQube Checkmarx verwenden. Die entsprechenden Anweisungen zur Scaneinrichtung für jedes dieser Tools können hinzugefügt werden und ersetzen so die Scananweisungen von CodeGuru. buildspec/buildspec_secscan.yaml