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:
terraform validate
terraform validate
terraform validate
és una eina integrada en Terraform que comprova la sintaxi i la validesa de les configuracions de Terraform.
terraform plan
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.
terratest
terratest
Terratest és una biblioteca de proves en Go que permet escriure proves automatitzades per a la infraestructura de Terraform.
kitchen-terraform
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
-
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
-
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) }
-
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
-
Instal·lació de Kitchen-Terraform Afegeix Kitchen-Terraform al teu projecte.
gem install kitchen-terraform
-
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"
-
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
-
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
-
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 }
-
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) }
-
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.
Curs de Terraform
Mòdul 1: Introducció a Terraform
- Què és Terraform?
- Instal·lant Terraform
- Conceptes bàsics de Terraform
- Primera configuració de Terraform
Mòdul 2: Llenguatge de configuració de Terraform
Mòdul 3: Gestió de l'estat
Mòdul 4: Mòduls de Terraform
Mòdul 5: Proveïment de recursos
- Conceptes bàsics de proveïment
- Proveïment de recursos AWS
- Proveïment de recursos Azure
- Proveïment de recursos GCP
Mòdul 6: Funcionalitats avançades de Terraform
Mòdul 7: Millors pràctiques de Terraform
- Organització del codi
- Control de versions
- Proves del codi de Terraform
- Millors pràctiques de seguretat
Mòdul 8: Terraform en CI/CD
- Integració de Terraform amb CI/CD
- Automatització de Terraform amb Jenkins
- Ús de Terraform amb GitHub Actions
- Terraform Cloud i Enterprise