Nota

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.

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

Prerequisiti

Task 1: Scrivi test Terraform per convalidare la creazione delle risorse

  1. 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
    }
    
  2. 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"}
    
  3. 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.

  4. Creare un file di test Terraform nella directory tests. Ecco un esempio della struttura di directory:

    ├── main.tf 
    └── tests 
    └── test.tftest.hcl
    
  5. 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à.

  6. 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.

conferme

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.