Einführung
Terraform-Ausgaben werden verwendet, um Informationen über die Infrastrukturressourcen aus dem Projektstatus zu extrahieren. Mit anderen Funktionen des Hashicorp Konfigurationssprachchens (HCL), das Terraform benutzt, können Ressourceninformationen abgerufen und in komplexere Datenstrukturen wie Listen und Maps transformiert werden. Ausgaben sind nützlich für den Austausch von Informationen mit externem Software, die auf der erstellten Infrastruktur arbeiten sollen. Im folgenden Tutorial lernst du die Syntax von Terraform-Ausgaben und ihre Parameter kennen, indem du ein einfaches Infrastrukturprojekt erstellen, das Droplets deployst. Außerdem konvertierst du die Ausgaben programmgestellt in JSON.
Voraussetzungen
- Ein DigitalOcean Personal Access Token, das Sie über das DigitalOcean-Kontrollpanel erstellen können. Sie finden Anleitungen in den DigitalOcean-Produktdokumenten unter How to Create a Personal Access Token.
- Terraform wurde auf Ihrem lokalen Rechner installiert und ein Projekt mit dem DigitalOcean-Anbieter eingerichtet. Führen Sie Schritt 1 und Schritt 2 des Tutorials zum Einsatz von Terraform mit DigitalOcean durch und nennen Sie das Projektordner
terraform-outputs
, anstattloadbalance
. Während Schritt 2, sollten Sie die Variablepvt_key
und die SSH-Schlüsselressource nicht包含. - Vertrautheit mit HCL-Datentypen und Schleifen. Weitere Informationen finden Sie im Tutorial zum Verbessern der Flexibilität mit Terraform-Variablen, Abhängigkeiten und Bedingungen.
Hinweis: Dieses Tutorial wurde speziell mit Terraform 1.0.2
getestet.
Ausgaben definieren
In diesem Abschnitt decken Sie einen Droplet ab, deployen es ins Cloud-Netzwerk und lernen Sie Ausgaben kennen, indem Sie eine definieren, die die IP-Adresse des Droplet anzeigen soll.
Aus dem als Voraussetzung erstellten Ordner terraform-outputs
erstellen und öffnen Sie die Datei droplets.tf
für Bearbeitung:
Fügen Sie dem folgenden Droplet-Ressource und Ausgabendefinition hinzu:
Um einen Droplet-Resource zu deklarieren, wird in der Cloud ein Droplet namens test-droplet
mit dem Region fra1
und Ubuntu 20.04 festgelegt.
Sie definieren eine Ausgabe, die als droplet_ip_address
bezeichnet wird. In Terraform werden Ausgaben verwendet, um intern und berechnete Werte und Informationen über die Ressourcen auszugeben. Hier setzen Sie den Parameter value
, der die Daten zum Ausgaben接受. Bei der Deklaration ist es unklar, welcher IP-Adresse das Droplet zugewiesen wird, aber sie wird später verfügbar sein, nachdem das Droplet部署. Ausgaben werden nach jeder Deployment angezeigt.
Speichern und schließen Sie die Datei, und starten Sie das Projekt durch die folgende Befehle:
Wählen Sie ja
aus, wenn Sie darauf gefragt werden. Die letzten Zeilen des Ergebnisses sind ähnlich wie diese:
Die hervorgehobene IP-Adresse gehört Ihrem neuen Deployed Droplet. Nach der Applikation des Projekts werden die Ausgaben am Ende angezeigt, wenn alle Ressourcenattribute verfügbar sind. Ohne die droplet_ip_address
Ausgabe würden Terraform keine weiteren Informationen über das Droplet anzeigen, außer dass es deployt wurde.
Ausgaben können auch mit dem Befehl output
angezeigt werden:
Der output
zeigt alle outputs
im Projekt an:
Outputdroplet_ip_address = ip_address
Sie können auch eine bestimmte Ausgabe mittels eines Namen als Argument angeben:
Für droplet_ip_address
, die Ausgabe besteht nur aus der IP-Adresse:
Outputip_address
Zusätzlich zu value
, hat output
einige optionale Parameter:
Beschreibung
: Ein kurzes Dokumentations-Material, das detailliert erklärt, was die Ausgabe zeigt.abhängig von
: Ein Meta-Parameter, der bei jeder Ressource verfügbar ist und es erlaubt, explizit zu bestimmen, welche Ressourcen die Ausgabe von Terraform nicht automatisch während der Planung ableiten kann.sensitiv
: Akzeptiert einen booleschen Wert, der die Inhalte des Ausgabes unterbindet, sodass sie nach dem Deployment nicht angezeigt werden, falls sie auftrue
festgelegt sind.
Die sensitiv
-Parameter ist nützlich, wenn die Logs der Terraform-Deployment öffentlich verfügbar sein werden, aber die Ausgaben geheim bleiben sollen. Du wirst sie jetzt zu deiner Droplet-Ressourcendefinition hinzufügen.
Öffne droplets.tf
für Bearbeitung und füge die hervorgehobene Zeile hinzu:
Speicheln und schließen Sie das Datei, wenn du fertig bist. Deploy the project again by running:
Eingeben ja
als Antwort, wenn dir eine Frage gestellt wird. Du siehst, dass die Ausgabe mit einem Einzelnachweis versehen ist:
Auch wenn sie als sensitiv
markiert ist, ist sie über andere Kanale wie das Anzeigen des Terraform-States oder die Abfrage der Ausgaben direkt verfügbar.
Im nächsten Schritt erstellen Sie ein anderes Droplet und strukturieren Sie eine andere Ausgabestruktur, also zerstören Sie die aktuell部署ten durch:
Die letzte Ausgabe am Ende wird sein:
Output...
Destroy complete! Resources: 1 destroyed.
Du hast ein Droplet definiert und eine Ausgabe erstellt, die seine IP-Adresse zeigt. Du lernst nun mehr über die Verwendung von Ausgaben, um komplexere Strukturen wie Listen und Maps anzuzeigen.
Erstellung komplexer Strukturen
In diesem Abschnitt verwenden Sie den Schlüsselwort count
, um mehrere Droplets aus der gleichen Definition zu erstellen und geben Sie verschiedene Formatierungen für ihre IP-Adressen an.
Verwendung des for
-Loop
Sie müssen die Ressourcendefinition der Droplet bearbeiten, damit sie wie folgt aussehen:
Modifizieren Sie sie so, dass sie wie folgt aussehen:
Sie haben festgelegt, dass drei Droplets mit dem Schlüssel count
erstellt werden sollen und den aktuellen Index zur Droplet-Namenserweiterung hinzugefügt, damit Sie später zwischen ihnen unterscheiden können. Entfernen Sie das vorhandene Ausgabestück unterhalb. Wenn Sie fertig sind, speichern und schließen Sie die Datei.
Die Code durchführen indem Sie folgendes ausführen:
Terraform wird die Erstellung von drei Nummerierten Droplets planen, genannt test-droplet-0
, test-droplet-1
, und test-droplet-2
. Antworten Sie ja
wenn Sie darauf gefragt werden, um den Prozess zu beenden. Am Ende sehen Sie folgende Ausgabe:
Output...
Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
Dies bedeutet, dass alle drei Droplets erfolgreich erstellt wurden und alle Informationen über sie in das Projektstate gespeichert sind.
Der einfachste Weg, um auf die Eigenschaften ihrer Ressourcen zuzugreifen, besteht darin, Outputs zu verwenden. Allerdings ist es nicht skalierbar, einen Output für jeden Droplet zu erstellen. Die Lösung besteht darin, den for
Loop zu verwenden, um durch die Liste der Droplets zu gehen und ihre Eigenschaften zusammenzusammeln oder alternativ splat Ausdrücke (über die du später in diesem Schritt lernst) zu verwenden.
Du beginnst damit, ein Output zu definieren, das die IP-Adressen der drei Droplets mit ihren Namen ausgibt. Öffne droplets.tf
zum Bearbeiten:
Füge die folgenden Zeilen hinzu:
Der Wert des Outputs droplet_ip_addresses
wird mithilfe eines for
Loops erstellt. Da er von Klammern umschlossen ist, wird die resultierende Art ein Map sein. Der Loop durchläuft die Liste der Droplets und für jede Instanz wird ihr Name mit ihrer IP-Adresse zusammengebunden und zur resultierenden Map hinzugefügt.
Speichere und schließe die Datei, dann aktualisiere das Projekt erneut:
Gib yes
ein, wenn du davon abgefragt wirst, und du erhälst am Ende die Inhalte des Outputs:
Der Output droplet_ip_addresses
zeigt die IP-Adressen der drei bereitgestellten Droplets auf.
Mit dem Terraform output
Befehl kannst du die Inhalte des Outputs als JSON mit seinem Befehlsargument abrufen:
Das Ergebnis wird ähnlich dem folgenden sein:
JSON-Verarbeitung ist weit verbreitet und in vielen Programmiersprachen unterstützt. Auf diese Weise kannst du programmatisch die Informationen über die bereitgestellten Droplet-Ressourcen parsen.
Using Splat Expressions
Splat-Expressionen bieten eine kompakte Methode zur Iteration über alle Elemente einer Liste und zum Sammeln des Inhalts eines Attributs von jedem davon, resultierend in einer Liste. Eine Splat-Expression, die die IP-Adressen der drei deployierten Droplet auswählen würde, hat folgende Syntax:
Die [*]
-Symbol trauert über das Element links und für jede der Elemente, nimmt es den Inhalt des auf der rechten angegebenen Attributs. Wenn die Referenz links nicht selbst eine Liste ist, wird sie in eine sein, in der sie das einzige Element ist.
Sie können droplets.tf
öffnen und die folgenden Zeilen so modifizieren, dass Sie dies umsetzen:
Nachdem Sie das Datei gespeichert haben, können Sie das Projekt durch die folgende Befehlssatz ausführen:
Sie erhalten als Ausgabe jetzt eine Liste, die nur die IP-Adressen der Droplet enthält:
Um die Ausgabe als JSON zu erhalten, führen Sie die folgende Befehlszeile aus:
Die Ausgabe wird nun eine einzelne Array sein:
Sie haben Outputs zusammen mit Splat-Expressionen und for
-Loop verwendet, um die IP-Adressen der部署ten Droplet auszugeben. Sie haben auch den Inhalt als JSON erhalten und werden nun jq
– ein Tool benutzen, um dynamisch nach gegebenen Expressiven JSON zu filtern – um sie zu parsen.
Parsing Ausgaben mit jq
In diesem Schritt installieren und lernen Sie die Grundlagen von jq
, einem Werkzeug zur Manipulation von JSON-Dokumenten. Sie verwenden es, um die Ausgaben Ihres Terraform-Projekts zu analysieren.
Für Ubuntu können Sie folgendes Kommando ausführen, um jq
installieren:
Auf macOS können Sie Homebrew verwenden, um es installieren:
jq
wendet die angegebene Bearbeitungsausdrucksatz auf das angegebene Eingabeobjekt an, das über PIPE eingefügt werden kann. Die einfachste Aufgabe von jq
ist, die Eingabe ohne Modifikationen auszugeben:
Die Anwendung des Identitätst operators (.
) bedeutet, dass das ganze JSON-Dokument, das vom Eingabeobjekt gelesen wurde, ohne Modifikationen ausgegeben werden sollte:
Sie können einen einzelnen IP-Adressen anfordern, indem sie eine Array-Notation mit der Zählung von Null anwenden:
Die Ausgabe wird sein:
Um nur den zweiten IP-Adressen zu erhalten, geben Sie die Array-Brackets ein:
Sie erhalten eine schön formatierte JSON-Array-Ausgabe:
Sie können Teile von Arrays anstatt Einzelelemente abfragen, indem Sie eine Range von Indexen innerhalb der Brackets angeben:
Die Ausgabe wird sein:
Die Bereichsangabe 0..2
liefert die ersten zwei Elemente – der obere Teil des Bereichs (2
) ist nicht inklusive, daher werden nur die Elemente an den Positionen 0
und 1
abgerufen.
Sie können nun die bereitgestellten Ressourcen durch folgendes Befehl zerstören:
In diesem Schritt haben Sie jq
installiert und es verwendet um die Ausgaben Ihres Terraform-Projektes zu parsen und manipulieren, das drei Droplet einrichtet.
Zusammenfassung
Sie haben gelernt, wie Sie Terraform-Ausgaben verwenden, um Details über die bereitgestellten Ressourcen anzuzeigen und Datenstrukturen für später externe Bearbeitung auszugeben. Sie haben auch die Ausgaben verwendet, um Attribute eines einzelnen Ressourcens anzuzeigen sowie für die Darstellung von Maps und Listen, die aufgebaut sind aus Ressourcenattributen.
Für mehr detaillierte Informationen über die Funktionen von jq
, besuchen Sie die offizielle Dokumentation.
Dieser Tutorial ist Teil der How To Manage Infrastructure with Terraform -Reihe. Die Reihe behandelt eine Vielzahl von Terraform-Themen, vom Installieren von Terraform zum erstmaligen Management komplexer Projekte.