AWS CloudFormation, Teil 1

Infrastruktur-Bereitstellung mit Amazon Web Services

Seite: 2/2

Firmen zum Thema

CloudFormation-Stacks mit CloudFormer oder manuell erstellen

Die Startseite von CloudFormation.
Die Startseite von CloudFormation.
(Bild: Thomas Drilling / AWS)

Am einfachsten gelingt der Einstieg in AWS CloudFormation durch das Experimentieren mit einer der zahlreichen Sample-Vorlagen. Hier klickt man z. B. in der AWS Management Console auf der CloudFormation-Startseite auf „Create New Stack“. Möchte man dagegen direkt mit dem Erstellen eigener Templates im grafischen CloudFormation Designer starten, klickt man auf „Design template“. Ferner gibt es an vierter Stelle noch die Option „Launch CloudFormer“. Mit CloudFormer lässt sich ein Template einfach auf Basis bestehender AWS-Ressourcen erstellen.

CloudFormer

Eine lesenswerte Einführung in CloudFormer findet sich im AWS DevOps-Blog. Übrigens ist CloudFormer selbst ebenfalls ein AWS CloudFormation Stack. Der Anwender nutzt also CloudFormer, indem er den CloudFormer-Stack aus seiner AWS-Umgebung starten.

Der CloudFormer-Stack initiiert eine t2.medium Amazon-EC2-Instanz und basiert auf einem Amazon-Linux-AMI, das auch in den Community-AMIs zu finden ist. Hat man mit CloudFormer ein CloudFormation-Template erzeugt, kann man es z. B. in einem S3-Bucket speichern und den CloudFormer-Stack danach wieder herunterfahren.

Eigene Stacks

Nutzer, die ohne CloudFormer eigene Stacks von Grund auf neu oder aus von AWS bereitgestellten CF-Templates erstellen möchten, verwenden auf der CloudFormation-Startseite „Create new stack“ oder „Create new StackSet“. Wie auf der CF-Startseite haben Nutzer auch hier mit der Schaltfläche „Design template“ noch einmal die Gelegenheit, zum grafischen Designer zu wechseln.

Template für einen Wordpress-Stack.
Template für einen Wordpress-Stack.
(Bild: Thomas Drilling / AWS)

Ansonsten wählt der Nutzer um Bereich „Choose a template“ entweder ein Template aus dem Vorlagen-Repertoire von AWS („Select a sample template“) oder greift mit „Choose File“ auf ein eigenes CloudFormation-Template zu, das der Nutzer z. B. vorher hochgeladen bzw. in einem S3-Bucket gespeichert hat, welchen er zum Hosten seiner CloudFormation-Templates nutzt. Auch dieses Template hätte mit CloudFormer aus einer bestehenden Anwendung generiert sein können.

Wordpress-Template im CloudFormation-Designer.
Wordpress-Template im CloudFormation-Designer.
(Bild: Thomas Drilling / AWS)

Das Beispiel der Abbildung verwendet „Single Instance Samples -> WordPress blog“. Im Bereich „Tools“ stünde im Übrigen aber auch ein CloudFormer-Template bereit. Optional hätte man auch hier wieder auf den Link „View/Edit template in Designer“ klicken können, um das gewählte Template für den Wordpress-Stack direkt im Designer anzuzeigen bzw. anzupassen.

Die genauen Stack-Details.
Die genauen Stack-Details.
(Bild: Thomas Drilling / AWS)

Im Assistenten hingegen vergibt man bei „Specify Details“ zuerst einmal den Stack-Namen und definiert einige elementare Parameter, etwa zur Kommunikation mit der für „Wordpress“ benötigten MySQL-Datenbank. Diese benötigt einen Instanz-Typ für die unterliegende ECX2-Instanz und Dinge wie DB-Passwort, DB-Root-Passwort oder den DB-User. Ferner ist ggf. bei „Key-Name“ der Name für den zum Verbinden mit der DB-EC2-Instanz verwendenden SSH-KeyPairs festzulegen.

Konfigurationsübersicht für den Wordpress-Stack.
Konfigurationsübersicht für den Wordpress-Stack.
(Bild: Thomas Drilling / AWS)

Im Schritt „Options“ lassen sich dann wie bei den meisten AWS-Ressourcen bei Bedarf noch Tags vergeben. Mit Hilfe von Tags kann der Nutzer dann z. B. später im EC2-Dashboard auf einen Blick erkennen, welche Ressourcen von CloudFormation provisioniert wurden und welche manuell. Darüber hinaus kann der Nutzer in diesem Dialog dem CloudFormation-Stack eine IAM-Rolle zuweisen, damit CloudFormation über die erforderlichen Berechtigungen zum Erzeugen der benötigten Ressourcen wie z. B. Subnetze oder Security-Gruppen verfügt.

Alternativ kann man aber auch im Abschnitt „Advanced“ eine Stack-Policy in Form eines JSON-Dokuments einfügen. Details dazu finden sich in den Security-Best-Practises für CloudFormation. Wird hier keine IAM-Rolle angegeben, verwendet CloudFormation die Berechtigungen, die mit dem Konto verknüpft sind, über das der Stack gerade erzeugt wird.

Die einzelnen Ereignisse bei der Stack-Erzeugung lassen sich in der Event-Konsole verfolgen.
Die einzelnen Ereignisse bei der Stack-Erzeugung lassen sich in der Event-Konsole verfolgen.
(Bild: Thomas Drilling / AWS)

