En aquesta secció, aprendrem els conceptes fonamentals de Terraform, una eina d'infraestructura com a codi (IaC) que permet definir i proporcionar infraestructura a través de fitxers de configuració. Aquests conceptes són essencials per comprendre com funciona Terraform i com utilitzar-lo de manera efectiva.
- Què és Terraform?
Terraform és una eina de codi obert desenvolupada per HashiCorp que permet definir, proporcionar i gestionar la infraestructura a través de fitxers de configuració. Utilitza un llenguatge de configuració anomenat HCL (HashiCorp Configuration Language) per descriure els recursos d'infraestructura.
Característiques clau de Terraform:
- Declaratiu: Especifica l'estat desitjat de la infraestructura, i Terraform s'encarrega de fer els canvis necessaris per aconseguir aquest estat.
- Proveïdors: Suporta una àmplia gamma de proveïdors de serveis en el núvol, com AWS, Azure, GCP, i molts altres.
- Infraestructura com a codi: Permet versionar i gestionar la infraestructura de la mateixa manera que el codi de programari.
- Planificació i aplicació: Proporciona una vista prèvia dels canvis abans d'aplicar-los, permetent una gestió més segura i controlada.
- Components principals de Terraform
2.1. Fitxers de configuració
Els fitxers de configuració de Terraform tenen l'extensió .tf
i contenen la definició de la infraestructura. Aquests fitxers es poden versionar i compartir.
2.2. Proveïdors
Els proveïdors són responsables de la interacció amb les API dels serveis en el núvol. Cada proveïdor té els seus propis recursos i dades que es poden gestionar amb Terraform.
2.3. Recursos
Els recursos són els components bàsics de la infraestructura, com instàncies de màquines virtuals, xarxes, bases de dades, etc. Cada recurs té un tipus i un conjunt d'atributs.
2.4. Estat
Terraform manté un fitxer d'estat que registra l'estat actual de la infraestructura. Aquest fitxer és essencial per a la planificació i aplicació de canvis.
- Flux de treball de Terraform
El flux de treball típic de Terraform inclou els següents passos:
- Escriure la configuració: Crear fitxers
.tf
que defineixin la infraestructura desitjada. - Inicialitzar el directori: Executar
terraform init
per inicialitzar el directori de treball i descarregar els proveïdors necessaris. - Planificar els canvis: Executar
terraform plan
per veure una vista prèvia dels canvis que es faran a la infraestructura. - Aplicar els canvis: Executar
terraform apply
per aplicar els canvis i provisionar la infraestructura. - Gestionar l'estat: Utilitzar
terraform state
per gestionar el fitxer d'estat.
- Exemple pràctic
A continuació, veurem un exemple pràctic de configuració de Terraform per crear una instància d'EC2 a AWS.
4.1. Fitxer de configuració
provider "aws" { region = "us-west-2" } resource "aws_instance" "example" { ami = "ami-0c55b159cbfafe1f0" instance_type = "t2.micro" tags = { Name = "example-instance" } }
4.2. Explicació del codi
- Proveïdor AWS: Especifica que utilitzarem AWS com a proveïdor i la regió
us-west-2
. - Recurs aws_instance: Defineix una instància d'EC2 amb l'AMI
ami-0c55b159cbfafe1f0
i el tipus d'instànciat2.micro
. També afegeix una etiqueta amb el nomexample-instance
.
4.3. Passos per executar
-
Inicialitzar el directori:
terraform init
-
Planificar els canvis:
terraform plan
-
Aplicar els canvis:
terraform apply
-
Destruir la infraestructura (opcional):
terraform destroy
- Exercicis pràctics
Exercici 1: Crear una instància d'EC2
-
Escriu una configuració de Terraform per crear una instància d'EC2 a AWS amb les següents especificacions:
- AMI:
ami-0c55b159cbfafe1f0
- Tipus d'instància:
t2.micro
- Etiqueta:
Name = "my-instance"
- AMI:
-
Inicialitza el directori, planifica els canvis i aplica'ls.
Solució:
provider "aws" { region = "us-west-2" } resource "aws_instance" "my_instance" { ami = "ami-0c55b159cbfafe1f0" instance_type = "t2.micro" tags = { Name = "my-instance" } }
Exercici 2: Afegir un grup de seguretat
- Modifica la configuració anterior per afegir un grup de seguretat que permeti el trànsit HTTP (port 80) i SSH (port 22).
Solució:
provider "aws" { region = "us-west-2" } resource "aws_security_group" "my_sg" { name = "my-security-group" description = "Allow HTTP and SSH" ingress { from_port = 80 to_port = 80 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } ingress { from_port = 22 to_port = 22 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } } resource "aws_instance" "my_instance" { ami = "ami-0c55b159cbfafe1f0" instance_type = "t2.micro" security_groups = [aws_security_group.my_sg.name] tags = { Name = "my-instance" } }
Conclusió
En aquesta secció, hem après els conceptes bàsics de Terraform, incloent-hi els components principals, el flux de treball típic i hem vist un exemple pràctic de configuració. Aquests fonaments són essencials per avançar en l'ús de Terraform i gestionar la infraestructura de manera eficient. En la següent secció, explorarem la sintaxi HCL en detall.
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