En aquest tema, explorarem el concepte de l'estat en Terraform, per què és important i com es gestiona. L'estat és una part fonamental de Terraform, ja que permet a Terraform saber què ha creat, modificar-ho i eliminar-ho de manera eficient.
Què és l'estat en Terraform?
L'estat en Terraform és un fitxer que manté un registre de la infraestructura que Terraform ha creat. Aquest fitxer d'estat conté informació sobre els recursos provisionats, incloent-hi els seus atributs i metadades. L'estat permet a Terraform:
- Saber què ha creat: Terraform utilitza l'estat per mantenir un registre dels recursos que ha creat en el passat.
- Detectar canvis: Comparant l'estat actual amb la configuració desitjada, Terraform pot determinar quins canvis són necessaris.
- Optimitzar operacions: L'estat permet a Terraform aplicar només els canvis necessaris, en lloc de recrear tota la infraestructura.
Per què és important l'estat?
L'estat és crucial per diverses raons:
- Seguiment de recursos: Sense l'estat, Terraform no podria saber quins recursos ja existeixen i quins necessiten ser creats, modificats o eliminats.
- Optimització de canvis: L'estat permet a Terraform aplicar canvis de manera incremental, evitant la recreació innecessària de recursos.
- Col·laboració: L'estat pot ser compartit entre diferents membres de l'equip, permetent una col·laboració eficient en la gestió de la infraestructura.
Estructura del fitxer d'estat
El fitxer d'estat de Terraform és un fitxer JSON que conté diverses seccions clau:
- Version: La versió del fitxer d'estat.
- Terraform_version: La versió de Terraform que va crear l'estat.
- Resources: Una llista de recursos gestionats per Terraform, incloent-hi els seus atributs i metadades.
Exemple de fitxer d'estat
{ "version": 4, "terraform_version": "1.0.0", "resources": [ { "module": "module.vpc", "mode": "managed", "type": "aws_vpc", "name": "main", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "id": "vpc-12345678", "cidr_block": "10.0.0.0/16", "tags": { "Name": "main-vpc" } } } ] } ] }
Com es gestiona l'estat?
Fitxers d'estat locals
Per defecte, Terraform guarda l'estat en un fitxer local anomenat terraform.tfstate
. Aquest fitxer es crea a la mateixa carpeta on s'executa Terraform.
Estat remot
Per a equips que treballen col·laborativament, és recomanable utilitzar un backend remot per emmagatzemar l'estat. Alguns backends comuns inclouen:
- Amazon S3: Per emmagatzemar l'estat en un bucket S3.
- Azure Blob Storage: Per emmagatzemar l'estat en un contenidor de blobs.
- Google Cloud Storage: Per emmagatzemar l'estat en un bucket de GCS.
- Terraform Cloud: Un servei gestionat per HashiCorp per emmagatzemar l'estat i proporcionar funcionalitats addicionals.
Configuració d'un backend remot
A continuació es mostra un exemple de configuració per emmagatzemar l'estat en un bucket S3:
terraform { backend "s3" { bucket = "my-terraform-state" key = "path/to/my/key" region = "us-west-2" } }
Exercici pràctic
Objectiu
Configurar un backend remot per emmagatzemar l'estat en un bucket S3.
Passos
- Crear un bucket S3: Utilitza la consola d'AWS per crear un bucket S3 anomenat
my-terraform-state
. - Configurar el backend: Afegeix la següent configuració al teu fitxer
main.tf
:
terraform { backend "s3" { bucket = "my-terraform-state" key = "path/to/my/key" region = "us-west-2" } }
- Inicialitzar Terraform: Executa
terraform init
per inicialitzar la configuració del backend remot.
Solució
terraform { backend "s3" { bucket = "my-terraform-state" key = "path/to/my/key" region = "us-west-2" } }
Executa terraform init
per inicialitzar la configuració del backend remot.
Resum
En aquest tema, hem après què és l'estat en Terraform, per què és important i com es gestiona. Hem vist com es pot emmagatzemar l'estat localment i remotament, i hem configurat un backend remot per emmagatzemar l'estat en un bucket S3. L'estat és una part fonamental de Terraform que permet una gestió eficient i col·laborativa de la infraestructura.
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