Nota
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriverti a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
Crea una pipeline di convalida Terraform utilizzando il framework di test Terraform e Oracle Cloud Infrastructure DevOps
Introduzione
Le organizzazioni utilizzano spesso i moduli Terraform per gestire il provisioning complesso delle risorse e offrono un'interfaccia semplice per gli sviluppatori per inserire i parametri necessari per la distribuzione dell'infrastruttura desiderata. I moduli facilitano il riutilizzo del codice e forniscono alle organizzazioni un modo per standardizzare la distribuzione di carichi di lavoro comuni, come un'applicazione Web a tre livelli, un ambiente di cloud networking o una pipeline di analisi dei dati. Quando si sviluppano i moduli Terraform, gli autori in genere iniziano con il test manuale. Ciò implica l'uso di comandi come la convalida di terraform per la convalida della sintassi, il piano terraform per visualizzare in anteprima il piano di esecuzione e l'applicazione di terraform, seguito dall'analisi manuale delle configurazioni delle risorse nella console di Oracle Cloud Infrastructure (OCI). I test manuali, tuttavia, sono soggetti a errori umani, non scalabili e possono portare a problemi involontari. Poiché i moduli vengono utilizzati da più team all'interno di un'organizzazione, è fondamentale testare accuratamente eventuali modifiche prima del rilascio.
Il test Terraform è un nuovo framework di test progettato per consentire agli autori dei moduli di eseguire test di unità e integrazione per i moduli Terraform. Consente la creazione di infrastrutture come definito nel modulo, esegue controlli di convalida sull'infrastruttura e distrugge le risorse di test indipendentemente dal fatto che i test superino o meno. Inoltre, il test Terraform fornisce avvertenze se non è possibile eliminare alcuna risorsa. Utilizzando la stessa sintassi HCL (HashiCorp Configuration Language) dei moduli Terraform, riduce al minimo la necessità per gli autori di apprendere altri strumenti o linguaggi di programmazione.
Ogni test Terraform si trova in un file di test. Terraform trova i file di test in base all'estensione file: .tftest.hcl
o .tftest.json
. Ogni file di test è composto da attributi e blocchi a livello radice come indicato di seguito.
- Uno o più blocchi
run
. - Un blocco
variables
o zero. - Da zero a molti blocchi
provider
.
Terraform esegue i blocchi run
in sequenza, imitando una sequenza di comandi Terraform in esecuzione nella directory di configurazione. La sequenza in cui sono disposti i blocchi variables
e provider
non è importante, poiché Terraform valuta tutti i valori all'interno di questi blocchi all'inizio del processo di test. Per maggiore chiarezza, è consigliabile posizionare i blocchi variables
e provider
all'inizio del file di test.
Obiettivi
- Dimostra come convalidare i moduli Terraform e automatizzare il processo utilizzando una pipeline CI/CD (Continuous Integration/Continuous Deployment).
Prerequisiti
- Installare e configurare Terraform v1.6.0 e versioni successive. Per ulteriori informazioni, vedere Installa Terraform.
Task 1: Scrivi test Terraform per convalidare la creazione delle risorse
-
Abbiamo coperto la struttura fondamentale di un file di test Terraform, scriviamo alcuni test di base per verificare la funzionalità della configurazione Terraform seguente. La configurazione Terraform seguente creerà un bucket di storage degli oggetti OCI di livello Standard.
#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 }
-
Creare il file
var.tf
con le variabili richieste.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"}
-
Configurare il provider Terraform OCI con l'autorizzazione del principal risorsa, consente al provider di effettuare chiamate API senza dover fornire le credenziali all'interno della definizione del provider. Per impostare l'autorizzazione principal risorsa per il provider OCI, vedere Autorizzazione principal risorsa.
-
Creare un file di test Terraform nella directory
tests
. Ecco un esempio della struttura di directory:├── main.tf └── tests └── test.tftest.hcl
-
Aggiornare il file
test.tftest.hcl
, che controlla se il livello del bucket creato è Standard o meno.# 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" } }
Nota: se il livello di storage del bucket non è standard, il test non riuscirà.
-
Eseguire il push dei file terraform sopra riportati nel repository di codici OCI. Utilizzeremo questo repository di codici con la nostra pipeline CI/CD.
Task 2: creare una pipeline di build DevOps OCI per la convalida della configurazione Terraform
Nel file build_spec.yaml
, i comandi terraform init
e terraform validate
vengono utilizzati per inizializzare Terraform e verificare che la configurazione sia valida. Quindi, il comando terraform test esegue i test configurati. Se i test terraform falliscono, anche il gasdotto fallirà.
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
Passi successivi
Abbiamo eseguito un test di asserzione semplice nella configurazione Terraform. È possibile eseguire diversi tipi di test, ad esempio test di integrazione, test unità, test end-to-end e così via. Per ulteriori informazioni, vedere Test Terraform.
Questa pipeline di convalida Terraform può essere integrata con la pipeline CI/CD dell'applicazione. La pipeline di convalida Terraform estrarrà gli artifact dalle fasi precedenti ed eseguirà il test della configurazione prima di implementare le modifiche.
Collegamenti correlati
conferme
- Autore - Nikhil Khandelwal (Enterprise Cloud Architect)
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.
Per la documentazione del prodotto, visita l'Oracle Help Center.
Build a Terraform Validation Pipeline using Terraform Test Framework and Oracle Cloud Infrastructure DevOps
F99874-01
June 2024