<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Siddharth Mishra</title>
    <description>The latest articles on DEV Community by Siddharth Mishra (@siddharth_mishra_1c48bdb4).</description>
    <link>https://dev.to/siddharth_mishra_1c48bdb4</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1642875%2F6ec93e96-1685-44b0-bf32-e5045edb294c.png</url>
      <title>DEV Community: Siddharth Mishra</title>
      <link>https://dev.to/siddharth_mishra_1c48bdb4</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/siddharth_mishra_1c48bdb4"/>
    <language>en</language>
    <item>
      <title>🚀 Terraform Day 1: What Is Infrastructure as Code &amp; Why It Matters</title>
      <dc:creator>Siddharth Mishra</dc:creator>
      <pubDate>Thu, 26 Mar 2026 10:26:53 +0000</pubDate>
      <link>https://dev.to/siddharth_mishra_1c48bdb4/terraform-day-1-what-is-infrastructure-as-code-why-it-matters-5c3b</link>
      <guid>https://dev.to/siddharth_mishra_1c48bdb4/terraform-day-1-what-is-infrastructure-as-code-why-it-matters-5c3b</guid>
      <description>&lt;p&gt;So I finally started my 30-day Terraform journey. Day 1 wasn't about writing code — it was about understanding why this thing exists in the first place.&lt;br&gt;
Let me share what clicked for me.&lt;/p&gt;

&lt;p&gt;The problem with doing things manually&lt;br&gt;
Imagine you need to spin up a new environment for your app. You go to the AWS console, create a VPC, add subnets, launch an EC2 instance, set up security groups, configure IAM... By the time you're done it's 2 hours later and you've clicked through 40 screens.&lt;br&gt;
Now imagine doing that again for staging. And again for prod.&lt;br&gt;
That's the world before IaC. And the worst part? No two environments ever end up exactly the same. Someone forgets a firewall rule here, picks the wrong instance type there. Then you spend hours debugging "why does it work in dev but not in prod?" — and the answer is always some tiny config difference that nobody documented.&lt;/p&gt;

&lt;p&gt;What Infrastructure as Code actually means&lt;br&gt;
IaC is simple in concept: instead of clicking through a UI, you write a file that describes what you want. Terraform reads that file and talks to the cloud API to make it happen.&lt;br&gt;
Your infrastructure becomes:&lt;/p&gt;

&lt;p&gt;Version controlled — you can see every change in git&lt;br&gt;
Reproducible — run the same code, get the same environment every time&lt;br&gt;
Reviewable — infrastructure changes go through PRs like code does&lt;br&gt;
Automated — plug it into a CI/CD pipeline and it runs itself&lt;/p&gt;

&lt;p&gt;The mental shift is: treat your servers and networks like you treat your application code.&lt;/p&gt;

&lt;p&gt;Where Terraform fits&lt;br&gt;
There are a bunch of IaC tools out there. They mostly fall into two camps:&lt;br&gt;
Cloud-specific tools — AWS CloudFormation, Azure ARM Templates, GCP Deployment Manager. They're deep integrations with their platforms but lock you in.&lt;br&gt;
Multi-cloud tools — Terraform, Pulumi. Write once, deploy anywhere (AWS, GCP, Azure, even GitHub and Datadog).&lt;br&gt;
Terraform wins in most teams because it's open-source, cloud-agnostic, and has been around long enough that almost every problem you'll hit has already been solved by the community.&lt;/p&gt;

&lt;p&gt;How Terraform works (the 30-second version)&lt;br&gt;
You write .tf files using HCL (HashiCorp Configuration Language). Those files describe the resources you want. Then you run a few CLI commands:&lt;br&gt;
bashterraform init      # download the providers you need&lt;br&gt;
terraform plan      # preview what's going to change&lt;br&gt;
terraform apply     # make it happen&lt;br&gt;
terraform destroy   # tear it all down&lt;br&gt;
That's it. Terraform figures out the order to create things, handles dependencies, and tracks what it built in a state file.&lt;br&gt;
The key idea: Terraform doesn't "control" your servers after creating them. It just calls the same AWS APIs you'd call manually — but from code.&lt;/p&gt;

&lt;p&gt;Setting up&lt;br&gt;
Day 1 setup was quick:&lt;br&gt;
bash# Install via brew (macOS)&lt;br&gt;
brew tap hashicorp/tap&lt;br&gt;
brew install hashicorp/tap/terraform&lt;/p&gt;

&lt;h1&gt;
  
  
  Verify
&lt;/h1&gt;

&lt;p&gt;terraform version&lt;/p&gt;

&lt;h1&gt;
  
  
  Terraform v1.7.x
&lt;/h1&gt;

&lt;h1&gt;
  
  
  Optional but nice — enable autocomplete
&lt;/h1&gt;

&lt;p&gt;terraform -install-autocomplete&lt;br&gt;
I also installed the HashiCorp Terraform extension for VS Code. It gives you syntax highlighting, formatting on save, and inline docs. Worth it.&lt;/p&gt;

&lt;p&gt;One small but real example&lt;br&gt;
To make it concrete — here's the simplest possible Terraform config. It just tells Terraform "I'm using AWS, in us-east-1":&lt;br&gt;
hcl# provider.tf&lt;br&gt;
terraform {&lt;br&gt;
  required_providers {&lt;br&gt;
    aws = {&lt;br&gt;
      source  = "hashicorp/aws"&lt;br&gt;
      version = "~&amp;gt; 5.0"&lt;br&gt;
    }&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;provider "aws" {&lt;br&gt;
  region = "us-east-1"&lt;br&gt;
}&lt;br&gt;
Running terraform init after this downloads the AWS provider plugin. Nothing gets created yet — but you've told Terraform where to work.&lt;/p&gt;

&lt;p&gt;What I'm building toward&lt;br&gt;
Over the next 29 days I'll go from this setup all the way to deploying real, production-grade AWS infrastructure — VPCs, EKS clusters, CI/CD pipelines, the works.&lt;br&gt;
If you're starting from zero with Terraform, follow along. I'll share the mistakes I make, not just the parts that worked.&lt;br&gt;
See you on Day 2. 👋&lt;/p&gt;

</description>
      <category>devops</category>
      <category>learning</category>
      <category>terraform</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