Anschließend kann der Nutzer im Schritt „Review“ einen Blick auf die Zusammenfassung werfen und den Stack, sollten keine Anpassungen erforderlich sein, mit „Create Stack“ erstellt. Nach Abschluss des Konfigurationsassistenten landet der Nutzer in der Stacks-Ansicht des CloudFormation-Dashboard und zwar initial im Tab „Events“ für den in Erstellung befindlichen Stack.

Das CF-Template im Stacks-Dashboard.
Das CF-Template im Stacks-Dashboard.
(Bild: Thomas Drilling / AWS)

Während sich im Reiter „Events“ sämtliche Ereignisse im Zusammenhang mit der Erzeugung des Stacks verfolgen lassen, kann man z. B. das verwendete Template im gleichnamigen Reiter „Template“ einsehen oder mit dem betreffenden Link bearbeiten.

CloudFormation Designer

Optional oder ergänzend können Anwender AWS-Ressourcen im CloudFormation-Designer anzeigen. Dies ist vor allem hilfreich, um Beziehungen anzeigen, wozu sich das „Layout“ beliebig „anordnen“ lässt, um die jeweils bestmögliche Aussagekraft zu bieten. Jedes Template lässt sich wahlweise per Drag and Drop oder mit dem im Designer integrierten JSON-Editor bearbeiten. Alle Änderungen, die der Nutzer am Diagramm vornimmt, verändern dann automatisch das JSON-Dokument der Vorlage.

CloudFormation-Stacks von der Kommandozeile

CloudFormation-Stacks lassen sich per CLI und über die AWS-SDK natürlich auch programmatisch erzeugen. Da es sich bei einem CloudFormation-Template um eine gewöhnliche JSON-Datei handelt, genügt dazu ein einfacher Editor. Das folgende Beispiel-Template beschreibt eine Flotte an EC2-Instance „hinter“ einem Load Balancer. Der Code in der Vorlage startet stets mit der „AWSTemplateFormatVersion“, gefolgt von einer Beschreibung ...

{
   "AWSTemplateFormatVersion" : "2010-09-09",
   "Description" : "An example template",

… und einem Parameter-Block. Bei einem Parameter handelt es sich um einen Wert, der beim Hochladen der Vorlage bereitgestellt werden kann, etwa zum Vorgeben eines Default-Wertes. Dies sind jedoch die einzigen Werte, die beim Erstellen oder Aktualisieren des Stacks überschrieben werden können. Am häufigsten kommen solche Parameter beim Festlegen des Instanz-Typs einer EC2-Instanz zum Einsatz:

"Parameters" : {
   "InstanceType" : {
      "Type" : "String",
      "Default" : "t2.micro",
      "Description" : "Type of EC2 instance to launch"
   },

Dann folgen z. B. die Blöcke für die einzelnen Ressourcen in der Form …

   "Resources" : {
      "IPAddress" : {
         "Type" : "AWS::EC2::EIP",
         "Properties" : {
            "InstanceId" : {
               "Ref" : "Webserver"
            },
         "Domain" : "vpc"
         },
      },

Dieses und andere Templates stellt AWS übrigens zum Herunterladen zur Verfügung. Validieren lässt sich das Template dann mit

aws cloudformation validate-template --template-body file://cf-lb-ec2-servers.json

Zum Ausrollen des Stacks auf Basis dieses Templates dient dann das Kommando

aws cloudformation create-stack --stack-name loadbalanced-ec2.servers --template-body file://cfn-lb-ec2-servers.json --profile test

Mit Hilfe der Option --parameters lassen sich bei Bedarf zusätzliche Parameter zur Wiederverwendung angeben, z. B.:

aws cloudformation create-stack --stack-name loadbalanced-ec2.servers --template-body file://cfn-lb-ec2-servers.json --parameters ParameterKey=InstanceType,ParameterValue=t2.medium --profile test

Ab diesem Zeitpunkt lässt sich das Deployment des Stacks in der AWS Management Console verfolgen. Trotzdem kann der Nutzer alle Informationen zum Stack aber auch weiterhin über die Kommandozeile abrufen, wie z. B.:

aws cloudformation list-stacks --profile testaws cloudformation describe-stack-events --stack-name loadbalanced-ec2.servers --profile testaws cloudformation describe-stacks --stack-name loadbalanced-ec2.servers –profile test

Fazit

Bei CloudFormation steht wie bei OpsWorks das konsistente und reproduzierbare Deployment im Vordergund. Man muss also zum Erstellen in der Praxis häufig weitgehend ähnlicher Deployments nicht erst mehr oder weniger umständlich durch die AWS Management Console klicken.

Mit CloudFormation verwendet man vielmehr wiederverwendbare (weil parametrisierbare) Templates, auf deren Basis AWS CloudFormation automatisch die gewünschten Ressourcen erzeugt. Darüber hinaus lassen sich mit Cloud Former auch Templates aus bestehenden Ressourcen generieren, was ebenfalls der Umsetzung von DevOps-Prinzipien im Unternehmen begünstigt.

(ID:44917793)

Über den Autor

Dipl. -Ing. Thomas Drilling

Dipl. -Ing. Thomas Drilling

IT-Consultant, Trainer, Freier Journalist