Terraform Outputs Verwalten

LinuxBeginner
Jetzt üben

Einführung

In Terraform sind Output Values (Ausgabewerte) eine Möglichkeit, aussagekräftige Daten über Ihre Ressourcen offenzulegen, nachdem diese bereitgestellt wurden. Sie ähneln den Rückgabewerten eines Terraform-Moduls und können verwendet werden, um einfach Informationen wie die IP-Adresse eines Servers, eine Datenbank-Verbindungszeichenfolge oder einen Dateipfad abzufragen. Dies macht die Informationen leicht über die Befehlszeile zugänglich und ermöglicht es anderen Terraform-Konfigurationen, sie zu verwenden.

In diesem Lab lernen Sie, wie Sie Ausgabewerte definieren, anwenden und anzeigen. Wir beginnen mit einer grundlegenden Terraform-Konfiguration, die eine lokale Datei erstellt, und fügen dann einen output-Block hinzu, um den Pfad der Datei offenzulegen.

Erstellen der Datei outputs.tf für die Output-Definitionen

In diesem Schritt erstellen wir eine dedizierte Datei für unsere Ausgabedefinitionen. Obwohl Sie output-Blöcke in jeder .tf-Datei platzieren können, ist es eine gängige Konvention und Best Practice, sie in einer separaten Datei namens outputs.tf abzulegen. Dies hält Ihre Konfiguration organisiert und erleichtert das Auffinden aller Ausgaben für Ihr Projekt.

Alle Ihre Arbeiten werden im Verzeichnis ~/project durchgeführt, welches das Standardverzeichnis in Ihrem Terminal ist.

Zuerst überprüfen wir die für Sie vorab erstellte Datei main.tf.

ls -l

Sie sollten die Datei main.tf und ein .terraform-Verzeichnis sehen.

total 4
-rw-rw-r-- 1 labex labex 279 Oct 15 12:39 main.tf

Erstellen Sie nun die Datei outputs.tf mit dem Befehl touch.

touch outputs.tf

Dieser Befehl erstellt eine leere Datei namens outputs.tf im aktuellen Verzeichnis. Sie können deren Erstellung überprüfen, indem Sie die Dateien erneut auflisten.

ls -l

Sie werden nun outputs.tf in der Dateiliste sehen.

total 4
-rw-rw-r-- 1 labex labex 279 Oct 15 12:39 main.tf
-rw-rw-r-- 1 labex labex   0 Oct 15 12:39 outputs.tf

Output für den Dateinamen von local_file definieren

In diesem Schritt definieren Sie einen output-Block in der Datei outputs.tf. Ein output-Block deklariert einen einzelnen Ausgabewert für Ihre Terraform-Konfiguration.

Die grundlegende Syntax für einen output-Block lautet:

output "NAME" {
  ## Argumente kommen hierher
}

Hier ist NAME ein String, der dem Output einen Namen gibt, welchen Sie später verwenden werden, um seinen Wert abzufragen.

Öffnen wir die Datei outputs.tf mit dem nano-Editor und fügen unseren ersten output-Block hinzu.

nano outputs.tf

Fügen Sie nun den folgenden Code in die Datei ein. Wir werden unseren Output file_path nennen.

output "file_path" {

}

Nachdem Sie den Code hinzugefügt haben, speichern Sie die Datei und beenden nano, indem Sie Strg+X drücken, dann Y und schließlich Enter.

Dieser Block bewirkt noch nicht viel, da ihm das Argument value fehlt. Dieses werden wir im nächsten Schritt hinzufügen.

Referenzierung des Ressourcenattributs im Output-Block

In diesem Schritt machen wir unseren Output nützlich, indem wir ihm mitteilen, welchen Wert er anzeigen soll. Dies geschieht mithilfe des Arguments value innerhalb des Output-Blocks. Der Wert ist typischerweise eine Referenz auf ein Attribut einer in Ihrer Konfiguration definierten Ressource.

Die Syntax für die Referenzierung eines Ressourcenattributs lautet <RESOURCE_TYPE>.<RESOURCE_NAME>.<ATTRIBUTE>.

In unserer Datei main.tf haben wir eine Ressource definiert als:

resource "local_file" "example" {
  ## ...
}

Die Ressource local_file besitzt ein Attribut namens filename, welches den Pfad zu der von ihr verwalteten Datei enthält. Um auf dieses Attribut zu referenzieren, verwenden wir local_file.example.filename.

