Day 8: Terraform Finally Makes Sense (Loops, Count, For_Each & Dependencies)

Published: (December 3, 2025 at 03:50 AM EST)
2 min read
Source: Dev.to

Source: Dev.to

Overview

Today was one of those days where everything just clicked. I finally understood Terraform meta‑arguments—especially count, for_each, and depends_on. After some hands‑on practice, the concepts that once seemed scary turned out to be simple and powerful.

Using count

count is great for iterating over lists. In the example below, a list of bucket names is supplied via a variable, and count.index is used to create two S3 buckets:

resource "aws_s3_bucket" "bucket5" {
  count  = 2
  bucket = var.bucket_name[count.index]
  tags   = var.tags
}

Running the typical Terraform workflow:

terraform plan
terraform apply --auto-approve
terraform output

produced the expected resources without any drama.

Using for_each

When you need unique resource names, for_each works cleaner with sets. The following snippet demonstrates creating two more S3 buckets using a set and referencing each bucket name with each.value:

resource "aws_s3_bucket" "bucket_set" {
  for_each = var.bucket_set   # a set of bucket names
  bucket   = each.value
  tags     = var.tags
}

Managing Dependencies with depends_on

Explicit dependencies ensure Terraform doesn’t rush resources in the wrong order. Adding depends_on guarantees that a resource waits for another to be fully provisioned before proceeding:

resource "aws_s3_bucket" "dependent_bucket" {
  bucket = "my-dependent-bucket"
  depends_on = [
    aws_s3_bucket.bucket5
  ]
}

Clean Outputs with For‑Expressions

For‑expressions make output values concise and readable. The example below collects the names of all buckets created with count:

output "s3_bucket_names" {
  value = [for bucket in aws_s3_bucket.bucket5 : bucket.bucket]
}

The output is a tidy list of bucket names, suitable for downstream consumption.

Takeaways

  • count – ideal for iterating over ordered lists.
  • for_each – cleaner when you need unique identifiers, especially with sets.
  • depends_on – prevents Terraform from applying resources out of order.
  • For‑expressions – produce neat, professional outputs.

The more I practice Terraform, the more confident I feel about doing DevOps work. “Okay… I can actually do this DevOps thing.”

Back to Blog

Related posts

Read more »

Day-12: AWS Terraform Functions

Advanced Functions in Terraform Building upon the foundational functions covered in Day 11, today we explore more specialized functions that enhance Terraform'...

AWS Terraform Lifecycle Rules

Introduction Infrastructure as Code IaC is most powerful when you have full control over how resources behave during updates, replacements, and deletions. Terr...

Terraform Project: Simple EC2 + Security Group

Project Structure terraform-project/ │── main.tf │── variables.tf │── outputs.tf │── providers.tf │── terraform.tfvars │── modules/ │ └── ec2/ │ ├── main.tf │...