CI/CD in AWS mit GitHub und AWS CodePipeline Node.js-App von GitHub in AWS Elastic Beanstalk bereitstellen

Von Dipl. -Ing. Thomas Drilling 4 min Lesedauer

Anbieter zum Thema

Mit dem AWS-Dienst „Code Pipeline“ lässt sich eine Continuous Delivery Pipeline zügig umsetzen. Basierend darauf stellen wir in diesem Beitrag eine Node.js-Anwendung von GitHub in AWS Elastic Beanstalk bereit.

Erfolgreiches (manuelles) Ausführen einer Pipeline.
Erfolgreiches (manuelles) Ausführen einer Pipeline.
(Bild: Drilling / AWS)

Mit Elastic Beanstalk lassen sich Web-Anwendungen innerhalb der AWS Cloud bereitstellen und verwalten, ohne Kenntnisse über die Infrastruktur zu besitzen. Elastic Beanstalk reduziert die Komplexität der Verwaltung, ohne die Auswahl oder Kontrolle einzuschränken. Man überträgt einfach den Anwendungscode und Elastic Beanstalk kümmert sich selbständig um die wichtigsten Punkte der Funktionsbereitstellung, des Lastausgleichs, der Skalierung und der Überwachung des Anwendungszustands.

Elastic Beanstalk unterstützt Anwendungen, die in Java, Go, PHP, Node.js, Python und Ruby entwickelt wurden. Sobald eine Anwendung bereitgestellt wurde, erzeugt Elastic Beanstalk die ausgewählte unterstützte Plattformversion und stellt eine oder zusätzliche AWS-Ressourcen wie AmazonEC2-Instances zur Ausführung bereit.

AWS Elastic Beanstalk macht es Entwicklern und Entwicklerinnen also einfach, ihre Anwendung innerhalb kürzerer Zeit auf verschiedenen Geräten freizugeben. Um diese Demo nachzuvollziehen, benötigen Sie eine vorbereitete Node.js-Beispielanwendung (z. B. die Musician App von GitHub), einen GitHub Account und ein AWS-Konto.

Anwendung erstellen

Das Importieren eines öffentlichen GitHub-Repositories in den eigenen GitHub-Account.
Das Importieren eines öffentlichen GitHub-Repositories in den eigenen GitHub-Account.
(Bild: Drilling / GitHub)

Zunächst einmal gilt es, die gewählte Beispiel-Anwendung in ein eigenes Repository im GitHub-Konto zu klonen, zu forken oder zu kopieren. Anschließend melden wir uns an der AWS-Management-Console an und suchen nach AWS Elastic Beanstalk.

Das Erstellen einer Webserver-Umgebung.
Das Erstellen einer Webserver-Umgebung.
(Bild: Drilling / AWS)

Dann erstellen wir in der Elastic-Beanstalk-Console eine neue Anwendung und wählen dazu im Abschnitt „Umgebungsstufe“ den Eintrag „Webserverumgebung“. Ferner legen wir im Unterabschnitt „Anwendungsinformationen“ einen Anwendungsnamen fest. Im Bereich „Umgebungsinformationen“ geht es um den unterliegenden Technologie-Stack, in dem der „Umgebungsname“ festgelegt wird. Entscheidend ist dann der Abschnitt „Plattform“.

Aus Kostengründen bleiben wir bei „Single-Instance“.
Aus Kostengründen bleiben wir bei „Single-Instance“.
(Bild: Drilling / AWS)

Hier wählen wir unter „Plattformtyp“ die Option „Hier verwaltete Plattform“, dann bei „Plattform“ den Eintrag „node.js“ und im letzten Abschnitt „Anwendungscode“ zunächst einmal die Option „Beispielanwendung“. Aus Kostengründen empfiehlt es sich abschließend, unter „Voreinstellungen“ den Eintrag „Single-Instance (kostenloses Kontingent verfügbar)“ auszuwählen.

Das Bereitstellen der Beanstalk-Umgebung.
Das Bereitstellen der Beanstalk-Umgebung.
(Bild: Drilling / AWS)

Bei den übrigen Einstellungen in den weiteren Assistentenschritten übernehmen wir die Standardvorgaben und lassen die Node-JS-Anwendung fertigstellen. Der Bereitstellungsprozess lässt sich im Tab „Ereignisse“ mitverfolgen.

Eine fertige Ausführungsumgebung in betriebsbereitem Zustand.
Eine fertige Ausführungsumgebung in betriebsbereitem Zustand.
(Bild: Drilling / AWS)

Der finale Bereitstellungszustand der Umgebung sollte dann so aussehen, wie in der vorangestellten Abbildung. Auf der Übersichtsseite der Umgebung werden viele Umgebungsinformationen angezeigt, z. B. Umgebungszustand, Ausführungsversion der Anwendung und Version der Anwendungsplattform, auf der die Anwendung ausgeführt wird.

Das Erstellen einer neuen Code-Pipline.
Das Erstellen einer neuen Code-Pipline.
(Bild: Drilling / AWS)

