Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Infrastruktur als Code: Plan, Apply und State

Nach dieser Lektion: Ich kann einen Plan ausführen, ihn anwenden und sagen, was die State-Datei ist.

Lektion, 55 Min.10 BefehleOpenTofu-Lab: Infrastructure as Code mit Plan, Apply und State auf einer VM

Was ist Infrastruktur als Code?

Infrastruktur als Code (englisch Infrastructure as Code, kurz IaC) heißt: Sie beschreiben Server, Netze und Räume in Textdateien statt mit Mausklicks. Ein Werkzeug wie OpenTofu liest diese Dateien, zeigt Ihnen vor jeder Änderung einen Plan und setzt sie erst danach um.

Stellen Sie sich das Medienzentrum einer Hochschule vor. Jedes Semester sollen dieselben zehn Räume gleich eingerichtet sein. Von Hand entstehen zehn leicht verschiedene Räume. Aus einer Datei entsteht jedes Mal derselbe.

Am Ende dieser Lektion

Notiz

Ich kann einen Plan ausführen, ihn anwenden und sagen, was die State-Datei ist.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Infrastruktur als CodeServer und Netze in Dateien beschreiben, die ein Werkzeug umsetzt
OpenTofudas quelloffene Werkzeug, das diese Dateien liest und umsetzttofu plan
Ressourceeine Sache, die eine Datei beschreibtterraform_data
Plandie Liste der Änderungen, die vorher angezeigt wird
Applydie Änderungen aus dem Plan wirklich ausführen
Statedie Datei, in der OpenTofu festhält, was es schon gebaut hatterraform.tfstate

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Sie beschreiben das Ziel, nicht den Weg

Ein Skript sagt, was nacheinander zu tun ist: erst Raum anlegen, dann Rechner aufstellen. Eine OpenTofu-Datei sagt nur, was am Ende da sein soll. Diesen Wunsch nennt man den gewünschten Zustand.

OpenTofu vergleicht den Wunsch mit dem, was schon gebaut ist. Es rechnet selbst aus, welche Schritte fehlen. OpenTofu ist ein quelloffener Fork von Terraform und liest dieselbe Sprache.

Warum dieses Lab nichts Echtes baut

Echte Server entstehen über einen Provider, ein Zusatzprogramm, das mit einer Cloud spricht. Die Maschine dieses Labs kann keinen Provider herunterladen, also bauen Sie hier keinen Server.

Dafür gibt es eine Ressource, die in OpenTofu eingebaut ist: terraform_data. Sie speichert nur einen Wert, den Sie ihr geben. Plan, Apply und State arbeiten genau wie gegen eine echte Cloud.

Einen eigenen Ordner anlegen

Befehl
mkdir -p ~/iac-demo/rechner

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

In den Ordner wechseln

Befehl
cd ~/iac-demo/rechner

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Datei main.tf schreiben

Befehl
printf '%s\n' 'resource "terraform_data" "serverraum" {' '  input = "Raum B12"' '}' > main.tf

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Datei lesen

Befehl
cat main.tf

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Der Plan zeigt, was passieren würde

tofu init bereitet den Ordner vor. Ein echtes Projekt lädt hier seine Provider. Dieses hat keinen und braucht kein Netz.

tofu plan vergleicht die Datei mit dem State und druckt die Änderungen. Ein Plus steht für anlegen. Die letzte Zeile zählt sie zusammen. Ein Plan ändert nichts.

Den Ordner vorbereiten

Befehl
tofu init -no-color | grep initialized

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den ersten Plan lesen

Befehl
tofu plan -no-color | grep Plan:

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den Plan anwenden

Befehl
tofu apply -auto-approve -no-color | grep "Apply complete"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Beispiel: Wunsch, State und Plan nebeneinander

SchrittWunsch (Datei)State (Gedächtnis)Plan sagt
Vor dem ersten Applyserverraum mit Raum B12leer1 anlegen
Nach dem Applyserverraum mit Raum B12serverraum mit Raum B12nichts zu tun
Wert in der Datei geändertserverraum mit Raum B13serverraum mit Raum B121 ändern
Ressource aus der Datei entferntleerserverraum mit Raum B121 löschen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Der State ist das Gedächtnis von OpenTofu

Nach dem Apply liegt im Ordner eine Datei terraform.tfstate. Das ist der State: eine Textdatei im JSON-Format. Sie hält fest, was OpenTofu gebaut hat und mit welchen Werten.

Beim nächsten Plan vergleicht OpenTofu Ihre Datei mit diesem State. Ist beides gleich, gibt es nichts zu tun. Das Anwenden derselben Datei ist daher beliebig oft sicher.

Den State auflisten

Befehl
tofu state list

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den gespeicherten Wert lesen

Befehl
jq -r '.resources[0].instances[0].attributes.input.value' terraform.tfstate

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Gleich noch einmal planen

Befehl
tofu plan -no-color | grep -E "No changes|Plan:"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele glauben, ein zweites Apply lege alles noch einmal an. Das tut es nicht. OpenTofu sieht im State, dass die Ressource schon da ist, und tut nichts. Es legt erst neu an, wenn der State die Ressource nicht mehr kennt.

Weiterführend

Ändern Sie in Ihrer Datei Raum B12 in Raum B13 und lesen Sie den Plan, bevor Sie ihn anwenden. Sie sollten ein Tilde-Zeichen sehen und die Zeile 1 to change.

Räumen Sie danach auf: tofu destroy -auto-approve löscht, was der State kennt. Ihr Ordner ~/iac-demo gehört Ihnen, die Ordner des Labs bleiben unberührt.

Über dieses Lab und seinen Quellcode: OpenTofu-Lab: Infrastructure as Code mit Plan, Apply und State auf einer VM

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.