Blog

Benutzerdefinierte Überprüfungsregeln für Terraform-Eingabevariablen

Lotte-Sara Laan

Lotte-Sara Laan

Aktualisiert Oktober 23, 2025
3 Minuten

In meinem letzten Beitrag über die Terraform-Eingabevalidierung habe ich über die Verwendung der Funktion file zur Erstellung von Eingabebestätigungen gesprochen. Diese Methode eignet sich zwar hervorragend, wenn Sie komplexe Prüfungen durchführen müssen, bei denen das Ergebnis von mehreren Variablen abhängt, aber Terraform ermöglicht es Ihnen auch, Validierungen zu Ihren Variablendefinitionen selbst hinzuzufügen. In diesem Beitrag gebe ich Ihnen einige Beispiele, wie Sie diese Funktion nutzen können.

Beschränkungen

Als die Validierungsoption zum ersten Mal in Terraform CLI v0.13.0 auftauchte, war ich wirklich begeistert. Ich hoffte, dass wir endlich unsere benutzerdefinierten Assertions loswerden könnten, die auf der Funktion file basieren, über die ich hier gesprochen habe. Leider musste ich feststellen, dass die Validierungen mit Einschränkungen verbunden sind. Bevor wir also loslegen, werde ich Sie über diese Einschränkungen informieren, damit Sie vorab entscheiden können, ob dies für Ihren Anwendungsfall geeignet ist.

Referenzbegrenzung

Wenn Sie Ihren Validierungscode schreiben, können Sie nur den an Ihre Variable übergebenen Inhalt mit fest kodierten Zeichenketten vergleichen. Dies schränkt Sie bei der Erstellung komplexer Validierungen ein, bei denen Sie auch an eine andere Variable übergebene Werte vergleichen müssen.

Keine Variablen in error_message erlaubt

Sie dürfen keine Variablen im Feld error_message verwenden. Das macht es unmöglich, eine detaillierte Fehlermeldung anzuzeigen. Terraform teilt Ihnen den Inhalt der Eingabevariablen nicht mit und da die Verwendung von Variablen nicht erlaubt ist, ist es auch nicht möglich, dies dem Benutzer selbst anzuzeigen.

Keine dynamische Unterstützung

Obwohl es ein offenes Ticket gibt, um dynamic zu den Validierungsregeln hinzuzufügen, wird es derzeit nicht unterstützt. Dies erschwert die Erstellung von Validierungen für Variablen mit einem Objekttyp oder einer Map.

Einfache Überprüfungen

Da wir nun die Einschränkungen kennen, können wir damit beginnen, unsere eigenen Validierungen zu schreiben. Wenn wir uns die Terraform-Dokumentation ansehen, sehen wir bereits einige Beispiele. Ein Beispiel kombiniert eine Längenprüfung mit einer String-Präfix-Prüfung, und das andere zeigt Ihnen, wie Sie reguläre Ausdrücke verwenden, um den Eingabewert zu prüfen. Was aus der Dokumentation nicht ganz klar hervorgeht, ist die Tatsache, dass Sie für jede Ihrer Variablen mehrere Validierungsblöcke definieren können. Damit können Sie Folgendes tun:

variable "prefix" {
  type        = string
  description = "The prefix used for the GCP projects"

  validation {
    condition     = can(regex("^w+$", var.project_prefix))
    # Not allowed due to the use of a variable:
    # error_message = "Invalid value [${var.prefix}]. The prefix value can only contain letters and numbers."
    error_message = "The prefix value can only contain letters and numbers."
  }

  validation {
    condition     = length(var.project_prefix) > 2 && ength(var.project_prefix) <= 6
    # Not allowed due to the use of a variable:
    # error_message = "Invalid value [${var.prefix}]. The prefix value should contain at least 3 characters and can not contain more than 6 characters"
    error_message = "The prefix value should contain at least 3 characters and can not contain more than 6 characters"
  }
}

Validierung komplexer Typen


Tags:

Verfasst von

Lotte-Sara Laan

Contact

Let’s discuss how we can support your journey.