Wurde die Demo-Anwendung erfolgreich bereitgestellt, können wir die Continuous Integration und Continuous Delivery (CI/CD) Pipeline einrichten. Eine der Möglichkeiten, dies unter AWS zu tun, ist der Dienst „AWS Code Pipeline“. Dieser unterstützt beim Erstellen, Testen und Bereitstellen von Code, sobald Änderungen im Quell-Repository erkannt werden. Um dies zu tun, suchen wir in der AWS Management Console nach „AWS Code Pipeline“ und erstellen diese mit einem Klick auf „Pipeline erstellen“.

AWS Code Pipeline konfigurieren

Das Erstellen einer neuen Service-Rolle.
Das Erstellen einer neuen Service-Rolle.
(Bild: Drilling / AWS)

Die Pipeline benötigt erst einmal einen Pipeline-Namen, einen Typ und eine Service-Rolle. Der Default hier ist „Neue Servicerolle", wodurch CodePipeline selbständig eine neue Servicerolle in IAM erstellt. Nun muss man der Rolle nur noch einen nachvollziehbaren Namen geben, wie z. B. „AWSCodePipelineServiceRole-eu-central-1-drinodedemopipeline“.

AWS CodePipeline benötigt die Berechtigung zum Zugriff auf das GitHub-Konto.
AWS CodePipeline benötigt die Berechtigung zum Zugriff auf das GitHub-Konto.
(Bild: Drilling / AWS)

Nun geht es an den zweiten Schritt, bezeichnet mit „Quellstufe hinzufügen“. Hier wählen wir als Quellenanbieter „GitHub (Version 1)“. Ein Klick auf die Schaltfläche „Mit GitHub verbinden“ dient dazu, der AWS CodePipeline die Berechtigung für den Zugriff auf das eigene GitHub-Repository zu erteilen. Dies wird über die Schaltfläche „Authorize aws-codesuite“ noch einmal bestätigt.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

Die Auswahl des gewünschten Quell-Repositories.
Die Auswahl des gewünschten Quell-Repositories.
(Bild: Drilling / AWS)

Dies erlaubt es AWS CodePipeline fortan, die festgeschriebenen Änderungen aus GitHub nach AWS CodePipeline hochzuladen. Danach ist es möglich, das gewünschte Repository auszuwählen. Wurde das gesamte Repo geklont, wird zusätzlich der Branch festgelegt, also z. B. „Master“.

Bei den „Optionen zur Änderungserkennung“ besteht die Wahl zwischen „GitHub-Webooks (empfohlen)“ und „AWS CodePipeline“. Wir wählen GitHub-Webhooks. Dies erlaubt das Auslösen der Pipeline, sobald Code-Änderungen im Repository vorgenommen werden. Nach dem Klick auf „Weiter“ ist es im dritten Schritt „Build-Stufe hinzufügen“ möglich, den gewünschten Build-Anbieter auszuwählen.

Der „Provider“ der Bereitstellung, hier „Elastic Beanstalk“.
Der „Provider“ der Bereitstellung, hier „Elastic Beanstalk“.
(Bild: Drilling / AWS)

Hier wählen wir zunächst „Build-Stufe überspringen“, gefolgt von „Weiter“, um zum nächsten Schritt „Bereitstellungsstufe hinzufügen“ zu gelangen. Hier suchen wir im Listenfeld „Anbieter für Bereitstellung“ den Eintrag „AWS Elastic Beanstalk“ und ergänzen die passende Auswahl für „Anwendungsname“ und „Umgebungsname“.

Das Prüfen aller Angaben vor dem Bereitstellen der Pipeline.
Das Prüfen aller Angaben vor dem Bereitstellen der Pipeline.
(Bild: Drilling / AWS)

Es folgt der letzte Schritt „Prüfen“, bei dem es sich empfiehlt, die Zusammenfassung der getätigten Eingaben genau zu prüfen, bevor wir auf „Pipeline erstellen“ klicken.

Erfolgreiches (manuelles) Ausführen einer Pipeline.
Erfolgreiches (manuelles) Ausführen einer Pipeline.
(Bild: Drilling / AWS)

In der Pipeline-Ansicht sollte dann nach kurzer Zeit die Erfolgsmeldung angezeigt werden und der Build-Vorgang wird fortgesetzt, bis er abgeschlossen ist. Anschließend schauen wir im CodePipeline-Dashboard“ im Abschnitt „Pipeline“ unter „Pipelines / Pipeline“ den Verlauf der Ausführung ihren CICD-Workflows an.

Nimmt nun ein Developer Änderungen an seinem Code vor und überträgt diese in das zugehörige Repository, erkennt die konfigurierte Pipeline die Änderungen und startet die Ausführung. Diese Pipeline-Ausführung lässt sich entweder manuell auslösen, indem die Pipeline gestartet wird, oder sie kann auch automatisch ausgeführt werden.

(ID:49812192)