Agent Skills: Terraform Workspace Skill

Terraform workspace management for multi-environment deployments

terraformworkspace-managementmulti-environmentinfrastructure-as-codedeployment
infrastructureID: pluginagentmarketplace/custom-plugin-terraform/terraform-workspace

Skill Files

Browse the full folder contents for terraform-workspace.

Download Skill

Loading file tree…

skills/terraform-workspace/SKILL.md

Skill Metadata

Name
terraform-workspace
Description
Terraform workspace management for multi-environment deployments

Terraform Workspace Skill

Manage multiple environments with Terraform workspaces.

Workspace Commands

# List workspaces
terraform workspace list

# Create workspace
terraform workspace new dev
terraform workspace new staging
terraform workspace new prod

# Switch workspace
terraform workspace select prod

# Show current
terraform workspace show

# Delete workspace
terraform workspace delete dev

Configuration Patterns

Environment-Specific Variables

locals {
  env_config = {
    dev = {
      instance_type = "t3.micro"
      min_size      = 1
      max_size      = 2
    }
    staging = {
      instance_type = "t3.small"
      min_size      = 2
      max_size      = 4
    }
    prod = {
      instance_type = "t3.medium"
      min_size      = 3
      max_size      = 10
    }
  }

  config = local.env_config[terraform.workspace]
}

resource "aws_autoscaling_group" "app" {
  min_size = local.config.min_size
  max_size = local.config.max_size
  # ...
}

Workspace-Aware Naming

locals {
  name_prefix = "${var.project}-${terraform.workspace}"
}

resource "aws_vpc" "main" {
  cidr_block = var.vpc_cidr

  tags = {
    Name        = "${local.name_prefix}-vpc"
    Environment = terraform.workspace
  }
}

Conditional Resources

resource "aws_cloudwatch_alarm" "cpu" {
  count = terraform.workspace == "prod" ? 1 : 0

  alarm_name = "${local.name_prefix}-cpu-alarm"
  # ...
}

resource "aws_db_instance" "main" {
  multi_az            = terraform.workspace == "prod"
  deletion_protection = terraform.workspace == "prod"
  # ...
}

Backend Configuration

S3 with Workspace Prefix

terraform {
  backend "s3" {
    bucket               = "company-terraform-state"
    key                  = "app/terraform.tfstate"
    region               = "us-east-1"
    workspace_key_prefix = "workspaces"
    dynamodb_table       = "terraform-locks"
  }
}
# State paths:
# - workspaces/dev/app/terraform.tfstate
# - workspaces/prod/app/terraform.tfstate

Directory-Based Alternative

infrastructure/
├── modules/
│   └── app/
├── environments/
│   ├── dev/
│   │   ├── main.tf
│   │   ├── backend.tf
│   │   └── terraform.tfvars
│   ├── staging/
│   │   └── ...
│   └── prod/
│       └── ...
# environments/prod/main.tf
module "app" {
  source = "../../modules/app"

  environment   = "prod"
  instance_type = "t3.medium"
  min_size      = 3
}

Best Practices

| Approach | Use Case | Pros | Cons | |----------|----------|------|------| | Workspaces | Simple environments | Single codebase | Same config | | Directories | Complex differences | Full customization | Code duplication | | Hybrid | Mixed needs | Flexible | More complexity |

Troubleshooting

| Error | Cause | Solution | |-------|-------|----------| | Workspace not found | Not created | terraform workspace new | | State mismatch | Wrong workspace | Check terraform workspace show | | Cannot delete | Has resources | Destroy first or use -force |

Usage

Skill("terraform-workspace")

Related

  • Agent: 03-terraform-state (SECONDARY_BOND)
  • Skill: terraform-state (PRIMARY on same agent)