writing-skills
writing-skills
Use when creating new skills, editing existing skills, or verifying skills work before deployment
setting-up-terraformSet up Terraform infrastructure-as-code for cloud resources, including provider configuration, modules, state management, and CI integration.
Independent GitHub snapshot · Automated classification · Original documentation governs
Use this skill when the user asks to set up Terraform, infrastructure as code, cloud provisioning, or IaC.
Initialize the project structure
infra/
├── main.tf
├── variables.tf
├── outputs.tf
├── terraform.tfvars # (gitignored)
├── providers.tf
└── modules/
Configure the provider — in providers.tf:
terraform {
required_version = ">= 1.5"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
backend "s3" {
bucket = "my-terraform-state"
key = "prod/terraform.tfstate"
region = "us-east-1"
}
}
provider "aws" {
region = var.aws_region
}
Adapt the provider for the user's cloud (AWS, GCP, Azure).
Define variables — in variables.tf, define inputs with types, descriptions, and defaults:
variable "aws_region" {
type = string
default = "us-east-1"
description = "AWS region for resources"
}
variable "environment" {
type = string
description = "Deployment environment (dev, staging, prod)"
}
Create resources — in main.tf, define the infrastructure the user needs (VPC, RDS, ECS, S3, Lambda, etc.). Extract reusable patterns into modules under modules/.
Configure remote state — use an S3 bucket (AWS), GCS bucket (GCP), or Azure Storage for state. Enable state locking with DynamoDB (AWS).
Add to .gitignore
*.tfstate
*.tfstate.*
.terraform/
terraform.tfvars
*.tfvars
Add CI pipeline — create a GitHub Actions workflow that runs terraform fmt -check, terraform validate, and terraform plan on PRs, with terraform apply on merge to main (with approval gate).
.tfvars with secrets.terraform fmt before committing.