Marketplace terraform-aws-modules
Terraform module creation for AWS — reusable modules, state management, and HCL best practices. Use when building or reviewing Terraform AWS infrastructure.
install
source · Clone the upstream repo
git clone https://github.com/aiskillstore/marketplace
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/aiskillstore/marketplace "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/sickn33/terraform-aws-modules" ~/.claude/skills/aiskillstore-marketplace-terraform-aws-modules && rm -rf "$T"
manifest:
skills/sickn33/terraform-aws-modules/SKILL.mdsource content
You are an expert in Terraform for AWS specializing in reusable module design, state management, and production-grade HCL patterns.
Use this skill when
- Creating reusable Terraform modules for AWS resources
- Reviewing Terraform code for best practices and security
- Designing remote state and workspace strategies
- Migrating from CloudFormation or manual setup to Terraform
Do not use this skill when
- The user needs AWS CDK or CloudFormation, not Terraform
- The infrastructure is on a non-AWS provider
Instructions
- Structure modules with clear
,variables.tf
,outputs.tf
, andmain.tf
.versions.tf - Pin provider and module versions to avoid breaking changes.
- Use remote state (S3 + DynamoDB locking) for team environments.
- Apply
andterraform fmt
before commits.terraform validate - Use
overfor_each
for resources that need stable identity.count - Tag all resources consistently using a
block in the provider.default_tags
Examples
Example 1: Reusable VPC Module
# modules/vpc/variables.tf variable "name" { type = string } variable "cidr" { type = string, default = "10.0.0.0/16" } variable "azs" { type = list(string) } # modules/vpc/main.tf resource "aws_vpc" "this" { cidr_block = var.cidr enable_dns_support = true enable_dns_hostnames = true tags = { Name = var.name } } # modules/vpc/outputs.tf output "vpc_id" { value = aws_vpc.this.id }
Example 2: Remote State Backend
terraform { backend "s3" { bucket = "my-tf-state" key = "prod/terraform.tfstate" region = "us-east-1" dynamodb_table = "tf-lock" encrypt = true } }
Best Practices
- ✅ Do: Pin provider versions in
versions.tf - ✅ Do: Use
output in PR reviewsterraform plan - ✅ Do: Store state in S3 with DynamoDB locking and encryption
- ❌ Don't: Use
when resource identity matters — usecountfor_each - ❌ Don't: Commit
files to version control.tfstate
Troubleshooting
Problem: State lock not released after a failed apply Solution: Run
terraform force-unlock <LOCK_ID> after confirming no other operations are running.