Im Jahr 2017 hat AWS den Dienst AWS CodeStar vorgestellt. Dieser soll das Einrichten und Betreiben von Continuous-Integration- und Continuous-Delivery-Pipelines besonders komfortabel machen. Ein solches Szenraio spielen wir hier durch.
Ein CodeStar-Projekt integriert sämtliche Ressourcen einer CI/CD- (sprich Continuous Integration and Continuous Delivery) Pipeline so miteinander, dass das ganze Projekt von einem zentralen Ort sicher erstellt, bearbeitet und verwaltet wird. AWS CodeStar ist aber auch in der Lage, mehrere interne und externe Entwickler auf sichere Weise in ein Entwicklungsprojekt einzubinden.
Konkret integriert CodeStar mehr oder weniger automatisch AWS CodeCommit, AWS CodeBuild, AWS CodeDeploy und AWS Code Pipeline zu einer erprobten CI/CD-Toolchain. Jedes der genannten Tools ist aber natürlich auch für sich einsatzbar ist, verfügt über eine eigene grafische Management Console und lässt sich mit Hilfe eigener CLI/SDK-Calls verwalten und verwenden.
Dementsprechend ist es natürlich ebenso denkbar, jedes der genannten Tools wiederum mit jedem anderen dieser AWS-Tools oder auch mit vielen externen CI/CD-Tools zu integrieren. Nutzer können Ihre CI/CD-Toolchain dann in vielfältiger Weise aufbauen.
Mit oder ohne CodeStar lassen sich mit AWS-Diensten, externen Cloud-Ressourcen und On-Premises-Tools CI/CD-Toolchains in vielfältiger Weise erstellen. Ein weit verbreiteter Ansatz ist z. B. die Verwendung von …
- Github, Gitlab oder Bitbucket als Cloud-basiertes Repository,
- CodeBuild zum Bauen der Projekte für die unterschiedlichen Umgebungen,
- CodeDeploy, Elastic Beanstalk oder CloudFormation für die Bereitstellung auf EC2, Lambda oder Physik, während sich
- ein externer CI-Server wie Jenkins um die „Durchflusssteuerung“ kümmert.
Allerdings ist es dann meist schwieriger, die Schnittstellen/Übergänge von externen Services zu AWS oder On-Premises so zu konfigurieren, dass der Prozessfluss im Sinne von DevOps ohne manuelle Interaktionen, Genehmigungen oder sonstige Feedback-Schleifen durchläuft.
Wir haben jedes der genannten Tools bereits einzeln besprochen, hier wollen wir den Fokus auf das große Ganze, also die CI/CD-Pipeline legen. Verwendet man hierbei ausschließlich AWS-Services und überlässt das Projekt- und User-Management AWS CodeStar, gelingt das Einrichten, Betreiben, Überwachen und Visualisieren besonders elegant. Als Beispiel wollen wir im folgenden Workshop einen auf Python/Django basierenden Web Service auf EC2 ausliefern und betreiben.
Neues CodeStar-Projekt
Dazu legen wir zunächst in der AWS CodeStar-Console ein neues CodeStar-Projekt an, wie in unserem allgemeineren CodeStar-Artikelbeschrieben. Dazu bedarf es einer CodeStar-Service-Rolle. AWS-Nutzer können AWS CodeStar als IAM-Benutzer, Federation User, Root-User oder im Rahmen einer übernommenen IAM-Rolle verwenden. Wir verwenden CodeStar als IAM-Benutzer.
Der Vorteil ist, dass AWS CodeStar dann bei der Konfiguration des Benutzerzugriffs hilft, indem es die Berechtigungen für den IAM-Nutzer verwaltet. Wurde der IAM-Benutzer bereits einem oder mehreren AWS anderen CodeStar-Projekten hinzugefügt, hat dieser bereits die Richtlinien und Berechtigungen für den Zugriff auf den Service und die Ressourcen für die Projekte, zu denen sie gehören.
Viele AWS CodeStar-Projekte verwenden wie in unserem Fall AWS CodeDeploy oder AWS Elastic Beanstalk zur Bereitstellung (Deployment) von Code auf Amazon EC2-Instanzen. Um im Rahmen des Projektes auf verbundene Amazon EC2-Instances zugreifen zu können ist es sinnvoll, für den verwendeten IAM-Benutzer ein EC2-Schlüsselpaar zu erstellen. Der betreffende IAM-Benutzer muss über Berechtigungen zum Erstellen und Verwalten von Amazon EC2-Schlüsseln verfügen wie z. B: „ec2:CreateKeyPair“ und „ec2:ImportKeyPair“.
Startpunkt für ein neues Projekt ist die CodeStar-Console in der AWS Management Console. Hier erstellen wir mit einem Klick auf den Button „Start a project“ (beim ersten Besuch des Dienstes) oder „Create a new project“ (sofern bereits andere Projekte bestehen) ein CodeStar-Projekt aus einer Vorlage. Hier wählen wir das Projekt-Template „Python (Django)“ mit dem Applikationstyp „Web application“ und dem Envrionment-Typ „EC2“.
Dann vergibt man einen Projektnamen und eine „Project-ID“. Sofern der Nutzer Letztere nicht selbst bestimmt, leitet CodeStar die Projekt-ID aus dem Projektnamen ab. Das ist wichtig zu wissen, weil die Projekt-ID die Basis zur Ableitung weiterer Meta-Daten für die „beteiligten“ Tools wie Code Commit, CodeBuild usw. ist.
AWS CodeCommit
Als Repository verwenden wir AWS CodeCommit, auch wenn CodeStar alternativ GitHub unterstützt. In letzterem Fall benötigt man für das CodeStar-Projekt einen gültigen GitHub-Benutzer-Account. AWS CodeCommit bietet den Vorteil, dass es direkt mit IAM integriert ist und die Daten im Backend auf Basis von AWS S3 sicher, d. h. verschlüsselt abgelegt werden.
Konkret ist AWS CodeCommit ein Version Control Service, der von Amazon Web Services gehostet und betrieben wird. Nutzer können in CodeCommit Komponenten beliebiger Art wie Dokumente, Quellcode und Binärdateien privat in der Cloud speichern und verwalten. Neben der integrierten Sicherheit bietet AWS CodeCommit auch den Vorteil, dass der Dienst in sich hochverfügbar ist und bei Bedarf automatisch skaliert.
Zudem gibt es mit CodeCommit keine Einschränkung hinsichtlich der Größe der Repositories oder der Dateitypen, die gespeichert werden können. Weitere Details zur Integration von CodeStar mit CodeCommit finden sich in unseren CodeCommit-Artikel.
Nach einem Klick auf „Next“ überprüfen wir noch die Ressourcen und Konfigurationsdetails und klicken dazu auf den blauen Link „Edit Amazon EC2 Configuration“ rechts oben. Dieser wir natürlich nur angezeigt, wenn das Projekt wie im Beispiel auf EC2 bereitgestellt wird. Hier könnte man bei Bedarf auch einen anderen Instanz-Typ auswählen.
Interessant ist auch die visuelle Darstellung der Pipeline für das gesamte CodeStar-Projekt im Assistenten. Dieses verwendet offenbar (grau hinterlegt) AWS CodeCommit für den SourceCode-Verwaltung, AWS CodeDeploy für die Bereitstellung des Anwendungs-Codes und AWS CloudWatch für die Überwachung. Als Continuous Integration Service kommen AWS CodeBuild und AWS CodePipeline zum Einsatz. Doch zunächst klicken wir auf „Create Project“, wählen ein EC2-Keypair und bestätigen die Projekt-Erstellung.