Einführung
Stellen Sie sich vor, Sie sind Architekt und planen ein Wohnviertel. Sie würden nicht jedes einzelne Haus Stein für Stein von Grund auf neu zeichnen. Stattdessen würden Sie einen Bauplan für ein „Standardhaus“ erstellen und diesen Bauplan einfach 50-mal verwenden.
In Terraform werden solche wiederverwendbaren Baupläne Module genannt.
Module sind die wichtigste Möglichkeit, mit der Terraform von kleinen Beispielen zu echten Infrastruktur-Codebasen skaliert. Teams können damit wiederkehrende Muster einmal als Paket erstellen und anschließend beliebig oft wiederverwenden.
Anstatt dieselbe Konfiguration immer wieder zu schreiben, schreiben Sie sie einmal in einem Modul und verwenden sie anschließend erneut. Module sind wichtig, weil echte Infrastruktur-Codebasen schnell wachsen und ebenso wie Anwendungscode eine klare Struktur benötigen.
In diesem Lab erstellen Sie ein einfaches Modul, das Serverkonfigurationsdateien erzeugt. Anschließend verwenden Sie dieses Modul, um zwei unterschiedliche Server zu erstellen.
Modulverzeichnis erstellen
Zuerst benötigen Sie einen Ort, an dem Sie Ihre Baupläne speichern. Terraform-Module sind ganz normale Verzeichnisse, die Terraform-Dateien enthalten.
Das ist ein wichtiges Detail: Ein Modul ist in Bezug auf das Dateiformat keine besondere neue Sprachfunktion. Es ist lediglich eine Terraform-Konfiguration, die hinter einer wiederverwendbaren Schnittstelle gebündelt ist.
Üblicherweise erstellen wir ein Verzeichnis mit dem Namen modules, damit die Struktur übersichtlich bleibt. Darin erstellen wir ein Verzeichnis für unser spezifisches webserver-Modul.
Richten Sie diese Struktur ein:
cd ~/project
mkdir -p modules/webserver
Überprüfen Sie anschließend Ihre Arbeit:
ls -R
Sie sollten ein Verzeichnis modules sehen, das ein Verzeichnis webserver enthält. Das Verzeichnis webserver dient als eigenständiges Mini-Projekt.
Modul definieren
Jetzt schreiben Sie den eigentlichen Bauplan.
Ein Modul funktioniert ähnlich wie ein Root-Projekt: Mit main.tf definieren Sie Ressourcen, und mit variables.tf legen Sie die Eingaben fest, die das Modul akzeptiert.
In diesem Lab verwenden wir die einfache Ressource local_file. Sie erstellt lediglich eine Textdatei auf der Festplatte. Das eignet sich besonders gut zum Lernen von Modulen, weil die Ausführung schnell ist und keine komplexe Cloud-Umgebung benötigt wird.
Erstellen Sie zunächst mit nano die Datei main.tf des Moduls:
nano modules/webserver/main.tf
Fügen Sie diesen Inhalt ein. Er weist Terraform an, eine Datei mit einem bestimmten Text zu erstellen.
resource "local_file" "server_config" {
content = "Server Name: ${var.server_name}\nEnvironment: ${var.env}"
filename = "${path.root}/${var.server_name}-config.txt"
}
Speichern und beenden Sie nano (Ctrl+O, Enter, Ctrl+X).
Moment, was ist var.server_name? Diese Variable haben Sie noch nicht definiert. Ein Modul muss festlegen, welche Eingaben es akzeptiert – genauso wie eine Funktion in der Programmierung.
Dieses funktionsähnliche Modell ist eine passende Denkweise. Ein Modul stellt Eingaben und Ausgaben bereit und verbirgt seine internen Ressourcendetails vor dem aufrufenden Code.
Erstellen Sie die Datei variables.tf des Moduls:
nano modules/webserver/variables.tf
Fügen Sie diese Eingabedefinitionen ein:
variable "server_name" {
description = "The name of the server"
type = string
}
variable "env" {
description = "The environment (e.g., dev, prod)"
type = string
default = "dev"
}
Speichern und beenden Sie nano.
Damit ist unser Bauplan, also das Modul, vollständig. Es weiß, wie eine Datei erstellt wird, und es kennt die erforderlichen Informationen – Name und Umgebung –, um diese Aufgabe auszuführen.
Modul aufrufen
Übernehmen Sie nun die Rolle des Site Managers. Sie möchten einen Server erstellen, sich aber nicht mit den Details beschäftigen. Sie möchten das Modul lediglich dafür „beauftragen“.
Dazu erstellen Sie in der Datei main.tf des Root-Projekts einen module-Block. Gemeint ist die Datei in ~/project.
Erstellen Sie die main.tf des Root-Projekts:
cd ~/project
nano main.tf
Fügen Sie diesen Inhalt ein, um das Modul aufzurufen:
module "my_first_server" {
source = "./modules/webserver"
server_name = "web-01"
env = "production"
}
Denken Sie daran, nano zu speichern und zu beenden.
Sehen wir uns die einzelnen Angaben an:
module "my_first_server": Dies ist der Name dieser konkreten Instanz.source: Dieser Eintrag ist entscheidend. Er teilt Terraform mit, wo sich das Verzeichnis mit dem Bauplan befindet (./modules/webserver).server_nameundenv: Das sind die Eingaben, die Sie an das Modul übergeben.
Mit einem Modulaufruf kann die Root-Konfiguration die gewünschte Absicht auf einer höheren Ebene beschreiben. Anstatt jede Ressource auf niedriger Ebene erneut einzugeben, sagen Sie: „Instanziiere dieses wiederverwendbare Muster mit diesen Eingaben.“
WICHTIG: Wenn Sie ein neues Modul hinzufügen, müssen Sie Terraform anweisen, es vorzubereiten. Führen Sie init aus, um das Modul zu installieren:
terraform init
Wenden Sie nun den Entwurf an:
terraform apply -auto-approve
Überprüfen Sie das Ergebnis. Das Modul sollte eine neue Datei erstellt haben:
cat web-01-config.txt
Erfolg! Das Modul hat unsere Eingaben ("web-01" und "production") übernommen und die Arbeit für uns erledigt.
Modul wiederverwenden
Jetzt kommt der entscheidende Vorteil zum Einsatz. Sie möchten einen zweiten Server erstellen. Anstatt den gesamten Ressourcencode zu kopieren, verwenden Sie den Bauplan einfach ein weiteres Mal.
Öffnen Sie die main.tf des Root-Projekts erneut mit nano:
nano main.tf
Verwenden Sie die Pfeiltasten, um zum Ende der Datei zu gelangen, und fügen Sie diesen Block an:
module "my_second_server" {
source = "./modules/webserver"
server_name = "web-02"
## We are not setting 'env' here, so it will use the default value "dev"
}
Speichern und beenden Sie nano.
Beachten Sie, wie übersichtlich das ist. Sie sagen lediglich: „Ich möchte einen weiteren Server mit dem Namen web-02.“ Sie müssen nicht wissen, wie local_file intern funktioniert. Sie verwenden einfach die bereitgestellte Schnittstelle.
Wenden Sie die Änderungen an:
terraform init
terraform apply -auto-approve
Überprüfen Sie, ob nun zwei separate Serverdateien vorhanden sind:
ls -l *-config.txt
Prüfen Sie außerdem, ob der zweite Server die Standardumgebung "dev" verwendet:
cat web-02-config.txt
Damit beherrschen Sie nun das grundlegende Prinzip wiederverwendbarer Infrastruktur.
Zusammenfassung
Herzlichen Glückwunsch! Sie haben einen großen Schritt in Richtung professionellen Terraform-Codes gemacht.
In diesem Lab haben Sie Folgendes gelernt:
- Module: Wie Sie Code in wiederverwendbaren Verzeichnissen, Ihren „Bauplänen“, gruppieren.
- Eingaben: Wie Sie Variablen verwenden, um Module flexibel zu machen.
- Module aufrufen: Wie Sie mit dem
module-Block Instanzen Ihres Bauplans erstellen. - Wiederverwendung: Wie Sie mit wenig Code problemlos mehrere Kopien einer Infrastruktur erstellen.
Statt eines unübersichtlichen Haufens einzelner Bausteine verfügen Sie nun über eine Sammlung wiederverwendbarer Komponenten. Damit können Sie Infrastruktur schneller, sicherer und übersichtlicher erstellen.



