Grundlegendes zu Terraform-Variablen, lokalen Werten und Ausgaben - AWS Präskriptive Leitlinien

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. Variablen können an einer beliebigen Stelle in einer Terraform-Konfigurationsdatei deklariert werden und werden normalerweise mit dem erforderlichen Datentyp oder Standardwert deklariert. Alle drei der folgenden Ausdrücke sind gültige Terraform-Variablendeklarationen.

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, als Umgebungsvariablen oder in der Datei terraform.tfvars festlegen. Das folgende Beispiel zeigt, wie Variablenwerte in die Datei terraform.tfvars eingegeben werden, die im obersten Verzeichnis des Moduls gespeichert ist.

# 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 Ausgaben sind. CloudFormation Beide werden verwendet, um Werte innerhalb eines Deployment-Stacks verfügbar zu machen. Da das Terraform-Modul jedoch stärker in der Struktur des Tools verankert ist, werden Terraform-Ausgabewerte auch verwendet, um Werte innerhalb eines Moduls für ein übergeordnetes Modul oder andere untergeordnete Module verfügbar zu machen, selbst wenn sich diese Module alle innerhalb desselben Bereitstellungsstapels befinden. Wenn Sie zwei benutzerdefinierte Module erstellen und das erste Modul auf den ID-Wert des zweiten Moduls zugreifen muss, müssen Sie dem zweiten Modul den folgenden output 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." } }