Testen des Terraform-Codes

Testen des Terraform-Codes

Terraform ist so gut und beliebt, und die Community hat so viele verschiedene Anbieter dafür entwickelt, dass es nicht nur für Infrastructure as a Code (IaC), sondern auch für das Konfigurationsmanagement geeignet ist. Mit dem Zabbix-Anbieter können Sie beispielsweise dieses Überwachungstool fast vollständig steuern, und mit dem Azure DevOps-Anbieter ist es möglich, die Kontrolle über das CI/CD-Tool in Terraform-Code auszulagern!

Dies führt dazu, dass Terraform-Konfigurationen immer größer werden und viele verschiedene Tricks, Codepraktiken usw. zum Einsatz kommen, sodass es notwendig wird, TF-Dateien im Automatisierungsmodus zu durchsuchen, d. h. um Terraform-Code auf Fehler und Stile zu testen.

Was wir haben?

Im Allgemeinen kenne ich zwei der am häufigsten verwendeten Methoden zum Testen des Terraform-Codes:

  • terraform validate - nativer Ansatz, der die entwickelte Konfiguration überprüft, ABER OHNE JEGLICHE ANFRAGEN an andere Systeme.
  • tflint - Dienstprogramm eines Drittanbieters, das ungefähr das Gleiche tut, plus:
    • Validierung gegen Fehler bei der Arbeit mit Cloud-Diensten (z. B. ob die von Ihnen angeforderte virtuelle Servergröße tatsächlich vorhanden ist)
    • prüft auf ungenutzte Variablen und Ressourcen
    • prüft, ob die Best Practices eingehalten werden

Obwohl tflint laut Beschreibung die Funktionalität der terraform validate enthalten sollte, erkennt letztere manchmal Fehler, die von ersterem nicht erkannt wurden.

Im Folgenden beschreibe ich die Verwendung dieser beiden Ansätze und ihrer Funktionen detaillierter.

'terraform validate' verwenden

Dies ist ein Befehl der nativen ausführbaren Terraform-Datei, die davon ausgeht, dass sie alle aktuellen Funktionen der HCL-Sprache unterstützt. Der Vorteil liegt auch darin, dass Sie keine anderen Dateien installieren/aktualisieren müssen – alles, was Sie brauchen, ist bereits in der Terraform-Binärdatei eingebettet!

Hier ist die Beschreibung der von terraform validate bereitgestellten Funktionalität:

  1. Syntaxprüfung: Der Befehl validiert Konfigurationsdateien auf Syntaxfehler. Wenn es welche findet, werden Fehlermeldungen mit einer detaillierten Beschreibung und dem Ort des Problems zurückgegeben.

  2. Prüfen, ob alle erforderlichen Argumente vorhanden sind: Überprüft, ob alle obligatorischen Argumente für Ressourcen und Module korrekt festgelegt sind, einschließlich Datentypen und verwendeter Ausdrücke.

  3. Überprüfung der Existenz von Anbietern: überprüft, ob alle verwendeten Anbieter (AWS, Azure usw.) angegeben und verfügbar sind.

  4. Warnung vor Anbieterkompatibilitäten: In einigen Fällen kann der Befehl vor Kompatibilitätsproblemen verwendeter Anbieter warnen, um potenziellen Problemen vorzubeugen.

  5. Modulvalidierung: Wenn Sie Module in Ihrer Konfiguration verwenden, prüft die terraform validate auch die Syntax und die korrekte Verwendung aller Module.

Bevor Sie terraform validate ausführen, müssen Sie die Module und Anbieter herunterladen, die Sie in der Konfiguration verwenden. Der bequemste Weg, dies zu tun – terraform init. Dann führen Sie einfach terraform validate im selben Ordner aus – und – fertig!

terraform validate

Der Hauptnachteil dieser Methode besteht darin, dass der Befehl nicht weiß, welche Werte für Argumente verschiedener Anbieter geeignet sind, und diese daher nicht überprüft. Um dies zu überwinden, werden wir tflint verwenden.

