Skip to content

jpiedramacas/terraform-workspace.tf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 

Repository files navigation

Práctica Avanzada de Terraform: Trabajar con Múltiples Workspaces en AWS

Introducción

En esta práctica avanzada, aprenderás a trabajar con múltiples workspaces de Terraform en AWS. Los workspaces de Terraform permiten gestionar diferentes entornos (como desarrollo, prueba y producción) dentro de la misma configuración de Terraform. Esto facilita la administración de recursos aislados por entorno sin duplicar archivos de configuración.

Requisitos Previos

  1. Cuenta de AWS: Necesitas una cuenta de AWS con permisos adecuados para crear y gestionar recursos.
  2. AWS CLI: Asegúrate de tener la AWS CLI instalada y configurada.
  3. Terraform: Asegúrate de tener Terraform instalado en tu máquina.

Sección 1: Trabajar con Múltiples Terraform Workspaces en AWS

Paso 1: Configuración Inicial

  1. Instalar Terraform: Asegúrate de tener Terraform instalado. Puedes descargarlo desde aquí.

  2. Configurar AWS CLI: Configura la AWS CLI con las credenciales adecuadas usando el comando aws configure.

  3. Crear un Directorio de Trabajo: Crea un nuevo directorio para tu proyecto Terraform.

    mkdir terraform-multiple-workspaces
    cd terraform-multiple-workspaces

Paso 2: Definir la Configuración de Terraform

  1. Crear un archivo de configuración principal (main.tf):

    provider "aws" {
      region = "us-east-1"
    }
    
    locals {
      environment   = terraform.workspace
      bucket_name   = terraform.workspace == "prod" ? "prod-example-bucket" : "dev-example-bucket"
      instance_type = terraform.workspace == "prod" ? "t2.small" : "t2.micro"
    }
    
    resource "aws_instance" "example" {
      ami           = "ami-01b799c439fd5516a" # Amazon Linux 2 AMI
      instance_type = local.instance_type
    
      tags = {
        Name        = "${local.environment}-example-instance"
        Environment = local.environment
      }
    }
  2. Inicializar Terraform:

    terraform init

Paso 3: Crear y Cambiar entre Workspaces

  1. Listar Workspaces Disponibles:

    terraform workspace list
  2. Crear un Nuevo Workspace:

    terraform workspace new development
  3. Cambiar a un Workspace Existente:

    terraform workspace select default

Paso 4: Desplegar Recursos en Diferentes Workspaces

  1. Aplicar Configuración en el Workspace development:

    terraform workspace select development
    terraform apply -auto-approve

    Verifica los recursos creados en la consola de AWS, asegurándote de que una instancia EC2 t2.micro esté presente.

  2. Aplicar Configuración en el Workspace prod:

    terraform workspace select prod
    terraform apply -auto-approve

    Verifica los recursos creados en la consola de AWS, asegurándote de que una instancia EC2 t2.small esté presente.

Paso 5: Administrar Workspaces

Renombrar un Workspace

Terraform no tiene un comando directo para renombrar workspaces, pero puedes lograrlo siguiendo estos pasos:

  1. Selecciona el Workspace que quieres renombrar:

    terraform workspace select old-name
  2. Extrae el estado actual del workspace:

    terraform state pull >old-name.tfstate
  3. Crea un nuevo Workspace con el nuevo nombre:

    terraform workspace new new-name
  4. Empuja el estado al nuevo workspace:

    terraform state push old-name.tfstate
  5. Verifica el estado del nuevo workspace:

    terraform show
  6. Elimina el viejo workspace:

    terraform workspace delete -force old-name

Cada comando realiza lo siguiente:

  • terraform workspace select old-name: Cambia al workspace existente que deseas renombrar.
  • terraform state pull >old-name.tfstate: Descarga el estado actual del workspace en un archivo.
  • terraform workspace new new-name: Crea un nuevo workspace con el nombre deseado.
  • terraform state push old-name.tfstate: Sube el estado del viejo workspace al nuevo.
  • terraform show: Verifica que el estado en el nuevo workspace es correcto.
  • terraform workspace delete -force old-name: Elimina el viejo workspace.

Eliminar un Workspace

  1. Destruir Recursos en el Workspace: Antes de eliminar un workspace, debes destruir todos los recursos asociados con él para evitar problemas futuros.

    terraform workspace select development
    terraform destroy -auto-approve

    Esto destruirá todos los recursos creados en el workspace development.

  2. Eliminar el Workspace: Una vez que todos los recursos han sido destruidos, puedes proceder a eliminar el workspace.

    terraform workspace select default
    terraform workspace delete development

    Si intentas eliminar un workspace que todavía tiene recursos asociados, recibirás un error como el siguiente:

    Error: Workspace is not empty
    Workspace "development" is currently tracking the following resource instances:
      - aws_instance.example
    
    Deleting this workspace would cause Terraform to lose track of any associated remote objects, which would then require you to delete them manually outside of Terraform. You should destroy these objects with Terraform before deleting the workspace.
    
    If you want to delete this workspace anyway, and have Terraform forget about these managed objects, use the -force option to disable this safety check.
    

    Si estás seguro de que quieres eliminar el workspace y manejar manualmente cualquier recurso residual, puedes usar la opción -force:

    terraform workspace delete -force development

Paso 6: Limpieza de Recursos

  1. Destruir Recursos en un Workspace:

    terraform workspace select prod
    terraform destroy -auto-approve
  2. Eliminar todos los Workspaces:

    terraform workspace select default
    terraform workspace delete prod
    terraform workspace delete dev

Etiquetas de Recursos

  • Etiqueta Name:
    • En el workspace prod: prod-example-instance
    • En el workspace dev: dev-example-instance
  • Etiqueta Environment:
    • En ambos workspaces (prod y dev): El valor es el nombre del workspace (es decir, prod o dev).

About

Gestión diferentes entornos dentro de la misma configuración de Terraform.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages