Introducció

El llenguatge de configuració de HashiCorp (HCL) és un llenguatge de domini específic utilitzat per definir la infraestructura com a codi en Terraform. HCL és dissenyat per ser fàcilment llegible per humans i, al mateix temps, poder ser processat per màquines. En aquest tema, explorarem la sintaxi bàsica de HCL, incloent-hi blocs, atributs, tipus de dades i expressions.

Conceptes Clau

Blocs

Els blocs són les unitats fonamentals de la configuració en HCL. Cada bloc comença amb un tipus de bloc seguit d'un nom opcional i un conjunt d'atributs entre claus {}.

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
}

Atributs

Els atributs són parelles clau-valor dins d'un bloc. Cada atribut defineix una propietat del bloc.

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
}

Tipus de Dades

HCL suporta diversos tipus de dades, incloent-hi cadenes, nombres, booleans, llistes, mapes i objectes.

  • Cadenes: Es defineixen entre cometes dobles ".

    name = "example"
    
  • Nombres: Es defineixen sense cometes.

    count = 3
    
  • Booleans: Es defineixen com true o false.

    enabled = true
    
  • Llistes: Es defineixen entre claudàtors [].

    tags = ["web", "dev"]
    
  • Mapes: Es defineixen entre claus {} amb parelles clau-valor.

    metadata = {
      owner = "admin"
      environment = "production"
    }
    

Expressions

Les expressions en HCL permeten realitzar operacions i referències dins de la configuració.

  • Interpolació de cadenes: Utilitza ${} per inserir valors dins de cadenes.

    description = "Instance ID: ${aws_instance.example.id}"
    
  • Operadors: HCL suporta operadors aritmètics (+, -, *, /), lògics (&&, ||, !) i de comparació (==, !=, >, <, >=, <=).

    count = var.instance_count > 5 ? 5 : var.instance_count
    

Exemples Pràctics

Exemple 1: Definició d'un recurs AWS S3 Bucket

resource "aws_s3_bucket" "example" {
  bucket = "my-unique-bucket-name"
  acl    = "private"

  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }
}

Exemple 2: Utilització de Variables i Sortides

variable "region" {
  description = "The AWS region to deploy in"
  type        = string
  default     = "us-west-2"
}

output "bucket_arn" {
  value = aws_s3_bucket.example.arn
}

Exercicis Pràctics

Exercici 1: Crear un recurs AWS EC2

  1. Defineix un recurs aws_instance amb els següents atributs:

    • ami: Utilitza l'AMI ami-0c55b159cbfafe1f0.
    • instance_type: Utilitza t2.micro.
  2. Afegeix una etiqueta (tag) amb el nom Name i el valor MyInstance.

Solució

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  tags = {
    Name = "MyInstance"
  }
}

Exercici 2: Definir una variable i una sortida

  1. Defineix una variable instance_count amb un valor per defecte de 2.
  2. Defineix una sortida instance_id que mostri l'ID de la instància EC2 creada.

Solució

variable "instance_count" {
  description = "Number of instances to create"
  type        = number
  default     = 2
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  count         = var.instance_count

  tags = {
    Name = "MyInstance"
  }
}

output "instance_id" {
  value = aws_instance.example.*.id
}

Resum

En aquesta secció, hem après els conceptes bàsics de la sintaxi HCL, incloent-hi blocs, atributs, tipus de dades i expressions. També hem vist exemples pràctics i hem realitzat exercicis per reforçar els conceptes apresos. Amb aquests coneixements, estàs preparat per avançar en la configuració de la teva infraestructura amb Terraform.

© Copyright 2024. Tots els drets reservats