En aquest tema, aprendrem com provar el codi de Terraform per assegurar-nos que les nostres configuracions són correctes i funcionen com s'espera. Les proves són una part essencial del desenvolupament d'infraestructura com a codi (IaC) per garantir la qualitat i la fiabilitat.

Objectius

  • Comprendre la importància de les proves en Terraform.
  • Aprendre a utilitzar eines i tècniques per provar el codi de Terraform.
  • Implementar proves unitàries i d'integració per a les configuracions de Terraform.

Importància de les proves en Terraform

Les proves en Terraform són crucials per diverses raons:

  • Validació de configuracions: Asseguren que les configuracions són correctes i compleixen amb els requisits.
  • Prevenció d'errors: Identifiquen errors abans de desplegar la infraestructura.
  • Mantenibilitat: Faciliten la modificació i l'actualització de la infraestructura amb confiança.
  • Documentació: Les proves actuen com una forma de documentació viva que descriu com ha de funcionar la infraestructura.

Eines per provar el codi de Terraform

Hi ha diverses eines que podem utilitzar per provar el codi de Terraform:

  1. terraform validate

terraform validate és una eina integrada en Terraform que comprova la sintaxi i la validesa de les configuracions de Terraform.

terraform validate

  1. terraform plan

terraform plan genera un pla d'execució que mostra els canvis que es faran a la infraestructura. Això ens permet revisar els canvis abans d'aplicar-los.

terraform plan

  1. terratest

Terratest és una biblioteca de proves en Go que permet escriure proves automatitzades per a la infraestructura de Terraform.

  1. kitchen-terraform

Kitchen-Terraform és una eina que integra Test Kitchen amb Terraform per permetre proves d'integració.

Proves unitàries amb Terratest

Terratest és una eina poderosa per escriure proves unitàries per a Terraform. A continuació, es mostra un exemple de com utilitzar Terratest per provar una configuració de Terraform.

Exemple de prova amb Terratest

  1. Instal·lació de Terratest Assegura't de tenir Go instal·lat i afegeix Terratest al teu projecte.

    go get github.com/gruntwork-io/terratest/modules/terraform
    
  2. Escriptura de la prova Crea un fitxer de prova en Go, per exemple main_test.go.

    package test
    
    import (
        "testing"
        "github.com/gruntwork-io/terratest/modules/terraform"
        "github.com/stretchr/testify/assert"
    )
    
    func TestTerraformBasicExample(t *testing.T) {
        opts := &terraform.Options{
            TerraformDir: "../path/to/terraform/code",
        }
    
        defer terraform.Destroy(t, opts)
        terraform.InitAndApply(t, opts)
    
        output := terraform.Output(t, opts, "example_output")
        assert.Equal(t, "expected_value", output)
    }
    
  3. Execució de la prova Executa la prova amb la comanda go test.

    go test -v
    

Proves d'integració amb Kitchen-Terraform

Kitchen-Terraform permet escriure proves d'integració per a Terraform. A continuació, es mostra un exemple de com utilitzar Kitchen-Terraform.

Exemple de prova amb Kitchen-Terraform

  1. Instal·lació de Kitchen-Terraform Afegeix Kitchen-Terraform al teu projecte.

    gem install kitchen-terraform
    
  2. Configuració de Kitchen Crea un fitxer .kitchen.yml amb la configuració de Kitchen.

    driver:
      name: terraform
    
    provisioner:
      name: terraform
    
    platforms:
      - name: ubuntu
    
    suites:
      - name: default
        verifier:
          name: inspec
        attributes:
          example_output: "expected_value"
    
  3. Escriptura de la prova Crea un fitxer de prova amb InSpec, per exemple test/integration/default/example_test.rb.

    describe attribute('example_output') do
      it { should eq 'expected_value' }
    end
    
  4. Execució de la prova Executa la prova amb la comanda kitchen test.

    kitchen test
    

Exercici pràctic

Objectiu

Crear una configuració de Terraform que desplegui una instància d'EC2 a AWS i escriure una prova amb Terratest per verificar que la instància s'ha creat correctament.

Passos

  1. Crear la configuració de Terraform Crea un fitxer main.tf amb la configuració següent:

    provider "aws" {
      region = "us-west-2"
    }
    
    resource "aws_instance" "example" {
      ami           = "ami-0c55b159cbfafe1f0"
      instance_type = "t2.micro"
    }
    
    output "instance_id" {
      value = aws_instance.example.id
    }
    
  2. Escriptura de la prova amb Terratest Crea un fitxer main_test.go amb la prova següent:

    package test
    
    import (
        "testing"
        "github.com/gruntwork-io/terratest/modules/terraform"
        "github.com/stretchr/testify/assert"
    )
    
    func TestTerraformAwsInstance(t *testing.T) {
        opts := &terraform.Options{
            TerraformDir: "../path/to/terraform/code",
        }
    
        defer terraform.Destroy(t, opts)
        terraform.InitAndApply(t, opts)
    
        instanceID := terraform.Output(t, opts, "instance_id")
        assert.NotEmpty(t, instanceID)
    }
    
  3. Execució de la prova Executa la prova amb la comanda go test.

    go test -v
    

Resum

En aquesta secció, hem après la importància de les proves en Terraform i hem explorat diverses eines i tècniques per provar el codi de Terraform. Hem vist exemples pràctics d'ús de terraform validate, terraform plan, Terratest i Kitchen-Terraform per assegurar-nos que les nostres configuracions són correctes i funcionen com s'espera. Les proves són una part essencial del desenvolupament d'infraestructura com a codi i ens ajuden a mantenir la qualitat i la fiabilitat de les nostres configuracions.

© Copyright 2024. Tots els drets reservats