Configuration Management mit AWS, Teil 2 Arbeiten mit AWS OpsWorks

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

Einen wesentlichen Anteil an der Automatisierung komplexer Infrastrukturen hat das Konfigurationsmanagement. Im Folgenden werfen wir einen Blick auf das Vorgehen bei AWS OpsWorks Stacks.

Anbieter zum Thema

Mithilfe des Beispiel-Stacks für eine Node.js-Anwendung ist es möglich, erste Erfahrungen mit OpsWorks zu sammeln.
Mithilfe des Beispiel-Stacks für eine Node.js-Anwendung ist es möglich, erste Erfahrungen mit OpsWorks zu sammeln.
(Bild: Drilling / AWS)

Der Workflow zum Einrichten von OpsWorks Stacks – der Chefsolo-Variante von OpsWorks – vollzieht sich in 4 Schritten:

  • 1. Erstellen eines Stacks.
  • 2. Festlegen der Ebenen (Layer) eines Stacks.
  • 3. Hinzufügen von Instanzen zu einem Layer.
  • 4. Spezifizieren der Anwendungen und Ausführen der Bereitstellungsschritte für diese Anwendung, wie diese z. B. im jeweiligen Cookbook, bzw. Rezept definiert sind.

Unter einen Stack versteht AWS bei OpsWorks eine Anzahl von als „Ebenen“ oder „Layers“ bezeichneter Instance-Muster, die zum Starten und Verwalten einer Gruppe von Instanzen verwendet werden (etwa alle Tomcat-Server und die MariaDB-Datenbank, die für Frontent-Webserver der Produktions-Webanwendung benötigt werden). Auch Anwendungen, Berechtigungen und Ressourcen werden im Kontext des Stacks definiert und gesteuert.

Einrichtung und Konfiguration einer Gruppe von EC2-Instanzen nebst zugehöriger Ressourcen wie EIPs, oder EBS-Volumes werden vom jeweiligen Layer bestimmt. OpsWorks stellt Layers für zahlreiche gängige Technologien wie PHP, Ruby, HAProxy, Memcached oder MySQL (nur Linux) bereit und erlaubt sowohl das Erweitern vorhandener als auch das Erstellen eigener individueller Layers. Zum automatischen Ausführen bestimmter Konfigurationsaufgabe werden Lifecycle-Event verwendet, die ihrerseits die zuständigen Chef-Rezepte für alle Instanzen auslösen.

Im jeweiligen Layer erstellt der Nutzer dann Instanzen in Konfigurationen seiner Wahl, einschließlich Instance-Größe, Availability Zone, EBS-Volume, EIP, Security Group oder dem Betriebssystem der Instanz und startet diese dann. Für das Definieren einer Anwendung muss der Admin in AWS OpsWorks Stacks nur den Speicherort seines Anwendungs-Codes und ggf. zusätzliche Bereitstellungsaufgaben angeben, wie etwa eine Datenbankkonfiguration.

Dazu unterstützt AWS OpsWorks Stacks zahlreiche Repository-Varianten wie Git, SVN, HTTP und natürlich Amazon S3. Beim Bereitstellen der Anwendung ruft AWS OpsWorks Stacks den Code dann aus dem angegeben Repository ab, fügt ihn den Instanzen hinzu und führt die im Rezept angegebenen Bereitstellungsaufgaben aus, damit die Anwendung die gewünschte Konfiguration erhält.

Stacks erzeugen

Das Erzeugen eines Stacks über die AWS Management Console ist einfach. Der Einstiegspunkt findet sich unter „Services / Management Tools / OpsWorks“. Hier klickt man dann auf „Go to OpsWorks Stacks“ und auf der Seite „Welcome to AWS OpsWorks Stacks“ auf „Add your first stack“. Hier hat der Admin dann die Wahl zwischen „Sample stack“, „Chef 12 stack“ und „Chef 11 stack“.

Chef-stacks (11 oder 12) erlauben das direkte Verwenden vorhandener Chef-Cookbooks, bzw. von Cookbooks der Chef-Community, z. B. zum Aufsetzen eines LAMP- oder Ruby-On-Rails-Stacks. Mit der Option „Sample stack“ hingegen erstellt der Admin einen Beispiel-Stack für eine Node.js-Anwendung, mit deren Hilfe der Nutzer recht einfach erste Erfahrungen mit OpsWorks machen kann. Als Betriebssysteme stehen Linux oder Windows zur Verfügung.

Bildergalerie
Bildergalerie mit 14 Bildern

Mit „create stack“ erstellt OpsWorks den Stack „My Sample Stack (Linux)“, setzt das Chef-Cookbook-Repository auf, erzeugt einen Anwendungs-Layer „Nodes.js App Server“, fügt dem Event „deploy lifecycle“ des App-Layers ein Chef-Rezept hinzu und dem Layer schließlich eine (oder mehrere) Instanz(en).

Anschließend steht der Stack „My Sample Stack (Linux)“ im OpsWorks Stacks Dashboard bereit und lässt sich von hier aus weiter bearbeiten, klonen oder löschen. Löschen lassen sich Stacks von hier aus indes nur, wenn mindestens vorher alle Instanzen in den einzelnen Layers terminiert wurden.

Konfiguration des Stacks

