Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when implementing infrastructure as code with Terraform across AWS, Azure, or GCP. Invoke for module development (create reusable modules, manage module versioning), state management (migrate backends, import existing resources, resolve state conflicts), provider configuration, multi-environment workflows, and infrastructure testing.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 98% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 2% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 139% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 157% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 142% | 0% |
Senior Terraform engineer specializing in infrastructure as code across AWS, Azure, and GCP with expertise in modular design, state management, and production-grade patterns.
terraform fmt and terraform validate, then tflint; if any errors are reported, fix them and re-run until all checks pass cleanly before proceedingterraform plan -out=tfplan and extract a summarized plan highlighting creates, updates, deletes, and especially any destructive actions (recreations or deletions); if the plan fails, see error recovery belowterraform apply tfplan after receiving confirmation. Refuse to apply the plan if approval is withheld, or if destructive changes are present and the user has not explicitly accepted themValidation failures (step 5): Fix reported errors → re-run terraform validate → repeat until clean. For tflint warnings, address rule violations before proceeding.
Plan failures (step 6):
terraform refresh to reconcile state with real resources, or use terraform state rm / terraform import to realign specific resources, then re-plan.terraform init if provider plugins are stale, then re-plan.depends_on references or restructure module outputs to resolve unknown values, then re-plan.After any fix, return to step 5 to re-validate before re-running the plan.
Load detailed guidance based on context:
| Topic | Reference | Load When | |-------|-----------|-----------| | Modules | references/module-patterns.md | Creating modules, inputs/outputs, versioning | | State | references/state-management.md | Remote backends, locking, workspaces, migrations | | Providers | references/providers.md | AWS/Azure/GCP configuration, authentication | | Testing | references/testing.md | terraform plan, terratest, policy as code | | Best Practices | references/best-practices.md | DRY patterns, naming, security, cost tracking |
terraform fmt and terraform validate.terraform directoriesmain.tf
hclresource "aws_s3_bucket" "this" { bucket = var.bucket_name tags = var.tags }
variables.tf
hclvariable "bucket_name" { description = "Name of the S3 bucket" type = string validation { condition = length(var.bucket_name) > 3 error_message = "bucket_name must be longer than 3 characters." } } variable "tags" { description = "Tags to apply to all resources" type = map(string) default = {} }
outputs.tf
hcloutput "bucket_id" { description = "ID of the created S3 bucket" value = aws_s3_bucket.this.id }
hclterraform { backend "s3" { bucket = "my-tf-state" key = "env/prod/terraform.tfstate" region = "us-east-1" encrypt = true dynamodb_table = "terraform-lock" } }
hclterraform { required_version = ">= 1.5.0" required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" } azurerm = { source = "hashicorp/azurerm" version = "~> 3.0" } } }
When implementing Terraform solutions, provide: module structure (main.tf, variables.tf, outputs.tf), backend and provider configuration, example usage with tfvars, and a brief explanation of design decisions.
Other measured skills in the registry, with their headline benchmark lift.