:quality(80)/images.vogel.de/vogelonline/bdb/1883400/1883452/original.jpg)
AWS CloudFormation, Teil 4 Reverse-Engineering mit AWS CloudFormer
AWS CloudFormation erlaubt es, Infrastruktur nach dem „Infrastructure as Code“-Prinzip per JSON- oder YAML-Vorlagen zu definieren. Mit dem Tool CloudFormer lassen sich bereits vorhandene Ressourcen zwecks einfacherer Reproduzierung sogar in CloudFormation-Vorlagen konvertieren.
Anbieter zum Thema

Mit CloudFormation stellt AWS Kunden eine leicht erlernbare domänenspezifische Sprache (domain-specific language, DSL) zur Verfügung, mit deren Hilfe diese im Unterschied etwa zu AWS Elastic Beanstalk oder AWS OpsWorks „sämtliche“ Infrastruktur-Ressourcen in Ihrer Cloud-Umgebung beschreiben und bereitstellen können und zwar in allen gewünschten Regionen oder Konten.
Zur Modellierung wird lediglich eine einfache in JSON oder YAML formatierte Textdatei benötigt, welche in einen S3-Bucket gehostet der eigenen Cloud-Umgebung als Informationsquelle dient. Die Nutzung von CloudFormation an sich ist kostenfrei; bezahlt wird lediglich für die Ressourcen, die zum Ausführung der Anwendungen des Nutzers benötigt werden.
Wir haben AWS CloudFormation (CF) bereits in einer 3-teiligen Workshop-Reihe vorgestellt: von der allgemeinen Funktionsweise über geeignete Editoren fürs Bearbeiten von CloudFormation-Templates und den visuellen Designer bis hin zum manuellen Erstellen von Templates „from scratch“.
Verwenden von CloudFormer
Der zweite Teil der Workshop-Reihe nennt unter anderem ein Werkzeug zum Erstellen von CF-Vorlagen namens CloudFormer, mit dessen Hilfe sich auch Vorlagen aus bestehenden AWS-Deployments erzeugen lassen. Diese soll im Folgenden im Detail betrachtet werden, bietet es doch zwei interessante Use-Cases.
Zum einen hilft CloudFormer beim Erlernen der CloudFormation-DSL, da sich mit dem Tool Referenz-Vorlagen einer Umgebung erstellen lassen, die der Nutzer in der Regel gut kennt. Allerdings unterstützt CloudFormer als Beta-Tool nicht alle AWS Ressourcen oder Ressourceneigenschaften. Beschränkt man sich aber auf einfache und überschaubare Ressourcen, wie z. B. eine EC2-Instanz, erhält man auch ein überschaubares Basis-Template und kann dieses dann mit Hilfe der erworbenen Kenntnisse der CloudFormation-DSL sukzessive manuell weiter ausbauen
Darüber hinaus ist CloudFormer die ideale Lösung, um bestehende Deployments wiederholbar zu machen. Der Clou daran: CloudFormer wird von AWS selbst als CloudFormation-Vorlage bereitgestellt. Die prinzipielle Vorgehensweise zum Einsatz des CloudFormer ist demnach Folgende:
Der Nutzer erstellt aus der CloudFormer-CloudFormation-Vorlage einen CloudFormer-Stack. Das Tool wird auf einer t2.small-Amazon EC2-Instance ausgeführt und benötigt keine sonstigen Ressourcen. Wurde CloudFormer via CloudFormation bereitgestellt, verwendet man das webbasierte Tool zum Erstellen einer weiteren CF-Vorlage auf Basis vorhandener AWS Ressourcen und speichert die erstellte Vorlage in einem Amazon S3-Bucket.
Ist das erledigt, kann man den CloudFormer-Stack wieder löschen, denn dieser wird danach nicht mehr benötigt und muss daher auch keine unnötigen Gebühren verursachen. Die von CloudFormer generierte Vorlage kann der Nutzer dann verwenden, um bei Bedarf einen neuen Stack zu starten.
CloudFormer bereitstellen
Das Bereitstellen des CloudFormer ist schnell erledigt. Hierzu klickt der Nutzer in der AWS Management Console in der Rubrik „Management Tools“ auf „CloudFormation“ und dann auf die Schaltfläche „Create Stack“. Auf der Seite „Select Template“ wählt man dann im Abschnitt „Choose a template“ in der Auswahlliste bei „Select a sample template“ den Eintrag „Tools / CloudFormer“. Das Provisionieren des CloudFormer-Stacks kann man falls gewünscht in der Stack-Ansicht im „Events“-Tab verfolgen.
Alternativ kann der Nutzer mit einem Klick auf den verlinkten Stack-Namen auch „in“ den Stack wechseln. Hier findet man z. B. im Abschnitt „Resources“ die von CloudFormer bereitgestellten Ressourcen – in diesem Fall im Wesentlichen eine EC2-Instanz namens „WebServer“ nebst der benötigten Sicherheitsgruppe sowie einer passenden CF-Rolle bzw. ein zugehöriges Instance-Profil.
Der nächste Schritt besteht dann darin, den vom CloudFormer-Stack provisionierten Webserver zu starten. Dazu wechselt man wie gewohnt ins EC2-Dashboard und startet die Instanz im „Actions“-Menü. Wir haben die Instanz aus Gründen der Übersichtlichkeit in der vorangestellten Abbildung umbenannt, indem wir den Wert für den Name-Tag auf „CloudFormer“ geändert haben.
Anschließend verbindet man sich im Web Browser per HTTPS auf den Public DNS-Namen oder die Public-IP des CloudFormer-Webservers und kann damit beginnen, interaktiv ein eigenes CF-Template auf Basis bestehender AWS-Ressourcen zu erstellen.
CloudFormer in Aktion
CloudFormer fragt zunächst nach dem Nutzernamen und dem Passwort, das im Verlauf der Provisionierung des CloudFormer-Stacks festgelegt wurde. Die Startseite präsentiert zunächst einige Hintergrundinformationen zu CloudFormer und weist darauf hin, dass sich das Tool noch im Beta-Stadium befindet. Ferner informiert die Seite darüber, was CloudFormer im Detail tut. Der Admin kann nun zu Beginn die von CloudFormer zu analysierende Region festlegen und klickt dann auf „Create Template“. CloudFormer beginnt nun mit der Analyse der in der angegebenen Region des betreffenden Benutzer-Kontos bestehenden Infrastruktur.
Nun legt man auf der Seite „Intro“ einen Namen und eine Beschreibung für das zu generierende Template fest. In den dann folgenden (im Beispiel) 13 Dialog-Seiten präsentiert CloudFormer dem Nutzer dann interaktiv z. B. für die Bereiche „DNS“, „VPC“, „VPC Network“, „VPC Security“, „Network“, „Managed Services“, „Managed Config“, „Compute“, „Storage“, „Storage Config“, „App Services“, „Security“ und „Operational“ sämtliche im Konto des Nutzer identifizierten Ressourcen und erlaubt es jeweils alle oder Einige davon per Mausklick in das zu generierende Template aufzunehmen. Alternativ kann der Nutzer auch auf der Intro-Seite das Häkchen bei „Selelct all resources matching filter“ in einem Rutsch sämtliche Ressourcen in das Template integrieren.
Wer CloudFormer lediglich nutzen will, um erste Gehversuche mit der CF-DSL zu sammeln, kann sich wie wir im Beispiel etwa lediglich auf Compute-Ressourcen beschränken. Wir wollen daher nicht jede der 13 Dialogseiten abarbeiten, sondern integrieren lediglich eine EC2-Instanz in das Template.
Der Vorteil der Vorgehensweise ist, dass wir als Ergebnis ein relativ kompaktes CF-Template erhalten. Dieses enthält allerdings keinen Parameter- oder Mapping-Block und ist daher in keiner Weise parametrisiert. Die praktische Verwendbarkeit hält sich damit im Grenzen, da die fehlerfreie Instanziierung des so erzeugten Template voraussetzen würde, dass sämtliche übrigen (abhängigen) Ressourcen im Konto, welche wir bei der Erzeugung des Templates jetzt ausgelassen haben, exakt so vorhanden sind.
CloudFormer gibt dem Nutzer allerdings auf der „Summary“-Seite noch einmal die Gelegenheit, die gewählten Ressourcen mit „Modify“ gezielt anzupassen, wie in der Abbildung die „Instance-ID“ oder „Security-Groups-ID“.Dies empfiehlt sich beispielweise, wenn man das Template anschließend testen möchte, die enthalten Ressourcen aber bereits existieren.
Ein Klick auf „Continue“ präsentiert dann das erzeugte CF-Template, welches sich anschließend mit einem Klick auf „Save Template“ im von CloudFormer angefragten (vorhandenen) S3-Bucket ablegen lässt. Wahlweise kopiert und fügt man es per Copy-and-Paste in seine eigene JSON-Datei ein und lädt diese anschließend in den für CF-Templates favorisierten S3-Bucket hoch.
Jetzt kann aus dem Template ein neuer Stack instanziiert werden. Das manuelle Navigieren zur CloudFormation-Konsole kann man sich allerdings sparen, wenn man direkt im CloudFormer auf „Launch Stack“ klickt, wodurch auch gleich die passende S3-URL übernommen wird.
Dass das generierte Template in diesem extrem einfachen Beispiel wie beschrieben nicht parametrisiert ist, zeigt sich beim Instanziieren eines Stacks aus diesem Template darin, dass CloudFormation in der CF-Management-Console bis auf den Stack-Namen keine weiteren Parameter abfragt.
(ID:45308785)