Freigeben über


Implementieren von Integrationstests für Terraform-Projekte in Azure

Terraform ermöglicht die Definition, Vorschau und Bereitstellung der Cloudinfrastruktur. Terraform ermöglicht das Erstellen von Konfigurationsdateien mit HCL-Syntax. Mit der HCL-Syntax können Sie den Cloudanbieter ( z. B. Azure ) und die Elemente angeben, aus denen Ihre Cloudinfrastruktur besteht. Nachdem Sie Ihre Konfigurationsdateien erstellt haben, erstellen Sie einen Ausführungsplan, mit dem Sie eine Vorschau ihrer Infrastrukturänderungen anzeigen können, bevor sie bereitgestellt werden. Nachdem Sie die Änderungen überprüft haben, wenden Sie den Ausführungsplan an, um die Infrastruktur bereitzustellen.

Integrationstests überprüfen, ob eine neu eingeführte Codeänderung den vorhandenen Code nicht unterbricht. In DevOps bezieht sich die fortlaufende Integration (CI) auf einen Prozess, der das gesamte System erstellt, wenn die Codebasis geändert wird – z. B. jemand, der eine 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
  • Führen Sie terraform plan aus, um sicherzustellen, dass die Konfiguration wie erwartet funktioniert.

In diesem Artikel erfahren Sie, wie Sie:

  • Lernen Sie die Grundlagen von Integrationstests für Terraform-Projekte kennen.
  • Verwenden Sie Azure DevOps, um eine fortlaufende Integrationspipeline zu konfigurieren.
  • Führen Sie statische Codeanalyse für Terraform-Code aus.
  • Führen Sie terraform validate aus, um Terraform-Konfigurationsdateien auf dem lokalen Computer zu überprüfen.
  • Ausführen von terraform plan, um Terraform-Konfigurationsdateien aus der Perspektive von Remotediensten zu überprüfen
  • Verwenden Sie eine Azure-Pipeline, um die kontinuierliche Integration zu automatisieren.

1. Konfigurieren Ihrer Umgebung

  • Azure-Abonnement: Wenn Sie nicht über ein Azure-Abonnement verfügen, erstellen Sie ein kostenloses Konto, bevor Sie beginnen.

2. Überprüfen einer lokalen Terraform-Konfiguration

Der Befehl terraform validate wird über die Befehlszeile im Verzeichnis mit Ihren Terraform-Dateien ausgeführt. Dieses Befehlshauptziel ist die Überprüfung der Syntax.

  1. Navigieren Sie im Beispielverzeichnis zum Verzeichnis src.

  2. Führen Sie terraform init aus, um das Arbeitsverzeichnis zu initialisieren.

    terraform init
    
  3. Führen Sie terraform validate aus, um die Syntax der Konfigurationsdateien zu überprüfen.

    terraform validate
    

    Wichtige Punkte:

    • Es wird eine Meldung angezeigt, die angibt, dass die Terraform-Konfiguration gültig ist.
  4. Bearbeiten Sie die main.tf Datei.

  5. Fügen Sie in Zeile 5 einen Tippfehler ein, der die Syntax ungültig macht. Ersetzen Sie z. B. var.location durch var.loaction

  6. Speichern Sie die Datei.

  7. Führen Sie die Überprüfung erneut aus.

    terraform validate
    

    Wichtige Punkte:

    • Eine Fehlermeldung wird angezeigt, die die Zeile des fehlerhaften Codes und eine Beschreibung des Fehlers angibt.

Wie Sie sehen können, hat Terraform ein Problem in der Syntax des Konfigurationscodes erkannt. Dieses Problem verhindert die Bereitstellung der Konfiguration.

Es empfiehlt sich, immer terraform validate für Ihre Terraform-Dateien auszuführen, bevor Sie sie in das Versionskontrollsystem pushen. Außerdem sollte diese Überprüfungsstufe Teil Ihrer kontinuierlichen Integrationspipeline sein. Weiter unten in diesem Artikel erfahren Sie, wie Sie eine Azure-Pipeline konfigurieren, umautomatisch zu überprüfen.

3. Überprüfen der Terraform-Konfiguration

Im vorherigen Abschnitt haben Sie erfahren, wie Sie eine Terraform-Konfiguration überprüfen. Diese Testebene war für die Syntax spezifisch. Dieser Test berücksichtigte nicht, was bereits in Azure bereitgestellt werden könnte.

Terraform ist eine deklarative Sprache, was bedeutet, dass Sie das gewünschte Endergebnis deklarieren. Angenommen, Sie haben 10 virtuelle Computer in einer Ressourcengruppe. Anschließend erstellen Sie eine Terraform-Datei, die drei virtuelle Computer definiert. Wenn Sie diesen Plan anwenden, wird die Gesamtanzahl nicht auf 13 erhöht. Stattdessen löscht Terraform sieben der virtuellen Maschinen, damit Sie mit drei enden. Wenn Sie terraform plan ausführen, können Sie die potenziellen Ergebnisse der Anwendung eines Ausführungsplans bestätigen, um Überraschungen zu vermeiden.

