Hinweis:

Terraform-Validierungspipeline mit Terraform-Test-Framework und Oracle Cloud Infrastructure DevOps erstellen

Einführung

Unternehmen verwenden häufig Terraform-Module, um komplexes Ressourcen-Provisioning zu verwalten, und bieten Entwicklern eine einfache Schnittstelle, mit der sie die erforderlichen Parameter für das Deployment der gewünschten Infrastruktur eingeben können. Module erleichtern die Codewiederverwendung und bieten Unternehmen die Möglichkeit, das Deployment gängiger Workloads zu standardisieren, z. B. eine dreistufige Webanwendung, eine Cloud-Netzwerkumgebung oder eine Datenanalyse-Pipeline. Bei der Entwicklung von Terraform-Modulen beginnen Autoren in der Regel mit manuellen Tests. Dazu werden Befehle wie terraform validate für die Syntaxvalidierung, terraform plan für die Vorschau des Ausführungsplans und terraform apply verwendet. Anschließend werden die Ressourcenkonfigurationen in der Oracle Cloud Infrastructure-(OCI-)Konsole manuell geprüft. Manuelle Tests sind jedoch anfällig für menschliche Fehler, nicht skalierbar und können zu unbeabsichtigten Problemen führen. Da Module von mehreren Teams innerhalb einer Organisation verwendet werden, ist es wichtig, Änderungen vor der Veröffentlichung gründlich zu testen.

Terraform-Test ist ein neues Test-Framework, mit dem Modulautoren Unit- und Integrationstests für Terraform-Module durchführen können. Sie ermöglicht die Erstellung der im Modul definierten Infrastruktur, führt Validierungsprüfungen in der Infrastruktur durch und zerstört Testressourcen, unabhängig davon, ob die Tests erfolgreich oder nicht erfolgreich sind. Darüber hinaus gibt der Terraform-Test Warnungen aus, wenn Ressourcen nicht gelöscht werden können. Mit derselben HashiCorp Configuration Language-(HCL-)Syntax wie Terraform-Module wird die Notwendigkeit minimiert, dass Autoren andere Tools oder Programmiersprachen lernen müssen.

Jeder Terraform-Test befindet sich in einer Testdatei. Terraform erkennt Testdateien basierend auf ihrer Dateierweiterung: .tftest.hcl oder .tftest.json. Jede Testdatei besteht wie folgt aus Attributen und Blöcken auf Root-Ebene:

Terraform führt run-Blöcke nacheinander aus und imitiert eine Folge von Terraform-Befehlen, die im Konfigurationsverzeichnis ausgeführt werden. Die Reihenfolge, in der die Blöcke variables und provider angeordnet sind, spielt keine Rolle, da Terraform zu Beginn des Testprozesses alle Werte in diesen Blöcken auswertet. Aus Gründen der Übersichtlichkeit ist es ratsam, die Blöcke variables und provider am Anfang der Testdatei zu platzieren.

Ziele

Voraussetzungen

Aufgabe 1: Terraform-Test zur Validierung der Ressourcenerstellung schreiben

  1. Wir haben die grundlegende Struktur einer Terraform-Testdatei behandelt. Lassen Sie uns einige grundlegende Tests schreiben, um die Funktionalität der folgenden Terraform-Konfiguration zu prüfen. Die folgende Terraform-Konfiguration erstellt einen OCI-Objektspeicher-Bucket der Standard-Tier.

    #main.tf
    
    resource "oci_objectstorage_bucket" "test_bucket" {
    
        compartment_id = var.compartment_id
        name = var.bucket_name
        namespace = var.bucket_namespace
        storage_tier = var.bucket_storage_tier
        versioning = var.bucket_versioning
    }
    
  2. Erstellen Sie die Datei var.tf mit den erforderlichen Variablen.

    variable compartment_id { default = "<compartment-ocid>" }
    variable region { default = "<region>" }
    variable bucket_name { default = "<bucket-name>"}
    variable bucket_namespace { default = "<object-storage-namespace>"}
    variable bucket_access_type { default = "ObjectRead"}
    variable bucket_storage_tier { default = "Standard"}
    variable bucket_versioning {default = "Enabled"}
    
  3. Konfigurieren Sie den OCI-Terraform-Provider mit der Resource Principal-Autorisierung. Damit kann der Provider API-Aufrufe ausführen, ohne dass Zugangsdaten in der Providerdefinition angegeben werden müssen. Informationen zum Einrichten der Resource Principal-Autorisierung für den OCI-Provider finden Sie unter Resource Principal-Autorisierung.

  4. Erstellen Sie eine Terraform-Testdatei im Verzeichnis tests. Im Folgenden finden Sie ein Beispiel für die Verzeichnisstruktur:

    ├── main.tf 
    └── tests 
    └── test.tftest.hcl
    
  5. Aktualisieren Sie die Datei test.tftest.hcl. Dabei wird geprüft, ob die Tier des erstellten Buckets Standard ist.

    # test.tftest.hcl
    
    run "valid_bucket_tier" {
    
      command = plan
    
      assert {
        condition     = oci_objectstorage_bucket.test_bucket.storage_tier == "Standard"
        error_message = "bucket tier is not standard"
      }
    
    }
    

    Hinweis: Wenn die Storage Tier des Buckets kein Standard ist, verläuft der Test nicht erfolgreich.

  6. Übertragen Sie die oben genannten Terraform-Dateien an das OCI-Code-Repository. Dieses Code-Repository wird mit unserer CI/CD-Pipeline verwendet.

Aufgabe 2: Build-Pipeline für OCI DevOps zur Validierung der Terraform-Konfiguration erstellen

In der Datei build_spec.yaml werden die Befehle terraform init und terraform validate verwendet, um Terraform zu initialisieren und zu prüfen, ob die Konfiguration gültig ist. Anschließend führt der terraform-Testbefehl die konfigurierten Tests aus. Wenn Terraformtests fehlschlagen, schlägt auch die Pipeline fehl.

version: 0.1
component: build
timeoutInSeconds: 10000
shell: bash      
failImmediatelyOnError: true

steps:
  - type: Command
    name: "Initialize Terraform"
    command: |
      terraform init
      terraform validate
  - type: Command
    name: "Test Terraform"
    command: |
      terraform test 

Nächste Schritte

Wir haben einen einfachen Assertion-Test in unserer Terraform-Konfiguration durchgeführt. Sie können verschiedene Testtypen wie Integrationstests, Einheitentests, End-to-End-Tests usw. ausführen. Weitere Informationen finden Sie unter Terraform-Tests.

Diese Terraform-Validierungspipeline kann in die CI/CD-Pipeline der Anwendung integriert werden. Die Terraform-Validierungspipeline ruft die Artefakte aus den vorherigen Phasen ab und testet die Konfiguration, bevor die Änderungen implementiert werden.

Bestätigungen

Weitere Lernressourcen

Lernen Sie andere Übungen auf docs.oracle.com/learn kennen, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube Channel zu. Außerdem können Sie education.oracle.com/learning-explorer besuchen, um Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.