Terraform Skill
Provides comprehensive Terraform infrastructure as code capabilities for the Golden Armada AI Agent Fleet Platform.
When to Use This Skill
Activate this skill when working with:
- Infrastructure provisioning
- Terraform modules and configurations
- State management
- Cloud resource definitions
- Multi-environment deployments
Quick Reference
Common Commands
# Initialize
terraform init terraform init -upgrade
# Plan
terraform plan terraform plan -out=tfplan terraform plan -var="environment=prod"
# Apply
terraform apply terraform apply tfplan terraform apply -auto-approve
# Destroy
terraform destroy terraform destroy -target=aws_instance.example
# State
terraform state list terraform state show terraform state mv terraform state rm
# Workspace
terraform workspace list terraform workspace new dev terraform workspace select prod
# Format/Validate
terraform fmt -recursive terraform validate ```
## Project Structure
Provider Configuration
# versions.tf
terraform {required_version = ">= 1.0.0"
required_providers {aws = {source = "hashicorp/aws" version = "> 5.0"} kubernetes = {source = "hashicorp/kubernetes" version = "> 2.0"}}
backend "s3" {bucket = "golden-armada-terraform-state" key = "state/terraform.tfstate" region = "us-west-2" encrypt = true dynamodb_table = "terraform-locks"}}
# providers.tf
provider "aws" {region = var.aws_region
default_tags {tags = {Project = "golden-armada" Environment = var.environment ManagedBy = "terraform"}}} ```
## Variables
variables.tf
variable "environment" {description = "Environment name" type = string validation {condition = contains(["dev", "staging", "prod"], var.environment) error_message = "Environment must be dev, staging, or prod."}}
variable "instance_count" {description = "Number of instances" type = number default = 2}
variable "tags" {description = "Resource tags" type = map(string) default = {}}
terraform.tfvars
environment = "dev" instance_count = 2 ```
Module Example
# modules/eks-cluster/main.tf
resource "aws_eks_cluster" "main" {name = "${var.project}-${var.environment}" role_arn = aws_iam_role.cluster.arn version = var.kubernetes_version
vpc_config {subnet_ids = var.subnet_ids endpoint_private_access = true endpoint_public_access = var.public_access}
tags = var.tags}
# modules/eks-cluster/variables.tf
variable "project" {type = string}
variable "environment" {type = string}
variable "kubernetes_version" {type = string default = "1.28"}
# Usage
module "eks" {source = "./modules/eks-cluster"
project = "golden-armada" environment = var.environment subnet_ids = module.vpc.private_subnets kubernetes_version = "1.28" tags = local.tags} ```
## Best Practices
1. **State Management**: Use remote state with locking
2. **Modules**: Create reusable modules for common patterns
3. **Workspaces**: Separate environments using workspaces
4. **Variables**: Use tfvars files per environment
5. **Outputs**: Export important values for other modules
6. **Tagging**: Apply consistent tags to all resources