<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Terraform Features on Terraform Pilot</title><link>https://www.terraformpilot.com/categories/terraform-features/</link><description>Recent content in Terraform Features on Terraform Pilot</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><lastBuildDate>Mon, 13 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.terraformpilot.com/categories/terraform-features/feed.xml" rel="self" type="application/rss+xml"/><item><title>Terraform Bulk Import: Bring Existing AWS Resources Under Management</title><link>https://www.terraformpilot.com/articles/terraform-bulk-import-guide/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.terraformpilot.com/articles/terraform-bulk-import-guide/</guid><description>You have 50 AWS resources created manually in the console. You need them in Terraform. The old terraform import CLI required importing one resource at a time. With import blocks (Terraform 1.5+), you can import everything in a single terraform apply and auto-generate the HCL configuration.
The Bulk Import Workflow 1. Inventory existing resources (AWS CLI / console) 2. Write import blocks (one per resource) 3. Generate config automatically (-generate-config-out) 4.</description></item><item><title>Terraform Data Sources Explained: Read External Information</title><link>https://www.terraformpilot.com/articles/terraform-data-sources-explained/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.terraformpilot.com/articles/terraform-data-sources-explained/</guid><description>Data sources let Terraform read information from your cloud provider or external systems without creating or managing resources. Use them to look up AMIs, reference existing VPCs, read secrets, and query anything you didn&amp;rsquo;t create with Terraform.
Basic Syntax # Data source: reads, never creates data &amp;#34;aws_ami&amp;#34; &amp;#34;al2023&amp;#34; { most_recent = true owners = [&amp;#34;amazon&amp;#34;] filter { name = &amp;#34;name&amp;#34; values = [&amp;#34;al2023-ami-*-x86_64&amp;#34;] } } # Use the result resource &amp;#34;aws_instance&amp;#34; &amp;#34;web&amp;#34; { ami = data.</description></item><item><title>Terraform depends_on Explained: Control Resource Ordering</title><link>https://www.terraformpilot.com/articles/terraform-depends-on-explained/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.terraformpilot.com/articles/terraform-depends-on-explained/</guid><description>Terraform automatically determines resource ordering from references in your code. You rarely need depends_on — but when you do, it&amp;rsquo;s critical. This guide explains when implicit dependencies work, when they don&amp;rsquo;t, and when depends_on is the right tool.
Implicit Dependencies (The Default) Terraform builds a dependency graph from resource references:
resource &amp;#34;aws_vpc&amp;#34; &amp;#34;main&amp;#34; { cidr_block = &amp;#34;10.0.0.0/16&amp;#34; } resource &amp;#34;aws_subnet&amp;#34; &amp;#34;public&amp;#34; { vpc_id = aws_vpc.main.id # ← Reference creates implicit dependency cidr_block = &amp;#34;10.</description></item><item><title>Terraform for_each vs count: When to Use Each</title><link>https://www.terraformpilot.com/articles/terraform-for-each-vs-count/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.terraformpilot.com/articles/terraform-for-each-vs-count/</guid><description>Both count and for_each create multiple instances of a resource. The difference: count uses numeric indexes, for_each uses string keys. This matters more than you&amp;rsquo;d think — count can destroy your resources when you remove an item from the middle of a list.
The Problem with count variable &amp;#34;subnet_cidrs&amp;#34; { default = [&amp;#34;10.0.1.0/24&amp;#34;, &amp;#34;10.0.2.0/24&amp;#34;, &amp;#34;10.0.3.0/24&amp;#34;] } resource &amp;#34;aws_subnet&amp;#34; &amp;#34;main&amp;#34; { count = length(var.subnet_cidrs) vpc_id = aws_vpc.main.id cidr_block = var.subnet_cidrs[count.index] } State addresses:</description></item><item><title>Terraform Locals Explained: Simplify Your Configuration</title><link>https://www.terraformpilot.com/articles/terraform-locals-explained/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.terraformpilot.com/articles/terraform-locals-explained/</guid><description>Locals are computed values within your Terraform configuration — think of them as named constants or intermediate variables. They reduce duplication, make complex expressions readable, and keep your code DRY.
Basic Syntax locals { project = &amp;#34;myapp&amp;#34; environment = terraform.workspace region = &amp;#34;us-east-1&amp;#34; # Computed from other locals name_prefix = &amp;#34;${local.project}-${local.environment}&amp;#34; } resource &amp;#34;aws_vpc&amp;#34; &amp;#34;main&amp;#34; { cidr_block = &amp;#34;10.0.0.0/16&amp;#34; tags = { Name = &amp;#34;${local.name_prefix}-vpc&amp;#34; # &amp;#34;myapp-prod-vpc&amp;#34; } } Locals vs Variables Feature variable locals Set by User (tfvars, CLI, env) Terraform author (in code) Purpose Configurable inputs Computed/derived values Overridable ✅ Yes ❌ No (fixed in code) Validation ✅ validation block ❌ No Reference var.</description></item><item><title>Terraform Modules Best Practices: Write Reusable Infrastructure Code</title><link>https://www.terraformpilot.com/articles/terraform-modules-best-practices/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.terraformpilot.com/articles/terraform-modules-best-practices/</guid><description>Modules are Terraform&amp;rsquo;s unit of reuse — a directory of .tf files you can call from multiple places. Good modules save hours. Bad modules create more problems than they solve. Here&amp;rsquo;s how to build modules that work.
Standard Module Structure modules/ └── vpc/ ├── main.tf # Resources ├── variables.tf # Input variables ├── outputs.tf # Output values ├── versions.tf # Provider and Terraform version constraints ├── README.md # Documentation └── examples/ └── basic/ └── main.</description></item><item><title>Terraform Variables vs Outputs: Inputs, Outputs, and Data Flow</title><link>https://www.terraformpilot.com/articles/terraform-variables-vs-outputs/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.terraformpilot.com/articles/terraform-variables-vs-outputs/</guid><description>Variables are inputs — values passed into your configuration. Outputs are results — values exposed after terraform apply. Together they define how data flows in and out of Terraform modules.
Variables (Inputs) Basic Variable variable &amp;#34;instance_type&amp;#34; { type = string description = &amp;#34;EC2 instance type&amp;#34; default = &amp;#34;t3.micro&amp;#34; } resource &amp;#34;aws_instance&amp;#34; &amp;#34;web&amp;#34; { instance_type = var.instance_type } Variable Types # String variable &amp;#34;environment&amp;#34; { type = string default = &amp;#34;dev&amp;#34; } # Number variable &amp;#34;instance_count&amp;#34; { type = number default = 3 } # Boolean variable &amp;#34;enable_monitoring&amp;#34; { type = bool default = true } # List variable &amp;#34;availability_zones&amp;#34; { type = list(string) default = [&amp;#34;us-east-1a&amp;#34;, &amp;#34;us-east-1b&amp;#34;, &amp;#34;us-east-1c&amp;#34;] } # Map variable &amp;#34;instance_types&amp;#34; { type = map(string) default = { dev = &amp;#34;t3.</description></item><item><title>Terraform Ephemeral Resources Explained: Temporary Values for Secrets and Tokens</title><link>https://www.terraformpilot.com/articles/terraform-ephemeral-resources-explained/</link><pubDate>Sun, 12 Apr 2026 10:00:00 +0000</pubDate><guid>https://www.terraformpilot.com/articles/terraform-ephemeral-resources-explained/</guid><description>Ephemeral resources are a newer Terraform feature (announced at HashiDays 2025) that solves a long-standing problem: how to use secrets during a Terraform run without storing them in state. Database passwords, API tokens, session credentials — values you need during apply but don&amp;rsquo;t want persisted anywhere.
The Problem With regular resources and data sources, everything goes into state:
# ❌ This stores the password in terraform.tfstate! resource &amp;#34;random_password&amp;#34; &amp;#34;db&amp;#34; { length = 32 } # ❌ This stores the secret value in state too!</description></item><item><title>Terraform Import Block Explained: Bring Existing Resources Under Management</title><link>https://www.terraformpilot.com/articles/terraform-import-block-explained/</link><pubDate>Sun, 12 Apr 2026 10:00:00 +0000</pubDate><guid>https://www.terraformpilot.com/articles/terraform-import-block-explained/</guid><description>The import block (Terraform 1.5+) lets you bring existing infrastructure under Terraform management without CLI commands. Write it in HCL, run terraform plan, and Terraform generates the import plan. This replaces the old terraform import CLI workflow for most use cases.
Import Block vs CLI Import Old Way: CLI Import # One resource at a time, imperative terraform import aws_instance.web i-0abc123def456 terraform import aws_s3_bucket.data my-bucket-name terraform import aws_vpc.main vpc-0abc123 Problems:</description></item><item><title>Terraform moved Block Explained: Rename Resources Without Destroying Them</title><link>https://www.terraformpilot.com/articles/terraform-moved-block-explained/</link><pubDate>Sun, 12 Apr 2026 10:00:00 +0000</pubDate><guid>https://www.terraformpilot.com/articles/terraform-moved-block-explained/</guid><description>The moved block (Terraform 1.1+) lets you rename resources, move them between modules, and refactor from count to for_each — all without destroying and recreating the actual infrastructure. It&amp;rsquo;s the safe way to refactor Terraform code.
Why moved Matters Without moved, renaming a resource destroys it and creates a new one:
# Renaming from &amp;#34;web&amp;#34; to &amp;#34;app&amp;#34; without moved: # terraform plan # - aws_instance.web (destroy) # + aws_instance.app (create) # 😱 Your production server gets destroyed and recreated!</description></item><item><title>What Are Terraform Stacks? Beginner Guide to Multi-Component Deployments</title><link>https://www.terraformpilot.com/articles/terraform-stacks-guide/</link><pubDate>Sun, 12 Apr 2026 10:00:00 +0000</pubDate><guid>https://www.terraformpilot.com/articles/terraform-stacks-guide/</guid><description>Terraform Stacks became generally available in late 2025 and represent the biggest new Terraform feature since workspaces. Stacks let you deploy multiple Terraform configurations as a single, coordinated unit — solving the &amp;ldquo;how do I manage networking + compute + database together?&amp;rdquo; problem that teams have worked around for years.
The Problem Stacks Solve Without Stacks, deploying a full environment requires multiple terraform apply commands in the right order:
# Manual orchestration — error-prone cd networking/ terraform apply # 1.</description></item></channel></rss>