Blog

Wie man Terraform-Locals verwaltet

02.07.2024
Lesezeit: 3 Minuten.
Zuletzt aktualisiert am: 02.07.2024

Inhaltsübersicht

Die effiziente Verwaltung von Terraform-Locals ist entscheidend für die Erstellung sauberer, wartbarer und wiederverwendbarer Konfigurationen. In diesem Leitfaden erfahren Sie, was Terraform-Locals sind, wie man sie implementiert und welche Best Practices es für ihre Verwendung gibt.

Alle Programmiersprachen haben Mechanismen, um Werte im Kontext eines Codeblocks zu speichern. In Terraform-Konfigurationen wird diese Funktionalität durch lokale Werte bereitgestellt. Lokale Werte erlauben es Ihnen, temporäre Werte zu definieren und diese an anderer Stelle in Ihrer Konfiguration zu referenzieren.

Lokale Werte, oft auch "locals" oder "Terraform local variables" genannt, können verwendet werden, um Ausdrücke zu speichern, auf die mehrfach Bezug genommen wird, um Datenumwandlungen durchzuführen oder um statische Werte zu speichern. Lokale Variablen sind eine von drei Arten von Terraform-Variablen, die anderen beiden sind Eingabevariablen und Ausgabewerte. In diesem Beitrag wird untersucht, wie man lokale Werte definiert, wie sie sich von den Eingabevariablen unterscheiden und welche Anwendungsfälle es für lokale Werte gibt.

Die Definition von lokalen Werten in Terraform erfolgt über einen locals-Block, wobei jedem Local ein Name und ein Wert in einem Key-Value-Paar-Format zugewiesen wird. Hier ist ein Beispiel:

locals {
  environment = "development"
}

Lokale Werte können jedem gültigen Terraform-Datentyp zugewiesen werden, wie z.B. Strings, Listen, Maps oder Objekte. Die eigentlichen Werte können aus Eingabevariablen, Ressourcenattributen oder anderen in der Konfiguration definierten lokalen Werten stammen.

locals {

  environment = "development"

  server_list = ["web", "app", "db"]

  subnet_map  = {

    web = var.web_subnet

    app = var.app_subnet

    db  = var.db_subnet

  }

}

Ein locals-Block ist nützlich, um Ausdrücke zusammenzustellen, die an anderer Stelle in der Konfiguration verwendet werden, einschließlich ternärer Ausdrücke und Ausdrücke. Zum Beispiel für das bedingte Setzen eines DNS-Wertes:

locals {

  dns_entry = var.create_load_balancer ? azurerm_public_ip.lb.fqdn : azurerm_public_ip.vm.fqdn

}

Verwendung eines for-Ausdrucks zur Erstellung lokaler Werte für die Benennung von Ressourcen:

locals {

  server_list = ["web", "app", "db"]

  server_names = [ for svr in local.server_list : "${var.prefix}-${svr}" ]

}

Sie können mehrere Locals-Blöcke in einer Terraform-Konfiguration haben, solange jeder lokale Wert einen eindeutigen Namen hat. Einige bevorzugen es, alle lokalen Werte in einem einzigen locals-Block in einer speziellen locals.tf-Datei zu definieren, während andere mehrere locals-Blöcke in der Nähe der Ressourcen und Datenquellen platzieren, die sie referenzieren.

Der Verweis auf einen lokalen Wert erfolgt mit dem Schlüsselwort local, gefolgt von dem Namen des local. Hier erfahren Sie, wie Sie server_names und environment locals in einer Azure VM-Ressource verwenden:

resource "azurerm_linux_virtual_machine" "web" {

  name = local.server_names[0]

  #...

  tags = {

    environment = local.environment

  }

}

Lokale Variablen, die in einem Terraform-Modul definiert sind, sind nur innerhalb dieses Moduls verfügbar. Sie folgen den gleichen Scoping-Prinzipien wie Eingabevariablen, Ressourcen und Datenquellen.