Fügen wir diese Referenz zu unserem Output-Block hinzu. Öffnen Sie outputs.tf erneut mit nano.

nano outputs.tf

Ändern Sie die Datei so ab, dass sie das Argument value enthält, wie unten gezeigt:

output "file_path" {
  value = local_file.example.filename
}

Dies teilt Terraform mit, dass der Output file_path den Wert des Attributs filename der Ressource local_file mit dem Namen example annehmen soll.

Speichern Sie die Datei und beenden Sie nano, indem Sie Strg+X, Y und Enter drücken.

Führen Sie terraform apply aus, um die Konfiguration zu aktualisieren

In diesem Schritt werden Sie die Konfigurationsänderungen anwenden. Immer wenn Sie Outputs hinzufügen, entfernen oder ändern, müssen Sie terraform apply ausführen, damit Terraform die Änderungen erkennt und die State-Datei aktualisiert. Die State-Datei ist der Ort, an dem Terraform die Werte Ihrer Outputs speichert.

Führen Sie den Befehl terraform apply in Ihrem Terminal aus.

terraform apply

Terraform zeigt Ihnen zuerst einen Ausführungsplan (Execution Plan). Es wird erkennen, dass Sie einen Output hinzugefügt haben, und plant dessen Hinzufügung. Da die Ressource local_file noch nicht existiert, wird auch deren Erstellung geplant.

Sie werden aufgefordert, die Aktion zu bestätigen. Tippen Sie yes ein und drücken Sie Enter.

Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  ## local_file.example will be created
  + resource "local_file" "example" {
      + content              = "This is an example file managed by Terraform."
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "./example.txt"
      + id                   = (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Changes to Outputs:
  + file_path = "./example.txt"

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

local_file.example: Creating...
local_file.example: Creation complete after 0s [id=ec3adcab998872def2df6200fb03992ac6f237a4]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Outputs:

file_path = "./example.txt"

Wie Sie in der Ausgabe sehen können, war das apply erfolgreich, und Terraform zeigt nun den Output file_path zusammen mit seinem Wert an.

Führen Sie terraform output aus, um den Dateinamen anzuzeigen

In diesem Schritt verwenden Sie den Befehl terraform output, um die Output-Werte aus Ihrer State-Datei anzuzeigen. Dies ist nützlich, um Informationen über Ihre Infrastruktur abzurufen, ohne die State-Datei manuell parsen oder terraform apply erneut ausführen zu müssen.

Um alle in Ihrer Konfiguration definierten Outputs anzuzeigen, führen Sie den Befehl einfach ohne Argumente aus.

terraform output

Dadurch werden alle Outputs in einem menschenlesbaren Format angezeigt.

file_path = "./example.txt"

Sie können auch nach einem bestimmten Output-Wert abfragen, indem Sie dessen Namen als Argument übergeben. Dies ist nützlich in Skripten oder wenn Sie nur eine einzelne Information benötigen.

terraform output file_path

Dieser Befehl gibt nur den Rohwert des angegebenen Outputs aus.

"./example.txt"

Dies erleichtert die Verwendung des Outputs in Shell-Skripten, beispielsweise durch Zuweisung zu einer Variablen: FILE=$(terraform output -raw file_path). Das Flag -raw entfernt die Anführungszeichen.

Zusammenfassung

Herzlichen Glückwunsch zum Abschluss des Labs!

In diesem Lab haben Sie die Grundlagen der Verwaltung von Outputs in Terraform erlernt. Sie haben erfolgreich:

  • Ihre Konfiguration organisiert, indem Sie eine dedizierte Datei outputs.tf erstellt haben.
  • Einen output-Block definiert, um einen Output-Wert zu deklarieren.
  • Ein Ressourcenattribut innerhalb eines Output-Blocks referenziert, um dessen Wert offenzulegen.
  • Die Konfiguration mithilfe von terraform apply angewendet, um den Output verfügbar zu machen.
  • Den Output-Wert über die Kommandozeile mithilfe von terraform output abgefragt.

Terraform Outputs sind ein mächtiges Feature, um wichtige Informationen aus Ihrer Infrastruktur zu extrahieren und Ihre Terraform-Workflows mit anderen Tools und Skripten zu integrieren.