Nachdem hiermit das Rahmenwerk für den Stack erstellt ist, geht es daran, diesen mit Inhalt zu füllen und weiter zu konfigurieren. Hierzu genügt ein Klick auf „Edit“ und der Nutzer landet im Stack-Dashboard seines Samples-Stacks. Hier nimmt er elementare Einstellungen wie das Zuweisen von Default-Subnetzen, Default-Betriebssystemen Default-SSH Key vor und weist den Repository-Typ (HTTP) sowie die Repository-URL für das Cookbook-Depot zu.

Ferner braucht es einen Benutzernamen und ein Passworts für das Cookbook-Repo. Schließlich kann er noch eine Stack-Farbe zur besseren Unterscheidung mehrerer Stacks wählen. Unveränderbar sind die schon vorher gewählten Einstellungen für Region, VPC, API-Endpoint Region und Chef-Version. Optional kann man noch eine IAM-Rolle und ein Hostname Thema aussuchen.

Nach einem Klick auf „Save“ sind die Basis-Einstellungen für den gesamten Stack gesetzt und der Admin kann sich den Sektionen Layers, Instances, Apps, Deployment und Monitoring im Stack-Dashboard widmen. So legt er unter „Layers“ z. b. Art (OpsWorks, ECS oder RDS) und Anzahl der einzelnen Ebenen seines Stacks fest. Wir belassen es im Beispiel bei einer einzigen Ebene für einen Anwendungs-Server, hier eines Node.js App-Servers. Mit „Add Layer“ lassen rechts oben oder mit „+ Layer“ unter der aktuellen Ebene jederzeit weitere Ebenen hinzufügen.

Nun kann sich der Admin Schritt für Schritt von links nach rechts durch die Einstellungen des Layers arbeiten, also „Settings“, „Recipes“, „Network“, EBS-Volumes“, „Security“, „CloudWatchLogs“ und „Tags“. Im Abschnitt „Settings“ kann er den Namen des Layers anpassen und einen Instance-Shutdown-Timeout festlegen.

Wichtiger ist der Abschnitt „Recipes“. Hier erkennt man, dass unter der Repository-URL für „Deploy“ vom Assistenten bereits ein Rezept aus dem angegeben Example-Cookbook angehängt wurde. In der Praxis würde der Admin jetzt in erster Linie weitere Rezepte vor allem aus dem aus den Bereichen „Setup“ und „Configure“ anhängen.

Im Abschnitt „Network“ kann der Admin beispielsweise das automatische Zuweisen von öffentlichen IP-Adressen für alle in diesem Layer gestarteten Instanzen anweisen oder ggf. einen Load-Balancer angeben, mit dem der Stack zusammenarbeitet und in dem die hier erzeugten Instanzen dann registriert werden müssten.

Im Bereich „EBS-Volumes“ ist es möglich, die EBS-Volumes der Instanzen dieses Layers zu sehen und zu bearbeiten. Der Nutzer könnte beispielsweise den Volume-Typ ändern, während er im Abschnitt „Security“ nach Bedarf „Security Groups“ im Kontext des Stacks erstellen oder zuweisen und ein individuelles EC2-Instance-Profil auswählen kann.

Der vom Assistenten eingerichtete Layer beinhaltet bereits eine EC2-Instanz „nodejs.server1“, deren Eigenschaften man im Stacks-Dashboard im Abschnitt „Instances“ bearbeiten oder weitere Instanzen mit „+ Instances“ hinzufügen kann. Gestartet sind die vom Assistenten bereitgestellten Instanzen noch nicht. Hierzu klickt der Nutzer auf das kleine Start-Symbol ganz rechts in der Actions-Spalte oder rechts oben auf „Start All Instances“.

Apps bereitstellen

Sind alle benötigten Layer und Instanzen definiert, geht es weiter mit dem Einrichten der Apps im gleichnamigen Menü auf der linken Seite. Der Assistent hat bereits eine Sample-App „Node.js Sample App“ hochgeladen, die der Admin entweder mit „edit“ bearbeiten oder mit „deploy“ ausrollen kann.

Ferner kann er mit „+ App“ weitere Apps hochladen, wozu er im Abschnitt „Applications Source“ wiederum die gewünschte Quelle für den Quellcode seiner App angeben muss. Bei der Beispiel Node.js-App sieht das so aus wie zum Ende der Bildergalerie hin dargestellt.

Bildergalerie
Bildergalerie mit 14 Bildern

Das Bereitstellen der App(s) erfolgt dann entweder mit dem Button „Deploy App“ aus der App-Bearbeitung heraus oder mit dem Deploy-Symbol in der App-Zeile im Apps-Dashboard. Als Standard-Command ist bereits „Deploy“ eingetragen. Es genügt ein finaler Klick auf „Deploy“ rechts unten, der allerdings erst anklickbar wird, wenn im Abschnitt „Instances“ die unterliegende Instanz gestartet wurde.

Startet man die Instanz bei bereits erfolgreich deployter App, wird diese natürlich direkt gestartet und konfiguriert. Im Menü „Monitoring“ schließlich kann man eine ggf. mehrstufige komplexe Anwendung komfortabel überwachen.

Weitere gut nachvollziehbare OpsWorks-Samples mit Step-by-Step-Anleitungen, Getting-Started-Guides, Best-Practices sowie zahlreiche Cookbooks und Rezepte für Chef stellt AWS in der Dokumentation zu OpsWorks Stacks zur Verfügung.

(ID:45017938)