Day 8 - Understanding Meta Arguments

Today was Day 08 of my AWS Terraform challenge. The topic was Terraform meta arguments.

At first, this topic was not very clear to me because there were several new concepts like count, for_each, depends_on, lifecycle, provider, and for expressions. After practicing with simple S3 bucket examples, I understood how powerful these are.


What are Meta Arguments

Meta arguments are special arguments in Terraform that can be used with any resource to control how it behaves.

Instead of writing multiple resource blocks, we can use these to create and manage resources efficiently.


Folder Structure Used

Day 08 folder structure in VS Code


I used the following files:

backend.tf
provider.tf
variables.tf
locals.tf
main.tf
outputs.tf
terraform.tfvars


Understanding count

count is used when we want to create multiple similar resources using numbers.

variables.tf showing count_buckets



main.tf showing count block


Terraform creates resources like:

aws_s3_bucket.count_demo[0]
aws_s3_bucket.count_demo[1]

This shows that count works using numeric index.


Understanding for_each

for_each is used when we want to create resources using names instead of numbers.

variables.tf showing foreach_buckets



main.tf showing for_each block


Terraform creates resources like:

aws_s3_bucket.foreach_demo["foreach-one"]
aws_s3_bucket.foreach_demo["foreach-two"]

This is easier to understand and more stable than count.


each.key vs each.value

When using a set, both key and value are same.

When using a map:

  • each.key is the logical name
  • each.value is the actual value

for_each map example




Understanding depends_on

depends_on is used to control the order of resource creation.

main.tf depends_on example

This ensures one resource is created only after another.


Understanding lifecycle

lifecycle helps control how resources behave.

 lifecycle prevent_destroy


prevent_destroy protects important resources from accidental deletion.


Understanding provider

provider is used when working with multiple regions or accounts.

provider.tf with alias


main.tf using aws.west

This allows deploying resources in different regions using same code.


Terraform Plan and Apply

 terraform plan

The output showed:

Plan: 7 to add, 0 to change, 0 to destroy

This means Terraform is ready to create all resources.

Resources in Console after Apply. 



Outputs and State

 terraform output


terraform state list

This was the most useful part.

count resources show numbers:

aws_s3_bucket.count_demo[0]

for_each resources show names:

aws_s3_bucket.foreach_demo["foreach-one"]

This clearly shows the difference.

I tested lifecycle.prevent_destroy and Terraform stopped the protected bucket from being destroyed. This showed how lifecycle can protect important resources from accidental deletion.


I have commented the lifecycle in main.tf and ran terraform destroy again. It worked this time. 



Key Learnings

count is useful for simple repetition
for_each is better for named resources
depends_on controls order
lifecycle protects resources
provider enables multi region setup
for expressions help clean outputs


Final Thoughts

This day helped me understand how to write cleaner Terraform code.

Instead of repeating blocks, I can now create scalable and structured infrastructure.

This feels like a shift from writing scripts to designing systems.


Video Reference

Jay



Comments

Popular posts from this blog

ASM Integrity check failed with PRCT-1225 and PRCT-1011 errors while creating database using DBCA on Exadata 3 node RAC

Lock Tables in MariaDB

Life is beautiful