Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Grundlegendes zu Terraform-Variablen, lokalen Werten und Ausgaben
Variablen erhöhen die Codeflexibilität, indem sie Platzhalter innerhalb von Codeblöcken zulassen. Variablen können unterschiedliche Werte darstellen, wenn der Code wiederverwendet wird. Terraform unterscheidet seine Variablentypen durch ihren modularen Umfang. Eingabevariablen sind externe Werte, die in ein Modul eingefügt werden können, Ausgabewerte sind interne Werte, die extern gemeinsam genutzt werden können, und lokale Werte bleiben immer innerhalb ihres ursprünglichen Gültigkeitsbereichs.
Variablen
AWS CloudFormation verwendet Parameter, um benutzerdefinierte Werte darzustellen, die von einer Stack-Bereitstellung zur nächsten festgelegt und zurückgesetzt werden können. In ähnlicher Weise verwendet Terraform Eingabevariablen oder Variablen
variable "thing_i_made_up" { type = string } variable "random_number" { default = 5 } variable "dogs" { type = list(object({ name = string breed = string })) default = [ { name = "Sparky", breed = "poodle" } ] }
Um innerhalb der Konfiguration auf Sparkys Breed zuzugreifen, würden Sie die Variable verwenden. var.dogs[0].breed
Wenn eine Variable keinen Standard hat und nicht als nullwertfähig eingestuft ist, muss der Wert der Variablen für jede Bereitstellung festgelegt werden. Andernfalls ist es optional, einen neuen Wert für die Variable festzulegen. In einem Root-Modul können Sie aktuelle Variablenwerte in der Befehlszeile
# terraform.tfvars dogs = [ { name = "Sparky", breed = "poodle" }, { name = "Fluffy", breed = "chihuahua" } ] random_number = 7 thing_i_made_up = "Kabibble"
Der Wert für dogs
in diesem Beispiel die Datei terraform.tfvars würde den Standardwert in der Variablendeklaration überschreiben. Wenn Sie Variablen innerhalb eines untergeordneten Moduls deklarieren, können Sie die Variablenwerte direkt im Moduldeklarationsblock festlegen, wie im folgenden Beispiel gezeigt.
module "my_custom_module" { source = "modulesource/custom" version = "0.0.1" random_number = 8 }
Zu den anderen Argumenten, die Sie bei der Deklaration einer Variablen verwenden können, gehören:
-
sensitive
— Wenn Sie dies auf einstellen,true
wird verhindert, dass der Variablenwert in den Terraform-Prozessausgaben angezeigt wird. -
nullable
— Wenn Sie dies auf setzen,true
kann die Variable keinen Wert haben. Dies ist praktisch für Variablen, bei denen kein Standard gesetzt ist. -
description
— Fügt den Metadaten für den Stack eine Beschreibung der Variablen hinzu. -
validation
— Legen Sie Validierungsregeln für die Variable fest.
Einer der praktischsten Aspekte von Terraform-Variablen ist die Möglichkeit, ein oder mehrere Validierungsobjekte innerhalb der Variablendeklaration hinzuzufügen. Sie können Validierungsobjekte verwenden, um eine Bedingung hinzuzufügen, die die Variable erfüllen muss, sonst schlägt die Bereitstellung fehl. Sie können auch eine benutzerdefinierte Fehlermeldung einrichten, die angezeigt wird, wenn die Bedingung verletzt wird.
Sie richten beispielsweise eine Terraform-Konfigurationsdatei ein, die Mitglieder Ihres Teams ausführen werden. Vor der Bereitstellung der Stacks muss ein Teammitglied eine terraform.tfvars-Datei erstellen, um einen wichtigen Konfigurationswert festzulegen. Um sie daran zu erinnern, könnten Sie etwas wie das Folgende tun.
variable "important_config_setting" { type = string validation { condition = length(var.important_config_setting) > 0 error_message = "Don't forget to create the terraform.tfvars file!" } validation { condition = substr(var.important_config_setting, 0, 7) == "prefix-" error_message = "Remember that the value always needs to start with 'prefix-'" } }
Wie in diesem Beispiel gezeigt, können Sie mehrere Bedingungen innerhalb einer einzigen Variablen festlegen. Terraform zeigt nur Fehlermeldungen für fehlgeschlagene Bedingungen an. Auf diese Weise können Sie alle Arten von Regeln für Variablenwerte durchsetzen. Wenn ein Variablenwert einen Pipeline-Ausfall verursacht, wüssten Sie genau, warum.
Lokale Werte
Wenn es in einem Modul Werte gibt, für die Sie einen Alias verwenden möchten, verwenden Sie das locals
Schlüsselwort, anstatt eine Standardvariable zu deklarieren, die niemals aktualisiert wird. Wie der Name schon sagt, enthält ein locals
Block Begriffe, die intern auf dieses spezifische Modul beschränkt sind. Wenn Sie einen Zeichenkettenwert transformieren möchten, z. B. indem Sie einem Variablenwert ein Präfix zur Verwendung in einem Ressourcennamen hinzufügen, ist die Verwendung eines lokalen Werts möglicherweise eine gute Lösung. Ein einzelner locals
Block kann alle lokalen Werte für Ihr Modul deklarieren, wie im folgenden Beispiel gezeigt.
locals { moduleName = "My Module" localConfigId = concat("prefix-", var.important_config_setting) }
Denken Sie daran, dass das locals
Schlüsselwort beim Zugriff auf den Wert singulär wird, z. B. local.LocalConfigId
Ausgabewerte
Wenn Terraform-Eingabevariablen wie CloudFormation Parameter sind, könnte man sagen, dass Terraform-Ausgabewerte wie Ausgabenoutput
Block hinzufügen.
output "module_id" { value = local.module_id } Then in the first module you could use it like this: module "first_module" { source = "path/to/first/module" } resource "example_resource" "example_resource_name" { module_id = module.first_module.module_id }
Da Terraform-Ausgabewerte innerhalb desselben Stacks verwendet werden können, können Sie das sensitive
Attribut auch in einem output
Block verwenden, um zu verhindern, dass der Wert in der Stackausgabe angezeigt wird. Darüber hinaus kann ein output
Block precondition
Blöcke auf die gleiche Weise verwenden wie Variablen validation
Blöcke verwenden: um sicherzustellen, dass Variablen bestimmten Regeln folgen. Auf diese Weise können Sie sicherstellen, dass alle Werte innerhalb eines Moduls wie erwartet vorhanden sind, bevor Sie mit der Bereitstellung fortfahren.
output "important_config_setting" { value = var.important_config_setting precondition { condition = length(var.important_config_setting) > 0 error_message = "You forgot to create the terraform.tfvars file again." } }