0
0
Terraformcloud~30 mins

Declarative vs imperative IaC in Terraform - Hands-On Comparison

Choose your learning style9 modes available
Declarative vs Imperative Infrastructure as Code with Terraform
📖 Scenario: You are working as a cloud engineer. Your team wants to understand the difference between declarative and imperative ways of managing cloud infrastructure. You will create a simple Terraform configuration to declare a cloud resource, then add a variable to configure it, then use a loop to create multiple resources, and finally complete the configuration with an output.
🎯 Goal: Build a Terraform configuration that declares an AWS S3 bucket, uses a variable to set the bucket name prefix, creates multiple buckets using a loop, and outputs the bucket names. This will demonstrate declarative Infrastructure as Code (IaC) principles.
📋 What You'll Learn
Use Terraform syntax to declare resources
Create a variable to configure bucket name prefix
Use a for_each loop to create multiple buckets
Output the list of created bucket names
💡 Why This Matters
🌍 Real World
Cloud engineers use Terraform to declare and manage cloud resources in a clear, repeatable way. This project shows how to write simple, reusable Terraform code.
💼 Career
Understanding declarative IaC with Terraform is essential for roles like Cloud Engineer, DevOps Engineer, and Infrastructure Developer.
Progress0 / 4 steps
1
Declare a single AWS S3 bucket resource
Write a Terraform resource block named aws_s3_bucket with the resource name example_bucket. Set the bucket attribute to the exact string "my-unique-bucket-001". This declares one S3 bucket.
Terraform
Need a hint?

Use resource "aws_s3_bucket" "example_bucket" { ... } and set bucket = "my-unique-bucket-001".

2
Add a variable for bucket name prefix
Create a Terraform variable block named bucket_prefix of type string. Set its default value to "my-unique-bucket". This variable will help configure bucket names.
Terraform
Need a hint?

Use variable "bucket_prefix" { type = string default = "my-unique-bucket" }.

3
Use a for_each loop to create multiple buckets
Replace the single aws_s3_bucket resource with a resource named aws_s3_bucket and resource name multiple_buckets. Use for_each with the set {1, 2, 3}. Set the bucket attribute to the expression "${var.bucket_prefix}-${each.key}" to create three buckets with names like my-unique-bucket-1.
Terraform
Need a hint?

Use for_each = toset([1, 2, 3]) and bucket = "${var.bucket_prefix}-${each.key}".

4
Add an output for the bucket names
Create a Terraform output block named bucket_names. Set its value to a list of all bucket names created by aws_s3_bucket.multiple_buckets. Use the expression [for b in aws_s3_bucket.multiple_buckets : b.bucket].
Terraform
Need a hint?

Use output "bucket_names" { value = [for b in aws_s3_bucket.multiple_buckets : b.bucket] }.