Was ist IaC (Infrastructure as Code)?

Verfahren, die Konfiguration von Infrastruktur wie Servern, Netzwerken und Speicher statt von Hand in Code (Definitionsdateien) zu beschreiben und sie mit Werkzeugen automatisch zu erzeugen und zu ändern. Bei deklarativen Werkzeugen schreibt man die Soll-Konfiguration, und das Werkzeug wendet nur die Differenz zum Ist-Zustand an; dieselbe Definition beliebig oft anzuwenden, liefert daher dasselbe Ergebnis (Idempotenz). Verwaltet man die Definitionen in Git o. Ä., werden Änderungsverlauf, Review und das Reproduzieren identischer Umgebungen einfach.

Japanische Bezeichnung: IaC(Infrastructure as Code)

„IaC (Infrastructure as Code)“ kommt in 1 Übungsfragen aus 1 Themen vor, z. B. Grundlagen von Cloud und Containern.

Fachgebiet: Grundlagen von Cloud und Containern

Deklarativ und prozedural

Im deklarativen Stil schreibt man das Ergebnis, etwa „zwei virtuelle Maschinen“, und das Werkzeug vergleicht es mit dem aktuellen Zustand, um die nötigen Schritte festzulegen. Im prozeduralen Stil schreibt man Operationen der Reihe nach, etwa „eine virtuelle Maschine erzeugen“, und muss den aktuellen Zustand berücksichtigen; zweimal ausgeführt, könnten so vier Maschinen entstehen. Für die Konfiguration von Infrastruktur sind deklarative Verfahren verbreitet, mit denen sich Idempotenz leicht erreichen lässt.

Konfigurationsdrift

Ändert jemand eine Einstellung von Hand, etwa über eine Verwaltungskonsole, weicht der Ist-Zustand vom Code ab (Drift). Ein deklaratives Werkzeug zeigt vor dem Anwenden die Differenz an, sodass sich solche Abweichungen finden lassen. Erfolgt jede Änderung über den Code, stimmt der Zustand der Umgebung dauerhaft mit dem Code überein.

Review und Reproduzierbarkeit

Verwaltet man Definitionsdateien wie Programme in Git, ist festgehalten, wer wann was geändert hat, und Änderungen lassen sich vor dem Anwenden prüfen. Werden Staging und Produktion aus denselben Definitionen erzeugt, gibt es auch weniger Probleme durch Unterschiede zwischen den Umgebungen. Vertrauliche Werte wie Passwörter werden nicht direkt in Definitionsdateien geschrieben, sondern mit eigenen Mechanismen verwaltet.

Jetzt üben: Fragen zu IaC (Infrastructure as Code)

Mit einem deklarativen IaC-Werkzeug (Infrastructure as Code) wurde eine Umgebung erstellt, indem eine Datei angewendet wurde, die ein Netzwerk und zwei virtuelle Maschinen definiert. Unmittelbar danach wird dieselbe Datei ohne jede Änderung noch einmal angewendet. Was geschieht?

  1. AEs gibt keinen Unterschied zwischen Definition und Ist-Zustand, daher wird nichts geändert
  2. BEin weiterer identischer Satz wird erzeugt, sodass es vier virtuelle Maschinen gibt
  3. CDa die Umgebung bereits existiert, bricht die zweite Anwendung mit einem Fehler ab
Antwort und Erläuterung anzeigen

Antwort: A. Es gibt keinen Unterschied zwischen Definition und Ist-Zustand, daher wird nichts geändert

Bei deklarativer IaC beschreibt der Code die Soll-Konfiguration statt der Schritte, und das Werkzeug vergleicht sie mit dem Ist-Zustand und erzeugt, ändert oder löscht nur, was abweicht. Dieselbe Definition beliebig oft anzuwenden, liefert daher dasselbe Ergebnis (Idempotenz), und die zweite Anwendung ändert nichts. Ändert jemand eine Einstellung von Hand und weicht der Ist-Zustand dadurch von der Definition ab (Konfigurationsdrift), stellt die nächste Anwendung den definierten Zustand wieder her. Verwaltet man die Definitionen in Git, lassen sich außerdem der Änderungsverlauf prüfen und Reviews durchführen, genau wie bei Programmen.

Häufige Fragen

Macht IaC manuelle Konfiguration überflüssig?

Ein Großteil der Arbeit lässt sich in Code fassen, manche manuellen Schritte bleiben aber, etwa die erste Einrichtung der Authentifizierung. Wichtig ist, manuelle Änderungen nicht stehen zu lassen, sondern in den Code zu übernehmen, damit Code und Ist-Zustand übereinstimmen.

Wie hängen IaC und Container zusammen?

Mit IaC baut man Grundlagen wie Netzwerke, virtuelle Maschinen und Cluster auf, und die darauf laufenden Anwendungen werden oft als Container-Images ausgeliefert. Auch Kubernetes-Manifeste folgen demselben Gedanken wie IaC, da sie einen Soll-Zustand deklarieren.

„IaC (Infrastructure as Code)“ in den Erläuterungen

Fragen mit „IaC (Infrastructure as Code)“ (1)

  1. Mit einem deklarativen IaC-Werkzeug (Infrastructure as Code) wurde eine Umgebung erstellt, indem eine Datei angewendet wurde, die ein Netzwerk und zwei virtuelle Maschinen definiert. Unmittelbar danach wird dieselbe Datei ohne jede Änderung noch einmal angewendet. Was geschieht?

Verwandte Begriffe

Git Autoscaling Blue-Green-Deployment Canary-Release Container Container-Image Docker Immutable Infrastructure (unveränderliche Infrastruktur) Kubernetes Modell der geteilten Verantwortung (Shared Responsibility Model)

Zur Glossarübersicht