Terraform
Provision and manage cloud infrastructure using Terraform. Follow examples that demonstrate best practices for infrastructure as code.
Posts
Terraform Variables, Loops, and Outputs: The Complete Guide
Everything about moving values through Terraform in one place: declaring vs assigning variables, tfvars and TF_VAR_ precedence, locals, maps and lists, for_each and its pitfalls, splat outputs for counted resources, sensitive values, and the classic "variables may not be used here" error.
Terraform Strings and Conditionals: The Complete Guide
Building strings, checking substrings, ternaries, optional attributes and conditional resources, in one place.
Build a Terraform Provider for Your API with the Plugin Framework
If your product has a REST API, a Terraform provider lets people manage it as code. Here is how to build one with the modern Terraform Plugin Framework, using a real email API as the example, from client to registry.
OpenTofu in 2026: Should You Switch from Terraform (and What It Actually Costs You)
OpenTofu has matured into a real Terraform alternative in 2026. Here is what the fork gives you, why the migration is easier than you think, and where the actual lock-in hides.
Terraform: Failed to install provider, does not match checksums from dependency lock file
Troubleshoot the Terraform error about provider checksums not matching the dependency lock file and learn safe fixes and best practices.
How to Fix Terraform "Variables Not Allowed" Error During Plan
Learn why Terraform throws 'Variables not allowed' errors in certain contexts and how to resolve them using locals, data sources, or restructuring your configuration.
Experimenting Locally with Terraform
Practical techniques for running, testing, and iterating on Terraform locally before you push changes to remote state or CI.
Can Terraform Watch a Directory for Changes? Working With Dynamic Files
Learn how to handle scenarios where you need Terraform to respond to file changes, and explore alternatives to automatic directory watching.
Best practices when using Terraform?
Discover essential best practices for using Terraform to manage your infrastructure effectively and securely.
How to create an SSH key in Terraform?
Learn how to generate and manage SSH keys in Terraform for secure access to your infrastructure.
How to Share Providers and Variables Across Terraform Modules
Learn the right way to configure providers and pass variables when working with Terraform modules, avoiding common pitfalls with provider inheritance and variable scoping.
How to Organize Terraform Modules for Multiple Environments
Learn effective patterns for structuring Terraform modules to manage dev, staging, and production environments without duplicating code.
How to Save Terraform Plan and Apply Output to a File
Learn how to save Terraform plan output for review, share readable apply logs, and use the -out flag for safe two-step deployments.
How to Store Terraform Azure State File in a Different Subscription
Learn how to configure Terraform to store its state file in an Azure Storage Account that exists in a different subscription from your infrastructure resources.
What Does Terraform Refresh Really Do?
What `terraform refresh` actually does, how it updates the state file without changing real resources, and where it still fits in modern Terraform workflows.
How to Run Terraform Init From a Different Directory
Learn how to initialize and manage Terraform configurations from outside their directory using -chdir, working directories, and automation patterns.
Should I commit .tfstate files to Git?
Understand why committing .tfstate files to Git is not recommended and explore best practices for managing Terraform state.
How to Add SSH Keys to GCP Instances Using Terraform
Learn how to configure SSH key access for Google Cloud Platform compute instances with Terraform, including project-wide and instance-specific keys.
Specifying an API Gateway Endpoint with a Variable in Terraform
Learn how to dynamically specify an API Gateway endpoint with a variable in Terraform for flexible configurations.
How to Output a Field From a Terraform Module
Learn how to properly expose resource attributes from Terraform modules using outputs, and how to access nested values from complex data structures.
Managing Different Environments in Terraform
Learn how to manage different environments in Terraform using workspaces, variable files, and directory structures.
Can a Resource Be Passed as a Variable into a Module?
Learn how to pass resources as variables into modules in Terraform for reusable and modular infrastructure.
How to Configure ECS Fargate Task Execution Roles With Terraform
Learn how to properly set up IAM execution roles for ECS Fargate task definitions in Terraform, including permissions for ECR, CloudWatch Logs, and Secrets Manager.
How to Reference a Resource Created by a Terraform Module
Reference resources created inside a Terraform module from the parent config. Covers defining outputs, accessing module outputs by name, and chaining modules.
Should .terraform.lock.hcl Be in .gitignore? (The Answer Might Surprise You)
The .terraform.lock.hcl file causes confusion for many Terraform users. Learn why you should commit it to version control and how to handle it properly.
Use Terraform to set up a Lambda function triggered by a scheduled event source
Learn how to use Terraform to create an AWS Lambda function triggered by a scheduled event source, such as a cron job.
How to Fix Terraform Provider Checksum Mismatch Errors
Running into 'doesn't match checksums from dependency lock file' errors when installing Terraform providers? Learn what causes this issue and how to resolve it safely.
How to Fix "Error acquiring the state lock: ConditionalCheckFailedException"
Learn how to diagnose and fix Terraform state lock errors that prevent your infrastructure deployments from running.
How to Fix Terraform Not Deploying API Gateway Stage
Learn why Terraform might not deploy your AWS API Gateway stage and how to properly configure deployments with automatic triggering on configuration changes.
How to Apply SQL Scripts to RDS Databases With Terraform
Learn different approaches for running SQL scripts and migrations against RDS databases during Terraform deployment, including provisioners, external tools, and dedicated migration resources.
How to Use Terraform Module Output as Input for Another Module
Learn how to chain Terraform modules together by passing outputs from one module as inputs to another, creating organized and reusable infrastructure configurations.
How to Configure CloudWatch Logs Subscription Filter to Lambda With Terraform
Learn how to stream CloudWatch Logs to a Lambda function using Terraform, including proper permissions and error handling.
Terraform: Error Creating IAM Role. MalformedPolicyDocument: Has Prohibited Field Resource
Learn how to resolve the 'MalformedPolicyDocument: Has prohibited field Resource' error when creating an IAM role in Terraform.
How to Ignore Change of an Attribute in Terraform Blocks
Learn how to use the `lifecycle` block with the `ignore_changes` argument to ignore changes to specific attributes in Terraform.
How to Organize a Terraform Repository with Multiple Subfolders
Learn how to structure a Terraform repository with multiple environments, modules, and configurations in a way that scales with your infrastructure needs.
How to Split a Terraform File (main.tf) into Several Files (No Modules)
Organizing Terraform configurations by splitting a single main.tf file into multiple files can improve readability and maintainability. Learn how to do this without using modules.
How to Fix Terraform Import "Index Value Required" Error for String Keys
Learn how to resolve the 'Index value required' error when importing resources with for_each in Terraform, and understand the correct syntax for string-based resource keys.
How to Execute Terraform Actions Without the Interactive Prompt
Learn how to automate Terraform workflows by bypassing the interactive prompt for commands like apply and destroy.
How to Get the Current Working Directory in Terraform
Learn how to reference file paths in Terraform using path.module, path.root, and path.cwd - and understand which one to use in different scenarios.
How to Read Environment Variables From a .env File in Terraform
Learn different approaches for loading environment variables from .env files into Terraform, from shell scripts to external data sources.
How to Attach Multiple IAM Policies to IAM Roles Using Terraform
Learn how to attach multiple IAM policies to a single IAM role in Terraform to manage permissions effectively.
Fixing the "Invalid Legacy Provider Address" Error in Terraform
Learn how to resolve the 'Invalid legacy provider address' error in Terraform by upgrading your provider configurations.
How to Get List Index When Using for_each in Terraform
Learn how to access the index or position when iterating over lists with for_each in Terraform, and understand the differences between for_each and count.
Determining Minimum AWS Permissions for Terraform Configurations
Learn how to identify the minimum AWS permissions required for your Terraform configurations to enhance security and compliance.
Terraform + DynamoDB: All Attributes Must Be Indexed
Learn how to handle the 'all attributes must be indexed' requirement in DynamoDB when using Terraform.
How to Reference Resources Created With for_each in Terraform
Learn how to reference individual resources and attributes from for_each loops in other Terraform resources, including cross-resource dependencies and data extraction patterns.
How to Concatenate Lists in Terraform Using concat()
Learn how to combine multiple lists in Terraform using the concat() function, plus advanced patterns for merging and manipulating list data.
How to Fix Common Terraform S3 Backend Configuration Errors
Learn how to troubleshoot and resolve common errors when configuring Terraform's S3 backend, from access denied issues to state locking problems.
How to Create a Folder in an AWS S3 Bucket Using Terraform
Learn how to create a folder in an AWS S3 bucket using Terraform with the `aws_s3_object` resource.
Using a Git Branch as a Source for Terraform Modules
Learn how to use a specific Git branch as the source for Terraform modules to manage versioning and development workflows.
Refactoring modules: Error: Provider configuration not present
Learn how to resolve the 'Provider configuration not present' error when refactoring Terraform modules.
How can I remove a resource from Terraform state?
Learn how to safely remove a resource from Terraform state without affecting the actual infrastructure.
How are data sources used in Terraform?
Understand how to use data sources in Terraform to fetch information about existing resources.
Upgrade Terraform to Specific Version
Learn how to upgrade Terraform to a specific version on your system, ensuring compatibility with your infrastructure.
Initial setup of Terraform backend using Terraform
Learn how to configure a Terraform backend for secure and efficient state management.
Terraform Infrastructure as Code Best Practices
Terraform best practices for writing scalable, maintainable infrastructure as code - covering directory structure, state management, modules, and security.
I would like to run Terraform only for a specific resource
Learn how to target specific resources in Terraform to save time and avoid unnecessary changes.
How to Migrate Terraform State Between Projects
Learn how to safely migrate Terraform state between projects using the `terraform state` command.
Terraform - Delete All Resources Except One
Learn how to delete all resources managed by Terraform except for a specific resource by using targeted commands and state manipulation.
Can Terraform Be Used to Provision On-Premises Servers?
Learn how Terraform can be used to provision on-premises servers by integrating with tools like VMware vSphere, Ansible, and bare-metal providers.
Modules + Output from for_each
Learn how to use for_each with modules in Terraform to dynamically create resources and manage outputs.
Terraform Statefile is Locked: How to Unlock It
Learn how to unlock a locked Terraform statefile using the `force-unlock` command and best practices to avoid future locks.