AWS CloudFormation, Teil 1 Infrastruktur-Bereitstellung mit Amazon Web Services

Autor / Redakteur: Dipl. -Ing. Thomas Drilling / Stephan Augsten

Amazon Web Services bietet zahlreiche Möglichkeiten, das Deployment von Infrastruktur, Plattformen oder komplexen mehrstufigen Anwendungen zu automatisieren. Die wichtigsten sind CloudFormation, Elastic Beanstalk und OpsWorks. Folgender Beitrag wirft einen Blick auf Cloud Formation.

Anbieter zum Thema

Der CloudFormation-Designer gibt einen Überblick über die Beziehungen von AWS-Ressourcen.
Der CloudFormation-Designer gibt einen Überblick über die Beziehungen von AWS-Ressourcen.
(Bild: Thomas Drilling / AWS)

Automatisierung ist in der Cloud allgegenwärtig. Schließlich ist Cloud Computing im Grunde nichts anderes, als die API-gesteuerte Automatisierung des Deployments virtueller Maschinen, Container oder Anwendungen auf Basis von Self-Service-Portalen.

Die drei wichtigsten Automatisierungs-Framework in AWS widmen sich

  • dem Bereitstellen der Infrastruktur (Infrastruktur as Code) mit CloudFormation,
  • dem Bereitstellen von Plattform-Stacks mit OpsWorks (Chef) sowie
  • dem automatisieren Bereitstellen eines Webserver- oder Worker-Environments für das Ausführen eigenen Codes mit Beanstalk,

wobei die Komplexität der Nutzung aus Anwendersicht ansteigt.

Das bedeutet: mit CloudFormation ist alles möglich, OpsWorks fördert das Bereitstellen von mehrstufigen Stacks etwa für eine Node.js.-Anwendung und das auf Docker-Containern basierende Beanstalk widmet sich eher klassischen LAMP-Plattformen für PHP, Ruby, Tomcat oder Java. Hierbei steht allerdigns im Vordergrund steht, dass Entwickler sich auf Ihren Anwendungen konzentrieren und diese in Beanstalk hochladen können, ohne sich Gedanken um die dazu benötigte Infrastruktur machen zu müssen. Dieser Teil unserer Artikel-Serie befasst sich mit AWS CloudFormation.

AWS CloudFormation

Mit AWS CloudFormation können AWS-Nutzer ihre Infrastruktur auf Basis einer „Beschreibungssprache“ definieren und dann vorlagenbasiert ausrollen. Das bietet mehrere Vorteile. Auf diese Weise erzeugte Deployments sind konsistent, was z. B. verwendete Security-Gruppen (Firewalls), Subnetze, Zugriffsberechtigungen (IAMs) und vieles mehr betrifft. Dies ist allgemein der Sicherheit förderlich, erleichtert aber auch Audits, das Einhalten von unternehmensinternen Compliance-Vorschriften usw.

Administratoren können mit CloudFormation nach dem „Infrastructure-as-Code“-Prinzip so genannte „Sammlungen“ von zusammengehörigen AWS-Ressourcen erstellen und verwalten. Solche Vorlagen (CloudFormation-Templates) beschreiben die bereitzustellenden AWS-Ressourcen, einschließlich Abhängigkeiten und Laufzeitparametern, welche die jeweilige Anwendung zum Ausführen erwartet. Darüber hinaus können AWS-Nutzer nicht nur Ihre eigenen Vorlagen (Templates) erzeugen und verwalten, sondern auch anderen Nutzern zur Verfügung stellen oder sich bei Bedarf aus einem von AWS bereitgestellten CloudFormation-Template-Fundus bedienen.

Der Administrator muss sich bei Verwendung CloudFormation auch nicht um die richtige Reihenfolge beim Bereitstellen von AWS-Ressourcen sorgen und braucht sich anschließend nur noch um etwaige Kontrollen oder das Aktualisieren seines Ressourcen-Stacks zu kümmern. Zudem können AWS-Nutzer mit CloudFormation nahezu jede AWS-Ressource bereitstellen und nicht nur LAMP-Stacks oder Node.JS-Umgebungen. Erleichtert wird das Schreiben des Code-Gerüsts außerdem dadurch, dass CloudFormation Vorlagen auch visualisieren kann, die der Nutzer direkt im AWS CloudFormation Designer grafisch bearbeitet.

Wie bei OpsWorks spricht man übrigens auch bei dem zu einem CloudFormation-Template gehörige Ressourcensatz von einem „Stack“, wobei es durchaus möglich ist, CloudFormation und OpsWorks gemeinsam zu einzusetzen und beispielsweise CloudFormation zum Modellieren, Provisionieren und ggf. zum Versionieren einer Applikation auf AWS einzusetzen und OpsWorks für das Konfigurations-Management und das Ausrollen der für Skalierung und Monitoring benötigten Ressourcen.

CloudFormation-Vorlagen

Eine CloudFormation-Vorlage ist technisch betrachtet zunächst eine gewöhnliche Text-Datei im JSON- oder YAML-Format. Diese Datei enthält eine Beschreibung der AWS-Infrastruktur, die zum Ausführung einer bestimmten Applikation oder eines Service erforderlich ist.

Im Template sind außerdem die „Beziehungen“ der Ressourcen untereinander beschrieben, etwa welche EC2-Instancen in verwendeten Elastic Load Balancer registriert sind. Auch „Bedingungen“ lassen sich hier beschrieben, etwa dass ein EBS-Volume in der gleichen Availability Zone sein muss, wie das Image, mit dem es verbunden ist.

Eine der wesentlichen Eigenschaften von CloudFormation-Templates liegt in der Wiederverwendbarkeit, die mit Hilfe spezieller Vorlagenparameter realisiert werden kann und quasi in der Natur von Vorlagen liegt. Dank dieser speziellen Vorlagenparameter können AWS-Nutzer eine einzelne Vorlage mit unterschiedlichen Konfigurationswerten benutzen, wie z. B. der Anzahl für die Anwendung bereitzustellender Instanzen und so für mehrere Deployments verwenden.

Ein CloudFormation-Template für den Aufbau eines Stacks.
Ein CloudFormation-Template für den Aufbau eines Stacks.
(Bild: Thomas Drilling / AWS)

Innerhalb ein und derselben Vorlage werden sämtliche AWS-Ressourcen ausschließlich mit Hilfe logischer Namen identifiziert, sodass sich aus der gleichen Vorlage problemlos mehrere Stacks erstellen lassen, ohne dass der Admin Namenskonflikte befürchten muss. Zudem lassen sich auch Ausgabe-Eigenschaften zur Kommunikation mit den Bereitstellungsergebnissen oder mit Konfigurationsinformationen im Template verwenden. So könnte ein Template z. B. die URL des Elastic Load Balancer-Endpoints zurückliefern, den der Nutzer zum Verbinden mit der neu instanziierten Anwendung verwenden muss.

Das Generieren von Vorlagen lässt sich darüber hinaus auch mit Hilfe einer Programmiersprache auf Basis der CloudFormation-API bzw. des AWS SDKs und auch mit Hilfe von der AWS-CLI automatisieren. Dies ist auch in der sehr umfassenden Template-Referenz und in der CloudFormation-Dokumentation beschrieben.

(ID:44917793)