Einmal sagen, jedes Mal bauen
Eine Schule will in jedem Klassenzimmer dieselben zehn Rechner, gleich eingerichtet. Von Hand, zehnmal, ergibt zehn leicht verschiedene Räume. Infrastructure as Code (Infrastruktur als Code) schreibt die Räume stattdessen in eine Datei: Ein Werkzeug baut, was die Datei beschreibt, so oft du willst, und zeigt dir vorher, was es ändern wird.
Am Ende dieser Lektion
Notiz
Ich kann sagen, was ein Plan ist, wofür der State da ist und warum ein Werkzeug plant, bevor es etwas ändert.
Schlüsselwörter
- OpenTofu: ein freies, kostenloses Werkzeug, das Dateien liest und baut, was sie beschreiben.
- Ressource: eine Sache, die eine Datei beschreibt. Hier speichert sie einen Wert; mit einem Provider könnte es ein Server sein.
- Plan: die Liste der Änderungen, die OpenTofu vornehmen würde, gezeigt, bevor es sie vornimmt.
- Apply (anwenden): die Änderungen ausführen, die der Plan aufgelistet hat.
- State (Zustand): die Datei, in der OpenTofu festhält, was es schon gebaut hat.
- Provider: ein Plug-in, das mit einer echten Cloud spricht. Diese Maschine kann keines herunterladen.
Zum Start: Was du schon weißt
Notiz
Antworte im Kopf. 1. Was ist eine Variable in einem Programm? 2. Wenn du zweimal eine Tasse Tee bestellst, bekommst du eine oder zwei? 3. Wozu dient eine To-do-Liste am nächsten Tag? Allen dreien begegnest du gleich.
Bevor du anfängst
Notiz
Klicke oben in der Leiste dieser Lektion auf Lab starten. Dieses Lab ist eine ganze Ubuntu-Maschine nur für dich und braucht deshalb etwas länger zum Starten als ein Container; beim ersten Mal lädt sie OpenTofu herunter, du brauchst also ein kostenloses Konto. Jede Schaltfläche Ausführen tippt ihren Befehl ins Terminal der Maschine, einen nach dem anderen in derselben Sitzung. Wenn eine meldet, dass die Maschine noch startet, warte ein paar Sekunden und klicke noch einmal. Um zuzusehen oder eigene Befehle zu tippen, klicke in der Leiste auf Terminal öffnen.
Ein Projekt ist ein Ordner mit Dateien
Das Lab gibt dir ein kleinstes Projekt in ~/tofu-lab/hello. cd führt dich dorthin. Die Datei main.tf enthält eine Ressource namens hello vom eingebauten Typ terraform_data. Sie speichert den Wert "hello" als input (Eingabe) und gibt ihn als output (Ausgabe) zurück. Ein zweiter Block gibt diese Ausgabe aus. Außerhalb von OpenTofu wird nichts erzeugt: Das Lab hat keine Cloud, in der etwas erzeugt werden könnte.
cd ~/tofu-lab/helloHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
cat main.tfHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Plan: erst ansehen, dann ändern
tofu init bereitet den Ordner vor. Ein echtes Projekt lädt hier seine Provider herunter; dieses hat keinen zu holen und ist daher sofort fertig. tofu plan vergleicht dann die Datei mit dem State und gibt aus, was es tun würde. Ein + heißt erzeugen, und die letzte Zeile rechnet es zusammen: Plan: 1 to add, 0 to change, 0 to destroy. Ein Plan ändert nichts.
tofu initHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
tofu planHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Apply: ausführen und merken lassen
tofu apply führt aus, was der Plan aufgelistet hat. Ohne -auto-approve fragt es dich vorher, ob du yes eingibst; das Lab setzt es dazu, damit die Schaltfläche es für dich erledigt. Am Ende steht Apply complete! Resources: 1 added, 0 changed, 0 destroyed. Die Ressource ist jetzt im State festgehalten. tofu state list zeigt, was der State enthält.
tofu apply -auto-approveHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
tofu state listHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Prüfe dich
Tipp
Welcher Befehl ändert etwas, und welcher sagt nur, was er ändern würde? Antwort: tofu apply ändert, tofu plan informiert nur. Was sagt der Plan, wenn du ihn gleich noch einmal ausführst? Antwort: No changes. Your infrastructure matches the configuration., weil der State schon enthält, was die Datei beschreibt. Probiere es aus.
Ein häufiger Fehler
Warnung
Viele denken, OpenTofu schaue jedes Mal in die echte Welt und finde heraus, was dort ist. Das tut es nicht: Es vergleicht deine Dateien mit seinem State, seiner eigenen Aufzeichnung. Was der State als vorhanden meldet, hält es für vorhanden; der State ist also so viel wert wie die Infrastruktur, die er beschreibt.
Einen Wert ändern und den Plan lesen
Der nächste Befehl ersetzt in der Datei mit sed, einem Suchen-und-Ersetzen, "hello" durch "goodbye". Dann muss tofu plan zwischen etwas Neuem und etwas Geändertem unterscheiden. Ein ~ heißt an Ort und Stelle ändern, der alte und der neue Wert stehen nebeneinander, und die letzte Zeile lautet Plan: 0 to add, 1 to change, 0 to destroy. Du liest den Plan, bevor du anwendest: Dafür gibt es dieses Werkzeug.
sed -i 's/input = "hello"/input = "goodbye"/' main.tfHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
tofu planHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Der State ist eine Datei, und ohne ihn vergisst OpenTofu alles
In diesem Ordner ist der State eine gewöhnliche Datei, terraform.tfstate. Lösche sie, und OpenTofu hat seine Aufzeichnung verloren. Der Plan sagt dann 1 to add, für eine Ressource, die es schon erzeugt hat, denn für OpenTofu existiert nichts. Bei einer echten Cloud entstünde damit von allem eine zweite Kopie. Darum bewahren echte Teams den State sicher auf und bearbeiten ihn nie von Hand. Danach stellt sudo tofulab reset hello diesen Ordner so wieder her, wie er ausgegeben wurde.
rm terraform.tfstateHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
tofu planHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Abschlusscheck
Tipp
Antworte, ohne zurückzuschauen. 1. Was ändert tofu plan? 2. Was hält der State fest? 3. Was sagt der Plan, wenn du ihn nach einem Apply ein zweites Mal ausführst? 4. Warum kann diese Maschine keinen echten Server erzeugen? Antworten: nichts; was OpenTofu schon gebaut hat; nichts zu tun; sie hat keinen Provider, und ein Provider ist es, der mit einer Cloud spricht. Wenn du bereit bist, lies dein Lab: Führe cat ~/README.md im Terminal aus.
Für Lehrkräfte
Tipp
Diese Lektion ist ein kleines Beispiel für eine Lektion, die in einem Lab durchgeführt wird: Die Schritte und die Schaltflächen Ausführen sind die Lektion, und das Lab ist die Kopie jeder lernenden Person. Sie läuft in einem VM-Lab: Jede lernende Person hat eine eigene Ubuntu-Maschine mit installiertem OpenTofu, und eine Schaltfläche Ausführen tippt in ihr Terminal und zeigt, was ausgegeben wurde. Es braucht ein kostenloses Konto (die Maschine lädt OpenTofu von GitHub herunter). Wichtige Lernpunkte: 1. Ein Plan zeigt Änderungen, bevor etwas geändert wird. 2. Der State ist die Aufzeichnung von OpenTofu darüber, was es gebaut hat. 3. Dieselbe Datei lässt sich erneut anwenden und ändert nichts. Häufiger Fehler: glauben, OpenTofu schaue in die echte Welt statt in seinen State. Das Lab nutzt nur die eingebaute Ressource terraform_data, es wird also nichts Echtes erzeugt; echte Provider brauchen ein Netz, das das Lab nicht hat. Nach der Lektion stellt sudo tofulab reset hello den Ordner wieder her. Das Lab selbst hat eine Prüfung, die das Projekt der lernenden Person mit eigenen Werten plant und anwendet. Kopieren Sie die Lektion in Ihr eigenes Modul und ändern Sie sie, oder bauen Sie mit dem Menü Lab im Lektions-Editor eine neue von Grund auf.