Um den Terraform-Ausführungsplan zu generieren, führen Sie terraform plan aus. Mit diesem Befehl wird eine Verbindung mit dem Azure-Zielabonnement hergestellt, um zu überprüfen, welcher Teil der Konfiguration bereits bereitgestellt wurde. Terraform bestimmt dann die notwendigen Änderungen, um die in der Terraform-Datei angegebenen Anforderungen zu erfüllen. In dieser Phase stellt Terraform nichts bereit. Sie erfahren, was passiert, wenn Sie den Plan anwenden.

Wenn Sie dem Artikel folgen und die Schritte im vorherigen Abschnitt ausgeführt haben, führen Sie den Befehl terraform plan aus:

terraform plan

Nach dem Ausführen von terraform plan zeigt Terraform das potenzielle Ergebnis der Anwendung des Ausführungsplans an. Der Ausgabe können Sie entnehmen, welche Azure-Ressourcen hinzugefügt, geändert und zerstört werden.

Standardmäßig speichert Terraform den Zustand im selben lokalen Verzeichnis wie die Terraform-Datei. Dieses Muster eignet sich gut in Einzelbenutzerszenarien. Wenn mehrere Personen jedoch an den gleichen Azure-Ressourcen arbeiten, können lokale Zustandsdateien nicht mehr synchronisiert werden. Um dieses Problem zu beheben, unterstützt Terraform das Schreiben von Zustandsdateien in einen Remotedatenspeicher (z. B. Azure Storage). In diesem Szenario kann es problematisch sein, terraform plan auf einem lokalen Computer auszuführen und einen Remotecomputer als Ziel festzulegen. Daher ist es u. U. sinnvoll, diesen Prüfungsschritt als Teil der Continuous Integration-Pipeline zu automatisieren.

4. Ausführen einer statischen Codeanalyse

Sie können die statische Codeanalyse direkt im Terraform-Konfigurationscode durchführen, ohne den Code auszuführen. Diese Analyse kann hilfreich sein, um Probleme wie Sicherheitsprobleme und Compliance-Inkonsistenzen zu erkennen.

Die folgenden Tools bieten statische Analysen für Terraform-Dateien:

Statische Analysen werden häufig als Teil einer kontinuierlichen Integrationspipeline ausgeführt. Für diese Tests ist die Erstellung eines Ausführungsplans oder einer Bereitstellung nicht erforderlich. Daher werden sie schneller als andere Tests ausgeführt und im Allgemeinen zuerst im kontinuierlichen Integrationsprozess ausgeführt.

5. Automatisieren von Integrationstests mit Azure Pipeline

