In den letzten Kapiteln hast du kennengelernt wie man auf zwei unterschiedliche Arten die ToDo-Anwendung umsetzen kann. Durch CI/CD-Pipeline wurden einige Schritte bereits automatisiert, sodass nun Änderungen im Code einfacher vorgenommen werden können. Jedoch umfasst diese Lösung nur Teile der Ressourcen, die wir für die Anwendung genutzt haben. Manche davon haben wir noch manuell erstellt wie die Datenbank oder die VPC. Um das zu umgehen und nicht jedes Mal von neuem manuell erstellen zu müssen, kannst du eine Vorlage nutzen, die die Ressourcen in der Cloud für dich erstellt – der sogenannte Infrastructure-as-Code.
Infrastructure as Code ist ein Prozess, um Cloud Ressourcen zu provisionieren und zu managen. Dafür wird ein Template genutzt, welches einerseits lesbar für Menschen ist und andererseits von der Cloud genutzt werden kann, um die Ressourcen bereit zu stellen. Durch das Nutzen von Infrastructure as Code ist es übersichtlich was wie in der Cloud genutzt wird. Zusätzlich ist Vorlage wiederverwendbar und kann auch leicht mit anderen Nutzern geteilt werden. Dadurch ist die genutzte Infrastruktur leichter skalierbar, da bei Bedarf noch mehr Ressourcen durch die Vorlage provisioniert werden können. Falls die Provisionierung scheitert, gibt es einen Rollback, der dafür sorgt, dass die alte Version der Infrastruktur wieder da ist.
Für AWS Cloud Entwicklung gibt es einen bereits eingebauten Service für Infrastructure as Code AWS CloudFormation. Es nimmt die Vorlage den sogenannten Stack und provisioniert, updatet oder löscht Ressourcen, je nach dem was in der Vorlage definiert ist. Wenn eine Ressource geupdatet wird, dann wird CloudFormation diese entweder aktualisieren oder ersetzen.
Um Infrastructure as Code in der AWS Cloud auch in anderen Programmiersprachen wie beispielsweise JavaScript, TypeScript, Python, Java, C#, and Go nutzen zu können, gibt es das AWS Cloud Development Kit (AWS CDK). CDK ist ein Open-Source-Framework für die Softwareentwicklung. Durch CDK kann die Infrastruktur definiert werden, sie wird dann synthetisiert in eine CloudFormation Vorlage und dann ausgeführt. Das CDK lässt sich einfach durch die Befehlszeile ausführen oder kann in einem Continuous-Delivery-System ausgeführt werden.
Da Infrastructure-as-Code als Thema sehr umfangreich ist, beschäftigen wir uns mit einer kleinen Einführung in AWS CloudFormation, um die grundlegenden Methoden zu verstehen.
Eine CloudFormation Vorlage (template) beschreibt AWS Ressourcen in einem Stack. Ein Stack enthält alle erstellten Ressourcen durch die Vorlage. Die Vorlage selbst kann entweder als Textdatei im JSON oder YAML Format gespeichert werden. Weil die Vorlage nur eine Textdatei ist, kann sie einfach in jedem beliebigen Texteditor verändert werden. Die Struktur dieser Textdatei enthält Abschnitte, die verpflichtend sind und welche die optional sind.
Resources (verpflichtend): Komponenten der Infrastruktur
Die Ressourcen sind ein verpflichtender Teil der CloudFormation Vorlage und bestehen mindestens aus zwei Teilen: Type und Properties. Der Typ (Type) gibt an, welcher Art von Ressource erstellt werden soll und die Eigenschaften (Properties) spezifizieren die Ressource näher.
Im Kapitel Netzwerk hast du eine VPC und verschiedene Subnetze erstellt. Diese werden nun durch die Vorlage trainingCF_network.yaml, welche im Ordner src/cloudformation zu finden ist, definiert.
Aufgabe:
Gehe die Vorlage durch und prüfe, ob du Stück für Stück nachvollziehen kannst, wie SubnetPublicA
, SubnetPublicB
und das Internet-Gateway definiert sind.
Die Funktion Ref
gibt den Wert eines Parameters oder einer Ressource zurück. Wenn du einen Parameter referenzierst, dann erhältst du als Rückgabe den Wert des Parameters. Bei einer Ressource wird ebenfalls ein Wert zurückgegeben, der oft ein Verweis auf die Ressource ist z.B. eine ID. Bei der Nutzung einer YAML Vorlage, wird !Ref Parameter
genutzt.
Aufgabe:
Bearbeite die Datei training_rds.yaml, welche im Ordner cloudformation zu finden ist.
Referenziere in der Definition für die Datenbank RDSMySQL
die Eigenschaft AllocatedStorage
und bestimme mit Hilfe eines Parameters wie viel Kapazität der Datenbank zur Verfügung stehen soll.
Aufgabe:
Bearbeite in der Datei training_rds.yaml, welche im Ordner cloudformation zu finden ist, eine Security Group, wie du sie schon im Kapitel Netzwerke kennengelernt hast. Sie heisst RDSMySQLDBSecurityGroup und deine Aufgabe ist es die passenden Eigenschaften auszufüllen. Erstelle einen Eintrag für den Verkehr bzw. Anfragen, die zu der Instanz dürfen (Tipp: Ingress). CIDR-Range ist 172.100.0.0/16
, das Protokoll ist tcp
und der Port ist 3306
, um auf die Amazon RDS Datenbank zuzugreifen.
Im Folgenden wirst du eine CloudFormation Vorlage ausführen. Da manche Teile der Infrastruktur noch zum Beispiel Code benötigen wie die Lambda-Funktion oder das Frontend, werden wir diese separat anlegen. Um das noch mehr zu automatisieren, kannst du mit einer CDK arbeiten, was aber auf dieser Plattform limitiert ist.
cloudformation
beginnen soll, zum Beispiel cloudformation-{yourname}
Vorlage
.cd ~/environment/cloud-app-builders-modules-german/src/cloudformation/assets
.aws s3 sync . s3://DEIN_BUCKET
cloudformation
beginnt, in den Ordner Vorlage. Ersetze wieder DEIN_BUCKET durch den Namen deines erstellten Buckets.aws s3 cp cloudFormationToDo.yml s3://DEIN_BUCKET/Vorlage/
ToDoStack
.workshop-backend
klicken. In der Liste der Images auf Copy URI klicken, um die URI vom backend container image zu kopieren und dann in dem anderen Browser Fenster mit den CloudFormation Parametern einfügen.todopassword
.clusteradmin
ein. Klicke auf Next.Es kann bis zu 30 Minuten dauern, bis die CloudFormation Vorlage ausgeführt ist. Währenddessen werden immer Services verfügbar sein, die bereits erstellt wurden, sodass du dir diese unter Resources in deinem Stack anschauen kannst.
Es fehlt noch das Frontend:
todostack
.cd cloud-app-builders-modules-german/src/todo-frontend/build
.todostack
. Sync wird genutzt, damit alle Dateien auf diesem Ordner kopiert werden.aws s3 sync . s3://DEIN_BUCKET
Die Vorlage hat die gleiche ToDo-App auf Containern nochmal nachgebaut, sodass du diese auch nochmal testen kannst.
d1xz0u2lqfxspu.cloudfront.net
.Wenn du die serverlose Infrastruktur auch nutzen willst, kannst du diese wieder umstellen:
sessionStorage.setItem("apiBase", "/api/v2/")
. Dadurch wird nun die serverlosen Services genutzt.sessionStorage.setItem("apiBase", "/api/v1/")
in der Console aus. Nun sind deine Aufgaben wieder zusehen.Nun hast du die Vorlage der Infrastruktur für deine ToDo-App erfolgreich ausgeführt. Da nicht alle Ressourcen und Anwendungen in der Cloud dauerhaft gebraucht werden, lässt sich auch diese Infrastruktur leicht deprovisionieren.
ToDoStack
Stack aus.Nun wird deine ToDo-App wieder gelöscht.
Lösche zudem den S3 Bucket, in dem die CloudFormation Vorlage gespeichert ist.
cloudformation-{yourname}
von deinem S3 Bucket suchen.permanently delete
in das Textfeld ein und klicke Empty. Dadurch werden all Objekte in dem Bucket gelöscht.Herzlichen Glückwunsch! Du hast erfolgreich deine ToDo-App als Infrastuktur-as-Code aufgesetzt und ausgeführt. Durch diese Art ganze Anwendungen auszuführen, kannst du sie leicht verändern, mit anderen teilen und mehrfach ausführen. Du hast insgesamt mehrere Möglichkeiten gesehen, wie du deine Anwendung in der Cloud umsetzen kannst. Im Folgenden werden diese nochmal zusammengefasst.