Tutorial Completo sobre Dependencias en Terraform (2023)

En este tutorial exhaustivo, exploraremos a fondo las dependencias entre recursos y módulos en Terraform. Aunque Terraform generalmente infiere las dependencias entre recursos según la configuración proporcionada, en ocasiones no puede inferir estas dependencias, y es necesario crear una dependencia explícita mediante el argumento depends_on.

Requisitos para el Tutorial

Antes de comenzar, asegúrate de tener lo siguiente:

  • Terraform v1.2+ instalado localmente.
  • Una cuenta y organización en Terraform Cloud.
  • Terraform Cloud autenticado localmente.
  • AWS CLI instalado.
  • Configuración de variables en Terraform Cloud con las credenciales de AWS.

Configuración Inicial

Inicia la configuración ejecutando los siguientes comandos:

$ export TF_CLOUD_ORGANIZATION=TU_NOMBRE_DE_ORGANIZACIÓN
$ terraform init

Esto inicializará Terraform Cloud y configurará el espacio de trabajo learn-terraform-dependencies.

Manejo de Dependencias Implícitas

La forma más común de gestionar dependencias es a través de dependencias implícitas entre recursos o módulos. Revisemos la configuración en el archivo main.tf, que declara dos instancias EC2 y una dirección IP elástica.

provider "aws" {
  region = var.aws_region
}

data "aws_ami" "amazon_linux" {
  most_recent = true
  owners      = ["amazon"]
  filter {
    name   = "name"
    values = ["amzn2-ami-hvm-*-x86_64-gp2"]
  }
}

resource "aws_instance" "example_a" {
  ami           = data.aws_ami.amazon_linux.id
  instance_type = "t2.micro"
}

resource "aws_instance" "example_b" {
  ami           = data.aws_ami.amazon_linux.id
  instance_type = "t2.micro"
}

resource "aws_eip" "ip" {
  vpc      = true
  instance = aws_instance.example_a.id
}

La creación de la dirección IP elástica depende de la existencia de la instancia EC2 example_a. Al aplicar la configuración, Terraform espera hasta que la instancia example_a se haya creado antes de crear la dirección IP elástica.

$ terraform apply

Terraform, al inferir las dependencias implícitas a través de las expresiones de interpolación, asegura el orden correcto de creación de los recursos.

Gestionar Dependencias Explícitas

En algunos casos, puede haber dependencias no visibles para Terraform. El argumento depends_on se utiliza para declarar dependencias explícitas. Supongamos que tienes una aplicación en la instancia EC2 example_c que depende de un bucket específico de Amazon S3, y esta dependencia no es visible para Terraform.

resource "aws_s3_bucket" "example" {}

resource "aws_instance" "example_c" {
  ami           = data.aws_ami.amazon_linux.id
  instance_type = "t2.micro"
  depends_on    = [aws_s3_bucket.example]
}

module "example_sqs_queue" {
  source     = "terraform-aws-modules/sqs/aws"
  version    = "3.3.0"
  depends_on = [aws_s3_bucket.example, aws_instance.example_c]
}

En este ejemplo, la creación de la instancia EC2 example_c y la cola SQS en el módulo dependen explícitamente de la creación del bucket S3. Terraform espera a que el bucket se cree antes de comenzar con la creación de los otros recursos.

Conclusiones y Limpieza

Este tutorial abordó cómo gestionar tanto dependencias implícitas como explícitas en Terraform. Comprendimos cómo Terraform utiliza la información de dependencias para determinar el orden correcto de creación de los recursos.

Recuerda limpiar tus recursos después de realizar pruebas o experimentos ejecutando:

$ terraform destroy

Este tutorial proporciona una base sólida para entender y manejar las dependencias en Terraform. Explora más sobre el tema en la documentación oficial de Terraform y profundiza en cómo Terraform utiliza el grafo de dependencias para gestionar la infraestructura.

Con este conocimiento, estarás mejor preparado para gestionar dependencias en entornos más complejos y optimizar tus flujos de trabajo con Terraform. ¡Explora, experimenta y domina Terraform para una administración de infraestructura eficiente!

References

Top Articles
Latest Posts
Article information

Author: Rev. Porsche Oberbrunner

Last Updated: 10/08/2023

Views: 5751

Rating: 4.2 / 5 (53 voted)

Reviews: 84% of readers found this page helpful

Author information

Name: Rev. Porsche Oberbrunner

Birthday: 1994-06-25

Address: Suite 153 582 Lubowitz Walks, Port Alfredoborough, IN 72879-2838

Phone: +128413562823324

Job: IT Strategist

Hobby: Video gaming, Basketball, Web surfing, Book restoration, Jogging, Shooting, Fishing

Introduction: My name is Rev. Porsche Oberbrunner, I am a zany, graceful, talented, witty, determined, shiny, enchanting person who loves writing and wants to share my knowledge and understanding with you.