Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Registrieren eines kostenlosen Accounts finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Wenn Sie Ihre Übung abgeschlossen haben, ersetzen Sie diese Werte durch spezifische Werte für Ihre Cloud-Umgebung.
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:
- Mindestens ein
run
-Block. - Ein oder null
variables
-Block. - Null auf viele
provider
-Blöcke.
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
- Demonstrieren Sie, wie Sie Terraform-Module validieren und den Prozess mit einer Continuous Integration/Continuous Deployment-(CI/CD-)Pipeline automatisieren.
Voraussetzungen
- Terraform v1.6.0 und höher installieren und einrichten Weitere Informationen finden Sie unter Terraform installieren.
Aufgabe 1: Terraform-Test zur Validierung der Ressourcenerstellung schreiben
-
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 }
-
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"}
-
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.
-
Erstellen Sie eine Terraform-Testdatei im Verzeichnis
tests
. Im Folgenden finden Sie ein Beispiel für die Verzeichnisstruktur:├── main.tf └── tests └── test.tftest.hcl
-
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.
-
Ü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.
Verwandte Links
Bestätigungen
- Autor - Nikhil Khandelwal (Enterprise Cloud Architect)
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.
Build a Terraform Validation Pipeline using Terraform Test Framework and Oracle Cloud Infrastructure DevOps
F99870-01
June 2024