'tflint' verwenden

Das Tflint-Tool verfügt über ähnliche Funktionen, kann aber neben der bloßen Überprüfung von Code und Syntax auch Folgendes tun:

  1. Best Practices-Validierung: Enthält eine Reihe von Regeln, die dabei helfen können, potenzielle Probleme und Verstöße gegen Best Practices während der Entwicklung der Infrastruktur zu identifizieren. Es erkennt beispielsweise die falsche Nutzung von Ressourcen, Umgebungsvariablen sowie Code-Stilen usw.

  2. Unterstützung benutzerdefinierter Regeln: Sie können Ihre eigenen Analyseregeln definieren, um den Anforderungen Ihres spezifischen Projekts oder Unternehmens zu entsprechen.

  3. Anbieterunterstützung: Validiert Code für verschiedene Terraform-Anbieter, was die Validierung der Konfiguration verschiedener Cloud-Dienste ermöglicht.

  4. Berichte und Formate: Kann Analyseergebnisse in verschiedenen Formaten ausgeben, z. B. als Klartext, JSON oder Checkstyle XML, was die Integration mit anderen Dienstprogrammen vereinfacht.

Führen Sie die folgenden Schritte aus, um den Befehl auszuführen:

  • Laden Sie zunächst natürlich die Binärdatei herunter und fügen Sie der Umgebungsvariablen PATH den Pfad dazu hinzu.
  • Und erstellen Sie dann die Konfigurationsdatei .tflint.hcl im selben Ordner mit dem Code. Hier ist die Datei, die ich in meiner Arbeit verwende:
config {
  format = "default"
  module = true
}

plugin "terraform" {
  enabled = true
  preset  = "recommended"
}

# ====================================================

plugin "azurerm" {
    enabled = true
    version = "0.24.0"
    source  = "github.com/terraform-linters/tflint-ruleset-azurerm"
}

Beachten Sie die Zeichenfolge 13 – Sie können bei Bedarf verschiedene Plugins anhängen. Entwickler bieten diese nativen Plugins an:

Dann wie üblich terraform init und zum Schluss zwei Befehle:

  • tflint --init, um Plugins herunterzuladen.
  • tflint, um Tests auszuführen.

tflint

Möglicherweise stehen Sie (wie ich) vor der Situation, dass ich einige Variablen in Modulen oder Konfigurationen nicht immer verwende. Beispiel: Ich deklariere eine Variable, verwende sie aber später nicht.

Die Regel terraform_unused_declarations gibt Fehler und blockierende Automatisierungsskripte zurück. Für solche Fälle verfügt tflint über eine spezielle Ausschlusssyntax für einige Regeln für eine Zeichenfolge:

# tflint-ignore: terraform_unused_declarations
variable "dev_be_storage_account_name" { type = string }

Abschluss

Das war's, ich hoffe, dass meine Arbeit für Sie nützlich sein wird.

Das Testen des Terraform-Codes ist aus folgenden Gründen eine wichtige Praxis:

  1. Vertrauen in Änderungen: In der Entwicklung nehmen Sie Änderungen am Code vor, um neue Ressourcen hinzuzufügen, Parameter zu ändern usw. Durch Tests können Sie sicherstellen, dass jede Änderung nicht die bestehende Infrastruktur und die Interaktion zwischen Komponenten beeinträchtigt.
  2. Abhängigkeitsverfolgung: Terraform-Ressourcen können viele Abhängigkeiten haben. Mithilfe von Tests können Sie sicherstellen, dass Änderungen in einem Teil des Codes nicht andere Teile der Infrastruktur beschädigen.
  3. Automatisierung und Geschwindigkeit: Automatisierte Tests können Code schnell und zuverlässig auf Fehler überprüfen. Dadurch können Sie Probleme schnell erkennen und beheben, Zeit sparen und die Stabilität des Bereitstellungsprozesses gewährleisten.

Terraform (de)

  • Zugriffe: 586
Kommentar schreiben

Related Articles