DEV Community

Cover image for ⚙️ Terraform Modules & Remote Backend (S3 + DynamoDB) — Part 5
Ahkar Swe
Ahkar Swe

Posted on

⚙️ Terraform Modules & Remote Backend (S3 + DynamoDB) — Part 5

So far in this series, we’ve:

  • Deployed an EC2 instance
  • Used variables and outputs
  • Understood Terraform state

But there’s a problem 👇

👉 Your code is still not production-ready

Let’s fix that.


🎯 What You’ll Learn

In this guide:

  • What Terraform modules are
  • How to structure reusable code
  • Why remote state is critical
  • How to use S3 + DynamoDB backend

🔁 Why Modules Matter

Right now, your code is probably:

👉 All in one file
👉 Hard to reuse
👉 Difficult to manage


🔹 What is a Module?

A module is:

👉 A reusable Terraform component

Example:

modules/
  ec2/
    main.tf
    variables.tf
    outputs.tf
Enter fullscreen mode Exit fullscreen mode

🔹 Using a Module

In your root main.tf:

module "ec2" {
  source = "../../modules/ec2"

  instance_type = "t2.micro"
}
Enter fullscreen mode Exit fullscreen mode

👉 Instead of writing everything again, you reuse code.


💡 DevOps Insight

Modules help you:

  • Standardize infrastructure
  • Reduce duplication
  • Scale across environments

🧠 Terraform State Problem

So far, your state is:

terraform.tfstate
Enter fullscreen mode Exit fullscreen mode

👉 Stored locally ❌

Problems:

  • Not safe
  • Not shareable
  • Not suitable for teams

🔹 Solution — Remote Backend

We move state to:

👉 S3 bucket
👉 DynamoDB (for locking)


🔹 Backend Configuration

Create backend.tf:

terraform {
  backend "s3" {
    bucket         = "my-terraform-state-bucket"
    key            = "dev/terraform.tfstate"
    region         = "ap-southeast-1"
    dynamodb_table = "terraform-lock"
  }
}
Enter fullscreen mode Exit fullscreen mode

🔹 Initialize Backend

terraform init
Enter fullscreen mode Exit fullscreen mode

👉 Terraform will migrate state to S3.


🔒 Why DynamoDB?

DynamoDB provides:

👉 State locking

This prevents:

  • Multiple users applying at same time
  • State corruption

🧠 What You Just Built

You now have:

  • Modular Terraform code
  • Remote state storage (S3)
  • State locking (DynamoDB)

👉 This is how real DevOps teams work.


⚠️ Important Note

Never commit:

terraform.tfstate
Enter fullscreen mode Exit fullscreen mode

👉 Add to .gitignore


🎯 What You Just Learned

  • Modules for reusable infrastructure
  • Remote backend best practices
  • Production-ready Terraform setup

💡 Final Thought

You are no longer writing scripts.

You are designing:

👉 scalable infrastructure systems


🚀 What’s Next?

Next, we’ll go deeper into:

👉 Multi-environment structure (dev / prod)
👉 Professional Terraform repo design


👨‍💻 About the Author

Hi, I’m Ahkar — sharing DevOps, AWS, and Infrastructure knowledge 🚀

🌐 https://mindgnite.com

Follow for more Terraform content 🔥


📚 Terraform Learning Series

  • Part 1: Why Terraform
  • Part 2: Setup Guide
  • Part 3: First EC2
  • Part 4: Variables & State
  • Part 5: Modules & Backend (this post)
  • Part 6: Production Structure (coming next)

👉 Follow to continue 🚀

Top comments (0)