Testen von Terraform-Code

Mit Terraform können Sie eine Cloudinfrastruktur definieren, eine Vorschau der Cloudinfrastruktur anzeigen und die Cloudinfrastruktur bereitstellen. Terraform ermöglicht das Erstellen von Konfigurationsdateien mit HCL-Syntax. Mit der HCL-Syntax können Sie den Cloudanbieter (beispielsweise Azure) und die Elemente angeben, aus denen sich Ihre Cloudinfrastruktur zusammensetzt. Nach der Erstellung Ihrer Konfigurationsdateien erstellen Sie einen Ausführungsplan, mit dem Sie eine Vorschau Ihrer Infrastrukturänderungen anzeigen können, bevor diese bereitgestellt werden. Nach der Überprüfung der Änderungen wenden Sie den Ausführungsplan an, um die Infrastruktur bereitzustellen.

Terraform ist ein Infrastructure-as-Code-Tool (IAC). Diese Toolkategorie bezieht sich auf die Tatsache, dass Sie Ihre Terraform-Dateien wie den Quellcode des Projekts behandeln. Teil dieses Prozesses sind die Versionskontrolle und Quellcodeverwaltung. Tests sollten ebenfalls ein Bestandteil Ihres Prozesses sein. Dieser Artikel bietet eine Übersicht über die verschiedenen Arten von Tests, die für ein Terraform-Projekt ausgeführt werden können.

Implementieren von Integrationstests

Integrationstests stellen sicher, dass eine neu eingeführte Codeänderung vorhandenen Code nicht unterbricht. In DevOps bezieht sich Continuous Integration (CI) auf einen Prozess, durch den das gesamte System bei jeder Änderung der Codebasis erstellt wird, z. B. wenn eine Person einen Pull Request (PR) in einem Git-Repository zusammenführen möchte. Die folgende Liste enthält allgemeine Beispiele für Integrationstests:

  • Tools für die statische Codeanalyse, z. B. „lint“ und „format“
  • Ausführen von terraform validate, um die Syntax der Konfigurationsdateien zu überprüfen
  • Ausführen von terraform plan, um sicherzustellen, dass die Konfiguration wie erwartet funktioniert

Implementieren von Komponententests

Komponententests stellen sicher, dass sich ein bestimmter Teil oder eine bestimmte Funktion eines Programms korrekt verhält. Komponententests werden vom Entwickler der Funktionalität geschrieben. Diese Art von Tests, die auch als testgesteuerte Entwicklung (Test-Driven Development, TDD) bezeichnet wird, erfordert kontinuierliche kurze Entwicklungszyklen. Bei Terraform-Projekten können Komponententests in Form von terraform plan ausgeführt werden, um sicherzustellen, dass die tatsächlichen Werte, die im generierten Plan verfügbar sind, den erwarteten Werten entsprechen.

Komponententests können besonders dann nützlich sein, wenn Ihre Terraform-Module an Komplexität zunehmen:

  • Generieren von dynamischen Blöcken
  • Verwenden von Schleifen
  • Berechnen lokaler Variablen

Ähnlich wie Integrationstests werden Komponententests oft in den Continuous Integration-Prozess eingebunden.

Implementieren von Compliancetests

Mit Konformitätstests wird sichergestellt, dass die Konfiguration den für das Projekt definierten Richtlinien entspricht. Möglicherweise definieren Sie geopolitische Namenskonventionen für Ihre Azure-Ressourcen, oder Sie möchten, dass VMs aus einer definierten Teilmenge von Images erstellt werden. Konformitätstests werden verwendet, um diese Regeln zu erzwingen.

Konformitätstests werden in der Regel ebenfalls als Teil des Continuous Integration-Prozesses definiert.

Implementieren von End-to-End-Tests (E2E)

Mit E2E-Tests wird überprüft, ob ein Programm funktioniert, bevor es in der Produktionsumgebung bereitgestellt wird. Ein Beispielszenario ist ein Terraform-Modul, das zwei VMs in einem virtuellen Netzwerk bereitstellt. Wenn Sie in diesem Beispiel verhindern möchten, dass die beiden VMs einander pingen, können Sie einen Test definieren, um das gewünschte Ergebnis vor der Bereitstellung zu überprüfen.

Ein E2E-Test besteht in der Regel aus drei Schritten. Zuerst wird die Konfiguration auf eine Testumgebung angewendet. Danach wird der Code ausgeführt, um die Ergebnisse zu überprüfen. Zum Schluss wird die Testumgebung entweder erneut initialisiert oder entfernt (z. B. durch Aufheben der Zuordnung einer VM).