⏱️3 min read · 617 words
टेराफॉर्म इन्फ्रास्ट्रक्चर एज़ कोड (IaC) के लिए उद्योग मानक है। 2026 में, प्रत्येक DevOps टीम घोषणात्मक रूप से क्लाउड इंफ्रास्ट्रक्चर का प्रावधान और प्रबंधन करने के लिए टेराफॉर्म का उपयोग करती है। यह मार्गदर्शिका प्रथम संसाधन से उत्पादन-ग्रेड मॉड्यूल और राज्य प्रबंधन तक जाती है।
📋 Table of Contents
टेराफॉर्म क्यों?
- प्रदाता-अज्ञेयवादी– AWS, GCP, Azure, Kubernetes और 3,000+ प्रदाताओं के साथ काम करता है
- कथात्मक– आप जो चाहते हैं उसका वर्णन करें, न कि इसे कैसे बनाएं
- राज्य प्रबंधन– वास्तविक बुनियादी ढांचे बनाम आपके कोड को ट्रैक करता है
- आवेदन करने से पहले योजना बनाएं– परिवर्तन करने से पहले उनका पूर्वावलोकन करें
- मॉड्यूल– पुन: प्रयोज्य, साझा करने योग्य बुनियादी ढांचे के घटक
स्थापना और सेटअप
# Install Terraform (macOS)
brew install terraform
# Install via tfenv (version manager)
brew install tfenv
tfenv install 1.9.0
tfenv use 1.9.0
# Verify
terraform --version
# Install providers (runs automatically on init)
terraform init
मूल अवधारणाएँ
# main.tf — basic structure
# Provider — which cloud to use
terraform {
required_version = ">= 1.9"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = var.aws_region
}
# Variables
variable "aws_region" {
type = string
description = "AWS region"
default = "us-east-1"
}
variable "instance_type" {
type = string
default = "t3.micro"
}
# Resource — actual infrastructure
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = var.instance_type
tags = {
Name = "web-server"
Environment = var.environment
}
}
# Output
output "instance_ip" {
value = aws_instance.web.public_ip
description = "Public IP of web server"
}
टेराफ़ॉर्म वर्कफ़्लो
# 1. Initialize — download providers
terraform init
# 2. Format — auto-format code
terraform fmt
# 3. Validate — check syntax
terraform validate
# 4. Plan — preview changes
terraform plan
terraform plan -out=tfplan # save plan to file
# 5. Apply — create/update infrastructure
terraform apply
terraform apply tfplan # apply saved plan
# 6. Destroy — remove all resources
terraform destroy
# Targeted operations
terraform plan -target=aws_instance.web
terraform apply -target=module.networking
वास्तविक उदाहरण: AWS वेब स्टैक
# VPC
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
enable_dns_hostnames = true
enable_dns_support = true
tags = { Name = "${var.project}-vpc" }
}
# Public subnet
resource "aws_subnet" "public" {
count = 2
vpc_id = aws_vpc.main.id
cidr_block = "10.0.${count.index}.0/24"
availability_zone = data.aws_availability_zones.available.names[count.index]
map_public_ip_on_launch = true
tags = { Name = "${var.project}-public-${count.index}" }
}
# Security group
resource "aws_security_group" "web" {
name = "${var.project}-web-sg"
vpc_id = aws_vpc.main.id
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
# Application Load Balancer
resource "aws_lb" "web" {
name = "${var.project}-alb"
internal = false
load_balancer_type = "application"
security_groups = [aws_security_group.web.id]
subnets = aws_subnet.public[*].id
}
मॉड्यूल – पुन: प्रयोज्य अवसंरचना
# modules/rds/main.tf
variable "db_name" { type = string }
variable "db_user" { type = string }
variable "db_password" {
type = string
sensitive = true
}
variable "subnet_ids" { type = list(string) }
variable "sg_ids" { type = list(string) }
resource "aws_db_instance" "main" {
identifier = var.db_name
engine = "postgres"
engine_version = "16.2"
instance_class = "db.t3.medium"
allocated_storage = 20
db_name = var.db_name
username = var.db_user
password = var.db_password
db_subnet_group_name = aws_db_subnet_group.main.name
vpc_security_group_ids = var.sg_ids
backup_retention_period = 7
skip_final_snapshot = false
deletion_protection = true
storage_encrypted = true
tags = { Name = var.db_name }
}
output "endpoint" { value = aws_db_instance.main.endpoint }
# Use module in root
module "database" {
source = "./modules/rds"
db_name = "myapp"
db_user = var.db_user
db_password = var.db_password
subnet_ids = module.networking.private_subnet_ids
sg_ids = [aws_security_group.db.id]
}
दूरस्थ राज्य – टीम सहयोग
# Store state in S3 (never commit terraform.tfstate to git!)
terraform {
backend "s3" {
bucket = "mycompany-terraform-state"
key = "production/terraform.tfstate"
region = "us-east-1"
encrypt = true
dynamodb_table = "terraform-state-lock" # prevents concurrent applies
}
}
कार्यस्थान – एकाधिक वातावरण
# Create workspaces for dev/staging/prod
terraform workspace new dev
terraform workspace new staging
terraform workspace new prod
terraform workspace list
# * dev
# staging
# prod
terraform workspace select prod
terraform plan
# Reference workspace in code
locals {
instance_type = terraform.workspace == "prod" ? "t3.large" : "t3.micro"
}
डेटा स्रोत
# Look up existing resources
data "aws_vpc" "existing" {
filter {
name = "tag:Name"
values = ["production-vpc"]
}
}
data "aws_ami" "ubuntu" {
most_recent = true
owners = ["099720109477"] # Canonical
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-*-22.04-amd64-server-*"]
}
}
resource "aws_instance" "web" {
ami = data.aws_ami.ubuntu.id
subnet_id = data.aws_vpc.existing.id
}
सर्वोत्तम प्रथाएं
- कभी प्रतिबद्ध न हों
terraform.tfstate– दूरस्थ स्थिति का उपयोग करें (S3, टेराफॉर्म क्लाउड) - Use
terraform planप्रत्येक आवेदन से पहले– परिवर्तनों की समीक्षा करें - प्रदाता संस्करण लॉक करें —
version = "~> 5.0"आश्चर्य को रोकता है - मॉड्यूल का प्रयोग करें– विकास/स्टेजिंग/उत्पादन के लिए DRY बुनियादी ढांचा
- सभी संसाधनों को टैग करें —
Environment,Project,Owner - AWS सीक्रेट मैनेजर में रहस्य संग्रहीत करें– टेराफॉर्म वेरिएबल्स में नहीं
- Use
-targetकिफ़ायत से– राज्य को असंगत छोड़ सकते हैं
टेराफॉर्म अब किसी भी क्लाउड इंफ्रास्ट्रक्चर कार्य के लिए आवश्यक है। सरल EC2 उदाहरणों से प्रारंभ करें, VPC, RDS और ALB तक निर्माण करें, फिर पुन: प्रयोज्य मॉड्यूल निकालें। दूरस्थ स्थिति और कार्यस्थान टीम सहयोग और बहु-पर्यावरण प्रबंधन को सक्षम करते हैं।
🔗 Share this article
✍️ Leave a Comment