CI/CD in AWS mit GitHub und AWS CodePipeline Node.js-App von GitHub in AWS Elastic Beanstalk bereitstellen
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.
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
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.
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“.
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.
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.
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.
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
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“.
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.
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.
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“.
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.
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)