terraform

star 31

This skill should be used when writing or reviewing Terraform code, or when the project uses "Terraform", "HCL", "tfvars", "aws_iam_role", "data sources", or infrastructure-as-code patterns. Provides Terraform coding conventions, patterns, and best practices. Project-specific conventions always take priority.

sorah By sorah schedule Updated 2/22/2026

name: terraform description: This skill should be used when writing or reviewing Terraform code, or when the project uses "Terraform", "HCL", "tfvars", "aws_iam_role", "data sources", or infrastructure-as-code patterns. Provides Terraform coding conventions, patterns, and best practices. Project-specific conventions always take priority. version: 0.1.0

Terraform Conventions

Coding conventions and best practices for Terraform projects. Project-specific conventions (CLAUDE.md, style guides) always take priority over this guidance.

General Conventions

  • Prefer data sources over hardcoded values (e.g., data.aws_region.current, data.aws_caller_identity.current)
  • Use locals for computed values and merging configuration
  • Use jsonencode to compose JSON objects instead of raw string literals

Resource Naming

  • Use snake_case for all resource names and variables, with exceptions:
    • Resource name in Terraform should match the actual resource name in the provider (e.g., when name = "FooBar", use resource "..." "FooBar")
  • IAM role and policy names use PascalCase (e.g., Ec2Bastion, EcsApp)
  • Use hyphenated lowercase for resource identifiers (e.g., ec2-default, dns-cache)

File Organization

Standard file structure per Terraform directory:

  • aws.tf — AWS provider configuration with standard data sources (data.aws_region.current, data.aws_caller_identity.current, data.aws_default_tags.current)
  • backend.tf — S3 backend configuration
  • versions.tf — Provider version constraints
  • Resource-specific files: vpc.tf, sg.tf, route53.tf, iam.tf, etc.
  • Multiple IAM files when needed: iam_lambda.tf, iam_states.tf, iam_ec2_default.tf
  • outputs.tf — Output definitions (when needed)
  • locals.tf — Local values (when needed)

Variable Definitions

  • Always specify type for variables
  • Use default = {} for optional map variables
  • Group related variables together with blank lines

Resource Arguments

  • Multi-line arguments consistently formatted
  • Use trailing commas in lists
  • Align equals signs for readability in blocks

AWS-Specific

  • Use data.aws_iam_policy_document whenever possible instead of jsonencode
  • Use AWS managed policies via data.aws_iam_policy when available

Tags and Metadata

  • Use default_tags at provider level for Project and Component tags
  • Include meaningful resource-specific tags when needed

IAM Roles (aws_iam_role)

  • Trust policies use separate data.aws_iam_policy_document with -trust suffix
  • Split policies into multiple documents when they get large
  • Use specific resource ARNs; avoid wildcards where possible
  • Role names use PascalCase (e.g., NetKea, NwEc2Default)
  • Include descriptive description field referencing the Terraform path

IAM Instance Profiles (aws_iam_instance_profile)

  • Name should match the associated IAM role name
  • Use aws_iam_role.Role.name for both name and role attributes
Install via CLI
npx skills add https://github.com/sorah/config --skill terraform
Repository Details
star Stars 31
call_split Forks 3
navigation Branch main
article Path SKILL.md
More from Creator