Wie du deine AWS-Ressourcen mit CloudFormation-Vorlagen automatisierst
AWS CloudFormation ist ein Service, mit dem Systemadministratoren eine ganze Sammlung von AWS-Ressourcen – einschließlich ihrer Konfigurationen, Abhängigkeiten und Beziehungen untereinander – in einer einzigen Anweisung einrichten und verwalten können. Außerdem können sie Änderungen an der bestehenden Infrastruktur vornehmen, ohne dass die darauf laufenden Anwendungen gestoppt oder neu bereitgestellt werden müssen.
AWS Cloudformation ermöglicht es dir, deine Infrastruktur als Code zu konfigurieren. Es ist im Grunde eine Infrastruktur-als-Code-Engine, die in der Cloud arbeitet und den Nutzern bei der Bereitstellung und Verwaltung von Rechen-, Speicher- und anderen Ressourcen hilft. Eine CloudFormation-Vorlage ist eine JSON-Datei mit Direktiven, wie AWS-Ressourcen erstellt oder aktualisiert werden können. Wir können AWS CLI, AWS SDKs wie boto3 oder den AWS CloudFormation Service verwenden, um Vorlagen zu erstellen.
CloudFormation bietet viele Vorteile wie:
- Benutzerfreundlichkeit: CloudFormation verwendet ein Vorlagenformat, mit dem du alle Attribute und Beziehungen deiner AWS-Ressourcen an einem Ort beschreiben kannst.
- Agilität bei der Markteinführung: CloudFormation ermöglicht es dir, deine AWS-Ressourcen als Code zu erstellen und bereitzustellen.
- Hoher Grad an Automatisierung: CloudFormation wandelt High-Level-Code in eine Reihe von einfachen Vorlagen um, die zum Erstellen oder Aktualisieren von AWS-Ressourcen verwendet werden können.
Wenn du die Bereitstellung deiner Workloads auf AWS automatisieren willst, ist CloudFormation eine der besten Möglichkeiten dafür.
In diesem Artikel geben wir dir eine kleine Einführung in CloudFormation und zeigen dir, wie du CloudFormation zur Automatisierung deiner AWS-Ressourcen nutzen kannst. Dieser Leitfaden verwendet S3-Ressourcen zur Demonstration. Nach diesem Tutorial wirst du in der Lage sein, eine Reihe von AWS-Ressourcen mit CloudFormation zu erstellen, zu aktualisieren und zu löschen. Außerdem erfährst du, wie du deine eigene CloudFormation-Vorlage erstellen kannst.
Voraussetzungen
Um diesem Lernprogramm folgen zu können, brauchst du die folgenden Voraussetzungen:
- AWS CLI ist auf deinem lokalen Rechner in der Version 1.6.1 oder höher installiert und mit einer Standardregion konfiguriert. Die gleiche Version sollte auch für Python 2.6 oder 3+ konfiguriert sein.
- Ein grundlegendes Verständnis der AWS-Dienste und etwas Erfahrung mit der AWS-Konsole.
Erstelle deinen ersten Stack
Nachdem du nun alle Voraussetzungen erfüllt hast, können wir mit der Konfiguration und Erstellung deines ersten Stacks beginnen.
1. Öffne deinen Lieblingsbrowser. Navigiere zu diesem GitHub-Repository und lade drei Dateien auf deine lokale Festplatte herunter.
- createstack.json
- updatestack1.json
- updatestack2.json
2. Navigiere nunzu deiner AWS-Konsole —>CloudFormation.
3. Du wirst den folgenden Bildschirm sehen. Klicke auf Stack erstellen —> Mit neuen Ressourcen.
4. Du siehst den folgenden Bildschirm: Klicke aufVorlage ist bereit —> Lade eine Vorlagendatei hoch —> Wähle die Datei —-> Wähle die Dateicreatestack.json, die du zuvor heruntergeladen hast —->Weiter.
Wenn du einen neuen Stack erstellst, musst du eine Vorlage für deinen Stack angeben. Du kannst dies auf drei Arten tun:
- Die Vorlage ist fertig: Wähle diese Option, wenn du deine Vorlage bereits zur Hand hast. Wenn nicht, gehe zur nächsten Option.
- Eine Beispielvorlage verwenden: Mit dieser Option kannst du dir einen Vorsprung bei der Erstellung deiner Vorlage verschaffen. Im AWS-Benutzerhandbuch findest du mehrere Beispiele für CloudFormation-Vorlagen.
- Erstelle eine Vorlage im Designer: AWS CloudFormation Designer ist die neueste Methode zur Erstellung deines Stacks. Er verwendet eine Drag-and-Drop-Oberfläche, ähnlich wie andere beliebte Tools wie Sharepoint, um dir bei der Erstellung deiner Vorlage zu helfen.
In dieser Demo wird die erste Option „Vorlage ist fertig“ verwendet, da du die Vorlagen bereits zur Hand hast (die Dateien, die du auf deine Festplatte heruntergeladen hast).
Du kannst die Dateicreatestack.json in deinem Editoröffnen, um sie dir anzuschauen. In der Dateicreatestack.json siehst du die folgenden Zeilen.
- „Ressourcen“: { ist der Abschnitt, den AWS CloudFormation erstellt. Er fasst alle physischen Ressourcen zusammen, die du erstellen wirst.
- „catpics“: ist die logische Ressource, deren Typ ein S3 Bucket ist.
- „Typ“: „AWS::S3::Bucket“ ist die physische Ressource, die AWS CloudFormation erstellen wird.
5. Gib auf dem nächsten Bildschirm einen Namen für deinen Stack ein(htf) und klicke auf Weiter. Jeder Stack benötigt einen eindeutigen Namen innerhalb der AWS-Region, damit du sie unterscheiden kannst. Du kannst hier keine Sonderzeichen verwenden, nur Buchstaben, Zahlen und Unterstriche (keine Leerzeichen). AWS erstellt automatisch eine eindeutige Stack-ID zur einfachen Identifizierung.
6 Behalte auf dem nächsten Bildschirm die Standardeinstellungen bei und klicke aufWeiter.
7 Behalte auf demnächsten Bildschirm die Standardeinstellungen bei undklicke aufStack erstellen.
An dieser Stelle lädt AWS CloudFormation die Vorlage und erstellt den Stack für dich. CloudFormation geht jeden einzelnen Abschnitt der Vorlage durch und erstellt eine entsprechende physische Ressource für sie. In manchen Fällen führt AWS CloudFormation mehrere Überprüfungen deiner Vorlage durch, um sicherzustellen, dass alles an seinem Platz ist. Wenn es etwas findet, das nicht in Ordnung ist, erhältst du eine Fehlermeldung, die beschreibt, was das Problem ist und wie du es beheben kannst.
Der Erstellungsprozess dauert etwa 4-5 Minuten. Du kannst den Status des Stacks in deinem CloudFormation Dashboard sehen, wie unten dargestellt. Auf der linken Seite siehst du die logischen Ressourcen von catpics und in jeder dieser Ressourcen siehst du die physischen Ressourcen, die AWS CloudFormation für sie erstellt(CREATE_IN_PROGRESS).
Du kannst zur Registerkarte Ressource navigieren, um die physischen Ressourcen zu sehen, die für diesen Stack erstellt werden. In diesem Fall ist es einS3 Bucket namenscatpicsmit der physischen Ressourcen-ID htf-catpics-1roqn54xwm3of, wie unten gezeigt.
8. navigierenun zu deinem S3 Dashboard. Auf deinem S3 Dashboard siehst du die Objekte, die im Bucket erstellt wurden. In diesem Fall lautet der Stack-Name für den S3-Bucket htf-catpics-1roqn54xwm3of, wie du unten siehst.
Du siehst, dass der Name des Buckets nach folgendem Muster aufgebaut ist: dein Stackname(htf) – dein logischer Stackname(catpics) – eine zufällige Zeichenkette (1roqn54xwm3of). Es ist sehr wichtig, dass du dieses Muster kennst. Wenn du die IDs deiner physischen Ressourcen nicht in der Vorlage angibst, verwendet AWS CloudFormation dieses Muster, um den Namen für deine Ressourcen zu erstellen. Das bedeutet, dass du dieselbe Vorlage verwenden kannst, um mehrere Stacks zu erstellen; AWS CloudFormation übernimmt automatisch die eindeutige Benennung für dich!
Für einen Service wie S3 ist ein eindeutiger Name sehr wichtig; der Name des Buckets muss global eindeutig sein, damit du darin Daten speichern kannst. Die Namen deiner Buckets dürfen nicht identisch sein. Wenn du versuchst, einen Bucket mit demselben Namen zu benennen, kannst du keine Objekte in den Bucket schieben.
Es ist wichtig zu verstehen, warum das wichtig ist. Denn mit CloudFormation wird empfohlen, nicht die ID der physischen Ressource in deiner Vorlage explizit zu benennen. Stattdessen soll AWS CloudFormation automatisch eine ID für dich erstellen. Das bedeutet, dass du deine Vorlage wiederverwenden kannst, um mehrere Stacks mit unterschiedlichen Ressourcen zu erstellen, ohne dich um Namenskonflikte zu kümmern. Du kannst deine Vorlage einmal, zehnmal oder hundertmal verwenden, und CloudFormation wird die Namensänderungen entsprechend handhaben.
Aktualisieren deines Stacks
Nachdem du nun deinen ersten Stack mit AWS CloudFormation erstellt hast, wollen wir uns ansehen, wie du den Stack aktualisieren kannst. Die Aktualisierung eines Stacks ist ein sehr wichtiges Konzept, das du sowohl für den Produktionsbetrieb als auch für deine Prüfung verstehen musst. Wahrscheinlich wirst du in der Prüfung aufgefordert werden, etwas in deiner Vorlage zu ändern, oder du musst etwas in deinem Stack aktualisieren.
In diesem Abschnitt nimmst du einige Änderungen an den Vorlagen vor und verwendest die aktualisierten Vorlagen, um deinen Stack zu aktualisieren und zu bewerten, welche Änderungen an deinen Ressourcen vorgenommen wurden.
Wenn du Stacks in CloudFormation aktualisierst, nimmst du in der Regel Du nimmst die Vorlage, mit der du einen Stack erstellt hast, und fügst entweder neue Ressourcen hinzu, aktualisierst bestehende Ressourcen oder entfernst bestehende Ressourcen.
1. Öffne die Datei updatestack1.json, die du zuvor heruntergeladen hast, in deinem Editor und du wirst die folgenden Codeblöcke sehen. Vergleiche diese Vorlage mit der Vorlage createstack.json, die du zuvor verwendet hast. Du kannst sehen, dass wir eine zusätzliche logische Ressource namens dogpics hinzufügen werden. Noch wichtiger ist, dass keine Änderungen an den bestehenden logischen Ressourcen vorgenommen wurden, d. h. an den bestehenden catpics. Die catpics-Ressourcen wurden nicht verändert oder entfernt. Ich werde nur eine zusätzliche logische Ressource hinzufügen, nämlich dogpics.
2 Navigiere zu deinem CloudFormation Dashboard. Wähle deinen Stack(htf) aus und klicke auf Aktualisieren.
3. Auf dem nächsten Bildschirm wählst duAktuelle Vorlage ersetzen —> Vorlage hochladen —> Datei auswählen —> Wähle deine Datei updatestack1.json—> Weiter.
4. Auf dem nächsten Bildschirm klickst du auf Weiter —> Weiter —> Stack aktualisieren , wie unten dargestellt. Du siehst, dassCloudFormation dir die Änderungen anzeigt, die vorgenommen werden. In diesem Fall haben wir eine logische ID namensdogpicshinzugefügt.CloudFormation zeigt uns auch die Aktion, die durchgeführt wird(Hinzufügen), und den Typ der logischen Ressource (AWS::S3::Bucket). Die SpalteErsetzung ist leer.
Genau wie bei der Erstellung eines Stacks kannst du dir die Aktualisierungsereignisse auf der Stack-Seite ansehen. Alle Aktualisierungen werden von CloudFormation durchgeführt. In diesem Fall wird eine zusätzliche logische Ressourcen-ID übergeben, nämlich dogpics.
Sobald der Aktualisierungsprozess abgeschlossen ist, kannst du unten sehen, dass wir sowohl die catpics- als auch die dogpics-Ressourcen in unserem Stack haben.
Wenn du zu deinem S3-Dashboard navigierst, kannst du sehen, dass ein zusätzlicher dogpics-Bucket mit dem Namen htf-dogpics-4qesklu84ugq erstellt wurde. Du kannst sehen, dass die Benennung des Buckets nach dem gleichen Muster erfolgt: Stack-Name – logischer Stack-Name – zufällige Zeichenkette.
An dieser Stelle fügen wir nur neue logische Ressourcen zu unseren Ressourcen hinzu, was ziemlich einfach und risikoarm ist. Jetzt zeigen wir dir, wie du Ressourcen aus deinem Stack entfernen kannst.
Wir werden die Ressource dogpics aus unserem Stack entfernen. Das ist riskanter als das Hinzufügen, denn das Löschen von Ressourcen könnte deinen Stack zerstören. Da wir noch am Lernen sind, üben wir das, indem wir unsere dogpics-Ressource löschen, um zu sehen, was passiert
5Navigiere zu deinem CloudFormation Dashboard. Wähle deinen htf-Stack aus, klicke auf Aktualisieren —>Aktuelle Vorlage ersetzen —> Datei auswählen —> dieses Mal wählen wir wieder die Datei createstack.json aus —> Weiter —> Weiter —> Weiter.
6.auf dem nächsten Bildschirm klickst du auf Stack aktualisieren. In der Änderungssatz-Vorschau siehst du, dass die Spalte Aktion jetzt lautet: Entfernen. In diesem Fall entfernt CloudFormation die Ressource dogpics und die entsprechenden physischen Ressourcen (htf-dogpics-4qesklu84ugq).
Wenn du zu deinem S3-Dashboard navigierst, kannst du sehen, dass der dogpics-Bucket jetzt nicht mehr in deinem S3-Dashboard zu finden ist.
Du wirst das DELETE_COMPLETE-Ereignis in deinem Stack-Ereignis sehen.
Das Entfernen von logischen Ressourcen ist etwas riskant, weil dabei Dinge gelöscht werden können, aber dieses Risiko besteht nur bei logischen Ressourcen, die du aus der Vorlage entfernt hast (die dogpics-Ressourcen). An den anderen logischen Ressourcen, wie den catpics-Ressourcen, haben wir bisher noch keine Änderungen vorgenommen. Die physischen catpics-Ressourcen können also nicht von einer Stack-Aktualisierung betroffen sein. Es gibt eine weitere Möglichkeit, deinen Stack zu aktualisieren. Mit dieser Option können wir die Konfiguration für eine bestehende logische Ressource ändern.
7. Öffne die Datei updatestack2.jsonDatei, die du zuvor heruntergeladen hast, in deinem Editor und du wirst den folgenden Codeblock sehen.
Die Datei updatestack2.json sieht der Vorlage createstack.json, die du zuvor verwendet hast, sehr ähnlich, bis auf zwei wichtige Unterschiede. Wir fügen wieder die zweite logische Ressource, dogpics, hinzu. Aber wir haben auch eine Änderung an catpics vorgenommen.
Wir haben einen zusätzlichen Abschnitt der Konfiguration hinzugefügt, der Properties heißt und in dem wir zusätzliche Eigenschaften für eine bestimmte logische Ressource festlegen können. In diesem Fall werden wir einen S3-Bucket erstellen. Wir legen den Bucket-Namen der physischen Ressource explizit als catsareawesome-howtoforge fest.
8. Navigiere zu deinem CloudFormation Dashboard. Wähle deinhtfStack aus, klicke aufAktualisieren—>Ersetze die aktuelle Vorlage—>WähleDatei—> Diesmal wählen wir die Dateiupdatestack2.jsonDatei —>Weiter —> Weiter —> Weiter.
9Auf dem nächsten Bildschirm klickst du auf Stack aktualisieren. In der Änderungsvorschau kannst du sehen, wie sich die Aktualisierung auswirken wird.
Die erste Änderung kommt dir bekannt vor. Wir fügen eine zusätzliche logische Ressource für dogpicshinzufügen, die ein S3-Bucket sein wird. Aber wir sehen auch eine Modify-Aktion. Und Ändern ist eigentlich das Riskanteste, was du an einem CloudFormation Stack machen kannst.
Der Grund dafür ist, dass die bestehenden Ressourcen, die vorhanden sind und möglicherweise von anderen Umgebungen genutzt werden, durch die Stack-Aktualisierung verändert werden könnten. Die Änderung bestehender logischer Ressourcen ist also potenziell riskanter.
Es gibt 3 Möglichkeiten, wie eine physische Ressource betroffen sein kann, wenn du einen Stack auf diese Weise aktualisierst. Die erste Möglichkeit ist, dass eine Ressource aktualisiert wird, ohne dass es zu einer Unterbrechung des Dienstes kommt.
Die zweite Möglichkeit ist, dass die Ressource aktualisiert wird und der Dienst durch eine gewisse Störung unterbrochen wird. Zum Beispiel, wenn du deinen Stack aktualisierst, um die Größe deiner EC2-Instanz zu ändern. In diesem Fall musst du deine EC2-Instanz manuell neu starten. Ein neues AMI wird gestartet und es kann zu einer gewissen Ausfallzeit kommen. Aber sobald das neue AMI gestartet ist, steht dein Dienst sofort wieder zur Verfügung.
Die letzte Möglichkeit ist, dass das Update deine gesamte bestehende physische Ressource löscht und durch eine neue ersetzt. Dies ist die riskanteste Möglichkeit, wenn du deinen CloudFormation Stack aktualisierst. Du solltest in diesem Fall wirklich aufpassen. Wenn diese Art von Ersetzung stattfindet, wird die Spalte Ersetzung auf True gesetzt, wie im folgenden Screenshot zu sehen ist.
Auf dem Dashboard deines CloudFormation Stacks kannst du sehen, dass dort steht: „Requested update requires the creation of a new physical resource; hence creating one.“ CloudFormation löscht also die bestehende Ressource und erstellt eine neue.
Wenn du zu deinem S3-Dashboard navigierst, siehst du, dass der Bucket „catpics“ jetzt verschwunden ist und ein neuer Bucket “ catsareawesome-howtoforge“ erstellt wurde. Beachte, dass wir den physischen Namen (catsareawesome-howtoforge) für eine Ressource in einem CloudFormation-Template explizit angeben und keine zufälligen Zeichen auf den Ressourcennamen anwenden.
Das Problem dabei ist, wenn wir diese Vorlage verwenden, um einen weiteren CloudFormation Stack zu erstellen, würde dies fehlschlagen, weil es versuchen würde, einen weiteren Bucket mit genau demselben Namen zu erstellen. Und du kannst in keinem AWS-Konto 2 Buckets mit demselben Namen haben. Du erhältst die folgende Fehlermeldung, wenn du versuchst, einen weiteren Bucket mit genau demselben Namen zu erstellen.
Löschen deiner CloudFormation Stacks
Nachdem wir die Vorlage geändert und unseren Stack aktualisiert haben, müssen wir sicherstellen, dass wir den Stack löschen, nachdem wir die Arbeit daran beendet haben. Wenn wir die ungenutzten Stacks nicht löschen, bleiben sie auf unbestimmte Zeit in unserem CloudFormation Stack Dashboard. Wir müssten dann manuell hingehen und ihn löschen.
Wähle in deinem CloudFormation Dashboard deinen Stack aus und wähle dann Löschen. Wenn CloudFormation den Stack löscht, werden auch alle Ressourcen in diesem Stack gelöscht. Es gibt keine Möglichkeit, nur eine Ressource wie den S3-Bucket oder die EC2-Instanz zu löschen. Diese Aktion ist so geplant.
Fazit
In diesem Leitfaden haben wir uns angesehen, wie CloudFormation Stacks erstellt und geändert werden. Wir haben uns angeschaut, wie Vorlagen geändert werden und wie bestehende Stacks aktualisiert werden können. Dann haben wir uns einige der Möglichkeiten angeschaut, die mit der Aktualisierung von Stacks verbunden sind. Und schließlich haben wir uns angeschaut, wie du CloudFormation-Stacks löschst, nachdem du die Arbeit an ihnen beendet hast.
Bitte hinterlasse einen Kommentar, wenn du Fragen oder Anregungen hast. Vielen Dank fürs Lesen!