Die kontinuierliche Integration umfasst das Testen eines gesamten Systems, wenn eine Änderung eingeführt wird. In diesem Abschnitt wird eine Azure Pipeline-Konfiguration zum Implementieren der kontinuierlichen Integration angezeigt.

  1. Navigieren Sie in Ihrem bevorzugten Editor zum lokalen Klon des Terraform-Beispielprojekts auf GitHub.

  2. Öffnen Sie die datei samples/integration-testing/src/azure-pipeline.yaml.

  3. Scrollen Sie nach unten zum Abschnitt steps. Dort sehen Sie die Standardschritte zum Ausführen verschiedener Installations- und Prüfungsroutinen.

  4. Sehen Sie sich die Zeile Step 1: run the Checkov Static Code Analysis an. In diesem Schritt führt das zuvor erwähnte Projekt Checkov eine statische Codeanalyse für die Terraform-Beispielkonfiguration aus.

    - bash: $(terraformWorkingDirectory)/checkov.sh $(terraformWorkingDirectory)
      displayName: Checkov Static Code Analysis
    

    Wichtige Punkte:

    • Dieses Skript ist für die Ausführung von Checkov im Terraform-Arbeitsbereich verantwortlich, der in einem Docker-Container bereitgestellt ist. Von Microsoft verwaltete Agents sind Docker-fähig. Das Ausführen von Tools in einem Docker-Container ist einfacher und entfernt die Notwendigkeit, Checkov im Azure Pipeline-Agent zu installieren.
    • Die $(terraformWorkingDirectory) Variable wird in der azure-pipeline.yaml Datei definiert.
  5. Sehen Sie sich die Zeile Step 2: install Terraform on the Azure Pipelines agent an. Die Terraform Build & Release Task Extension, die Sie zuvor installiert haben, verfügt über einen Befehl zum Installieren von Terraform auf dem Agent, der die Azure-Pipeline ausführt. Diese Aufgabe wird in diesem Schritt ausgeführt.

    - task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-installer.TerraformInstaller@0
      displayName: 'Install Terraform'
      inputs:
        terraformVersion: $(terraformVersion)
    

    Wichtige Punkte:

    • Die zu installierende Version von Terraform wird über eine Azure Pipeline-Variable namens terraformVersion angegeben und in der azure-pipeline.yaml Datei definiert.
  6. Überprüfen Sie die Zeile, die die folgende Anweisung enthält: Schritt 3: Führen Sie Terraform init aus, um den Arbeitsbereichzu initialisieren. Nachdem Terraform auf dem Agenten installiert ist, kann das Terraform-Verzeichnis initialisiert werden.

    - task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0
      displayName: 'Run terraform init'
      inputs:
        command: init
        workingDirectory: $(terraformWorkingDirectory)
    

    Wichtige Punkte:

    • Die Eingabe command gibt an, welcher Terraform-Befehl ausgeführt werden soll.
    • Die Eingabe workingDirectory gibt den Pfad des Terraform-Verzeichnisses an.
    • Die $(terraformWorkingDirectory) Variable wird in der azure-pipeline.yaml Datei definiert.
  7. Sehen Sie sich die Zeile Step 4: run Terraform validate to validate HCL syntax an. Sobald das Projektverzeichnis initialisiert wurde, wird terraform validate ausgeführt, um die Konfiguration auf dem Server zu überprüfen.

    - task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0
      displayName: 'Run terraform validate'
      inputs:
        command: validate
        workingDirectory: $(terraformWorkingDirectory)
    
  8. Sehen Sie sich die Zeile Step 5: run Terraform plan to validate HCL syntax an. Wie zuvor erläutert, wird der Ausführungsplan generiert, um vor der Bereitstellung zu überprüfen, ob die Terraform-Konfiguration gültig ist.

    - task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0
      displayName: 'Run terraform plan'
      inputs:
        command: plan
        workingDirectory: $(terraformWorkingDirectory)
        environmentServiceName: $(serviceConnection)
        commandOptions: -var location=$(azureLocation)
    

    Wichtige Punkte:

    • Die environmentServiceName Eingabe bezieht sich auf den Namen der Azure-Dienstverbindung, die in Konfigurieren Ihrer Umgebungerstellt wurde. Die Verbindung ermöglicht Terraform den Zugriff auf Ihr Azure-Abonnement.
    • Die Eingabe commandOptions wird verwendet, um Argumente an den Terraform-Befehl zu übergeben. In diesem Fall wird ein Ort angegeben. Die $(azureLocation) Variable wird weiter oben in der YAML-Datei definiert.

Importieren der Pipeline in Azure DevOps

  1. Öffnen Sie Ihr Azure DevOps-Projekt, und wechseln Sie zum Abschnitt "Azure Pipelines".

  2. Wählen Sie die Schaltfläche Pipeline erstellen aus.

  3. Wählen Sie unter Wo befindet sich Ihr Code? die Option GitHub (YAML) aus.

    Wo befindet sich Ihr Code?

  4. Zu diesem Zeitpunkt müssen Sie Möglicherweise Azure DevOps für den Zugriff auf Ihre Organisation autorisieren. Weitere Informationen zu diesem Thema finden Sie im Artikel Erstellen von GitHub-Repositorys.

  5. Wählen Sie in der Verzeichnisliste den Fork des Repositorys aus, das Sie in Ihrer GitHub-Organisation erstellt haben.

  6. Wählen Sie im Schritt Pipeline konfigurieren die Option zum Verwenden einer vorhandenen Azure Pipelines-YAML-Datei aus.

    Vorhandene YAML-Pipeline

  7. Wenn die Seite Vorhandene YAML-Datei auswählen angezeigt wird, geben Sie den Branch master an, und geben Sie den Pfad zur YAML-Pipeline ein: samples/integration-testing/src/azure-pipeline.yaml.

    Auswählen einer vorhandenen YAML-Pipeline

  8. Wählen Sie Continue aus, um die Azure YAML-Pipeline von GitHub zu laden.

  9. Wenn die Seite Pipeline-YAML überprüfen angezeigt wird, wählen Sie Ausführen aus, um die Pipeline zu erstellen und erstmals manuell auszulösen.

    Ausführen der Azure-Pipeline

Überprüfen der Ergebnisse

Sie können die Pipeline manuell über die Azure DevOps-Benutzeroberfläche ausführen. Der Punkt des Artikels besteht jedoch darin, eine automatisierte kontinuierliche Integration zu zeigen. Testen Sie den Prozess, indem Sie eine Änderung am Ordner samples/integration-testing/src Ihres geforkten Repositorys vornehmen. Die Änderung löst automatisch eine neue Pipeline in dem Branch aus, in den Sie den Code pushen.

Über GitHub ausgeführte Pipeline läuft

Nachdem Sie diesen Schritt ausgeführt haben, greifen Sie auf die Details in Azure DevOps zu, um sicherzustellen, dass alles ordnungsgemäß ausgeführt wurde.

Azure DevOps Green Pipeline

Problembehebung für Terraform auf Azure

Behebung häufiger Probleme bei der Verwendung von Terraform in Azure

Nächste Schritte