En este tema, aprenderemos sobre los bloques de recursos y datos en Terraform, que son componentes fundamentales para definir y gestionar la infraestructura. Los recursos representan los componentes de infraestructura que deseas crear, mientras que los bloques de datos permiten obtener información de la infraestructura existente.

Conceptos Clave

Recursos

  • Definición: Un recurso en Terraform es un bloque de configuración que describe un componente de infraestructura, como una instancia de EC2 en AWS, una base de datos en Azure, o una máquina virtual en GCP.
  • Sintaxis: Los recursos se definen utilizando el bloque resource, seguido del tipo de recurso y un nombre de recurso.

Bloques de Datos

  • Definición: Los bloques de datos permiten obtener información de la infraestructura existente sin crear ni modificar recursos. Son útiles para obtener detalles sobre recursos que ya existen y que pueden ser utilizados en otras configuraciones.
  • Sintaxis: Los bloques de datos se definen utilizando el bloque data, seguido del tipo de recurso y un nombre de recurso.

Ejemplos Prácticos

Ejemplo de un Bloque de Recurso

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

  tags = {
    Name = "ExampleInstance"
  }
}

Explicación:

  • resource "aws_instance" "example": Define un recurso de tipo aws_instance con el nombre example.
  • ami: Especifica la ID de la imagen de máquina de Amazon (AMI) que se utilizará para lanzar la instancia.
  • instance_type: Define el tipo de instancia (en este caso, t2.micro).
  • tags: Añade etiquetas a la instancia, en este caso, una etiqueta con el nombre ExampleInstance.

Ejemplo de un Bloque de Datos

data "aws_ami" "example" {
  most_recent = true

  filter {
    name   = "name"
    values = ["amzn2-ami-hvm-*-x86_64-gp2"]
  }

  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }

  owners = ["amazon"]
}

Explicación:

  • data "aws_ami" "example": Define un bloque de datos para obtener información sobre una AMI de AWS con el nombre example.
  • most_recent: Indica que se debe obtener la AMI más reciente que coincida con los filtros.
  • filter: Define filtros para buscar la AMI. En este caso, se buscan AMIs cuyo nombre coincida con amzn2-ami-hvm-*-x86_64-gp2 y que tengan el tipo de virtualización hvm.
  • owners: Especifica que la AMI debe ser propiedad de Amazon.

Ejercicio Práctico

Ejercicio 1: Crear un Recurso de S3 en AWS

Objetivo: Crear un bucket de S3 en AWS utilizando un bloque de recurso.

Instrucciones:

  1. Define un recurso de tipo aws_s3_bucket.
  2. Asigna un nombre único al bucket.
  3. Añade una etiqueta al bucket.

Código:

resource "aws_s3_bucket" "example_bucket" {
  bucket = "my-unique-bucket-name"
  
  tags = {
    Name = "ExampleBucket"
  }
}

Ejercicio 2: Obtener Información de una VPC Existente

Objetivo: Utilizar un bloque de datos para obtener información sobre una VPC existente en AWS.

Instrucciones:

  1. Define un bloque de datos de tipo aws_vpc.
  2. Filtra la VPC por su ID.

Código:

data "aws_vpc" "example_vpc" {
  filter {
    name   = "vpc-id"
    values = ["vpc-12345678"]
  }
}

Soluciones

Solución al Ejercicio 1

resource "aws_s3_bucket" "example_bucket" {
  bucket = "my-unique-bucket-name"
  
  tags = {
    Name = "ExampleBucket"
  }
}

Solución al Ejercicio 2

data "aws_vpc" "example_vpc" {
  filter {
    name   = "vpc-id"
    values = ["vpc-12345678"]
  }
}

Resumen

En esta sección, hemos aprendido sobre los bloques de recursos y datos en Terraform. Los recursos se utilizan para definir y gestionar componentes de infraestructura, mientras que los bloques de datos permiten obtener información sobre la infraestructura existente. Hemos visto ejemplos prácticos y realizado ejercicios para reforzar estos conceptos. En el próximo módulo, exploraremos más a fondo la sintaxis de HCL y cómo utilizar variables y salidas en Terraform.

© Copyright 2024. Todos los derechos reservados