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
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Infrastruktur als Code | Server und Netze in Dateien beschreiben, die ein Werkzeug umsetzt | |
| OpenTofu | das quelloffene Werkzeug, das diese Dateien liest und umsetzt | tofu plan |
| Ressource | eine Sache, die eine Datei beschreibt | terraform_data |
| Plan | die Liste der Änderungen, die vorher angezeigt wird | |
| Apply | die Änderungen aus dem Plan wirklich ausführen | |
| State | die Datei, in der OpenTofu festhält, was es schon gebaut hat | terraform.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
mkdir -p ~/iac-demo/rechnerHier 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
cd ~/iac-demo/rechnerHier 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
printf '%s\n' 'resource "terraform_data" "serverraum" {' ' input = "Raum B12"' '}' > 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.
Die Datei lesen
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.
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
tofu init -no-color | grep initializedHier 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
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
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
| Schritt | Wunsch (Datei) | State (Gedächtnis) | Plan sagt |
|---|---|---|---|
| Vor dem ersten Apply | serverraum mit Raum B12 | leer | 1 anlegen |
| Nach dem Apply | serverraum mit Raum B12 | serverraum mit Raum B12 | nichts zu tun |
| Wert in der Datei geändert | serverraum mit Raum B13 | serverraum mit Raum B12 | 1 ändern |
| Ressource aus der Datei entfernt | leer | serverraum mit Raum B12 | 1 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
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.
Den gespeicherten Wert lesen
jq -r '.resources[0].instances[0].attributes.input.value' 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.
Gleich noch einmal planen
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.