Schnelle Anwendungsentwicklung in der Cloud Development-Tools unter AWS CodeStar

Autor / Redakteur: Sascha Möllering * / Stephan Augsten

„Wir würden gerne eine zentrale Plattform nutzen, um Anwendungen schnell entwickeln und diese Aktivitäten zentral verwalten zu können. Welche Empfehlungen und Services existieren für die Anwendungsentwicklung in der AWS Cloud?“

Anbieter zum Thema

AWS CodePipeline und mögliche Integrationen in AWS Services und Software von Drittherstellern.
AWS CodePipeline und mögliche Integrationen in AWS Services und Software von Drittherstellern.
(Bild: AWS Germany GmbH)

Die kollaborative Anwendungsentwicklung erfordert eine Vielzahl von unterschiedlichen Werkzeugen. Dies beginnt bei der Entwicklungsumgebung (IDE) und reicht über ein Versionsverwaltungssystem für die Quelltextdateien bis hin zum Build-Server und einem Werkzeug zum Ausrollen der Software. Viele dieser Tools existieren als Open-Source-Variante, die zwar kostenfrei genutzt werden können, deren stabiler und skalierbarer Betrieb aber einen nicht unerheblichen Zeitaufwand erfordert.

Bei einem typischen agilen Continuous-Delivery-Prozess (CD-Prozess) schreiben Entwickler auf ihrer lokalen Workstation den Quelltext der Anwendung und checken ihren Code in ein Versionsverwaltungssystem wie Git ein. Ein Build-Server wie beispielsweise Jenkins baut und testet die Software.

Nach erfolgreichen Tests kann die Software dann durch entsprechende Skripte auf der vorhandenen Infrastruktur ausgerollt werden. Für diesen gesamten Prozess existieren auch kommerzielle Produkte wie Bamboo, welches automatisierte Builds, Tests und Releases in einem einzigen Workflow zusammenfasst.

Die AWS Cloud bietet für die einzelnen Komponenten einer klassischen CD-Pipeline einzelne Services. Für die Quellcodekontrolle existiert der vollständig verwaltete Service AWS CodeCommit, mit dem Unternehmen sichere und hoch skalierbare private Git-Repositories einfach hosten können. Dieser Server integriert sich nahtlos mit bestehenden Git-Werkzeugen.

Für das Kompilieren von Quellcode, Ausführen von Tests und Bauen von Softwarepaketen existiert der vollständig verwaltete Service AWS CodeBuild. Einer der großen Vorteile von CodeBuild besteht darin, dass sich dieser kontinuierlich der Arbeitslast anpasst und mehrere Builds gleichzeitig verarbeitet werden können. Es existieren eine Reihe von vorkonfigurierten Build-Umgebungen für den schnellen Einstieg, es können aber auch benutzerdefinierte Build-Umgebungen erstellt werden.

Für das Ausrollen der durch CodeBuild erzeugten Software-Pakete lässt sich der Service AWS CodeDeploy nutzen, der die Bereitstellung für beliebige Instanzen (einschließlich Amazon EC2- und lokaler Instanzen) automatisiert. Der Service skaliert mit der Infrastruktur, sodass problemlos Code für eine oder auch tausende von Instanzen bereitgestellt werden kann.

Für die Abbildung einer CI/CD-Pipeline existiert der Service AWS CodePipeline. Jedes Mal, wenn ein Entwickler Quelltext in CodeCommit veröffentlicht, steuert CodePipeline die vorher genannten Services basierend auf Regeln, die in der Beschreibung der CI/CD-Pipeline vorgegeben werden und kann Quellcode bauen, diesen testen und veröffentlichen.

Einheitliche Benutzeroberfläche mit AWS CodeStar

Mit Hilfe von AWS CodeStar können Anwendungen auf AWS schnell entwickelt, gebaut und bereitgestellt werden. Dieser Service bietet eine einheitliche Benutzeroberfläche, über die Sie Ihre Softwareentwicklungsaktivitäten zentral verwalten können. Jedes AWS CodeStar-Projekt enthält ein Projektmanagement-Dashboard mit einer integrierten Vorgangsverfolgungsfunktion auf der Grundlage von Atlassian JIRA Software.

Um ein Projekt zu beginnen, stehen Ihnen verschiedene AWS CodeStar-Vorlagen für Amazon EC2, AWS Lambda und AWS Elastic Beanstalk zur Verfügung. CodeStar nutzt dabei die bereits angesprochenen Services und bietet eine intuitive und leicht zu nutzende Benutzeroberfläche. Ein AWS CodeStar-Projekt enthält neben dem Quelltext und den zusätzlichen Skripten für Build- und Dependecy-Management noch zusätzliche Beschreibungsdateien, die für das Bauen der Softwarepakete und das Deployment notwendig sind.

Als Beispiel betrachten wir an dieser Stelle ein SpringBoot-Projekt, dessen Funktionalität in verschiedene Lambda-Funktionen deployt wird. Neben der Maven-typischen pom.xml-Datei, die für die Verwaltung der Abhängigkeiten notwendig ist, existieren noch zusätzlich eine buildspec.yml- und eine template.yml-Datei. Die buildspec.yml-Datei beschreibt den eigentlichen Build-Prozess des Softwarepakets mit Hilfe von AWS CodeBuild.

version: 0.1

phases:
   build:
      commands:
         - echo Entering build phase...
         - echo Build started on 'date'
         - mvn package shade:shade
         - mv target/codeStarCrud.jar ./
         - rm -rf target src buildspec.yml pom.xml
         - aws cloudformation package --template template.yml --s3-bucket $S3_BUCKET --output-template template-export.json
artifacts:
   files:
      - codeStarCrud.jar
      - template-export.json

Der Build-Prozess startet mit dem Aufruf von Maven mit dem Shade-Plugin, das ein Fat-JAR mit allen Abhängigkeiten erzeugt. Überflüssige Dateien werden gelöscht, die JAR wird an eine bestimmte Stelle im Dateisystem kopiert und es werden die für das Deployment notwendigen Dateien paketiert.

Die Datei template.yml ist ein AWS SAM-template, das es auf einfache Weise ermöglicht, Amazon API Gateway APIs, AWS Lambda-Funktionen und Amazon DynamoDB-Tabellen bereitzustellen, die von serverlosen Applikationen genutzt werden. Für unser einfaches Beispiel benötigen wir einige Lambda-Funktionen, die durch ein Amazon API Gateway aufgerufen werden und eine Amazon DynamoDB-Tabelle, in der die Daten der Applikation persistiert werden.

Fazit

AWS CodeStar vereinfacht die kollaborative Softwareentwicklung in der AWS Cloud durch die Integration von vielen Services deutlich. Mit CodeStar können gewohnte und bestehende Werkzeuge wie Atlassian JIRA für das Ticketing weiterverwendet und in den Workflow von AWS CodeStar integriert werden.

Sascha Möllering
Sascha Möllering
(Bild: AWS Germany GmbH)

* Sascha Möllering arbeitet als Solutions Architect bei der Amazon Web Services Germany GmbH. Seine Interessen liegen in den Bereichen Automation, Infrastructure as Code, Distributed Computing, Container und JVM.

(ID:44993794)