Obwohl Terraform-Eingabevariablen und lokale Werte ähnlich sind, gibt es wichtige Unterschiede:

  • Dynamische Werte, die zur Laufzeit definiert werden
  • Die Werte können nicht aus anderen Konfigurationsquellen stammen
  • Standardwert kann außer Kraft gesetzt werden
  • Definiert durch einen internen Ausdruck
  • Kann jedem gültigen Terraform-Ausdruck zugewiesen werden
  • Können statische Werte zugewiesen werden

In den meisten Programmiersprachen werden Eingabevariablen als "Parameter" und lokale Werte als "Variablen" bezeichnet. Verwenden Sie Eingabevariablen für Werte, die dynamisch sein und sich zur Laufzeit ändern müssen. Verwenden Sie lokale Werte für wiederverwendbare Ausdrücke oder Datenumwandlungen.

Lokale Werte ermöglichen es Ihnen, einen Wert einmal zu definieren und ihn in der gesamten Konfiguration wiederzuverwenden. Zum Beispiel kann ein lokaler Wert verwendet werden, um eine Reihe von gemeinsamen Tags zu definieren:

locals {

  common_tags = {

    environment = var.environment

    project     = var.project

    billing     = var.billingcode

  }

}

resource "azurerm_resource_group" "main" {

  ...

  tags = local.common_tags

}

Lokale können Daten umwandeln, bevor sie in der Konfiguration verwendet werden. Zum Beispiel, um Listenwerte zu aktualisieren:

locals {

  env_config_list = [ for item in var.config_list : "${local.environment}-${item}" ]

}

Selbst wenn der lokale Wert nicht mehrfach verwendet wird, kann die Datenumwandlung in einem lokalen Block andere Konfigurationsblöcke vereinfachen und leichter lesbar machen.

Im Gegensatz zu Eingabevariablen akzeptieren Locals keine Eingabewerte, was sie ideal für die Festlegung statischer Konstanten macht, die nur durch Änderung des Codes aktualisiert werden können. Zum Beispiel:

locals {

  web_app_ports = ["8080", "8443"]

}

Wenn Sie die Portliste ändern möchten, müssen Sie den Code selbst aktualisieren, anstatt die Werte der Eingabevariablen während eines Terraform-Laufs zu ändern. Dieser Ansatz hilft dabei, die Konfigurationswerte an einem Ort zu halten und verhindert unautorisierte Änderungen.

Lokale Werte in Terraform-Konfigurationsdateien helfen dabei, wiederverwendbare Werte zu konstruieren, auf die in der gesamten Konfiguration Bezug genommen werden kann. Werte können den Locals aus Eingabevariablen, Ressourcen, Datenquellen und anderen lokalen Werten zugewiesen werden. Das Verständnis und die effektive Nutzung von Locals kann zu besser organisierten und wartbaren Terraform-Konfigurationen führen.

Wenn Sie neu bei Terraform sind und tiefer einsteigen wollen, lesen Sie unseren Beitrag: Erste Schritte mit Terraform: Terraform Tutorial für Einsteiger.

Eine Antwort hinterlassen

Mehr Beiträge

Die ITGix AWS Landing Zone wird kontinuierlich weiterentwickelt, wobei ein klares Ziel im Vordergrund steht: Unternehmen sollen in die Lage versetzt werden, sichere, konforme und skalierbare AWS-Umgebungen mit geringerem Betriebsaufwand aufzubauen. In den jüngsten Versionen (v1.2.0...
Lesen
In früheren Artikeln haben wir uns mit der Migration von Repositorys aus der Bitbucket Cloud, der sicheren Aktualisierung von Projektabhängigkeiten und der Modernisierung von CI/CD-Workflows durch die Umstellung von Jenkins- und Bash-basierten Pipelines auf GitHub Actions befasst. Auf dieser Grundlage...
Lesen
Kontakt aufnehmen
ITGix bietet Ihnen fachkundige Beratung und maßgeschneiderte DevOps-Services, um Ihr Unternehmenswachstum zu beschleunigen.
Newsletter für
Technik-Experten
Schließen Sie sich 12.000+ Geschäftsführern und Ingenieuren an, die Blogs, e-Books und Fallstudien Fallstudien über neue Technologie erhalten.