انفراسٹرکچر بطور کوڈ ٹیرافارم کے ساتھ: دستی سے خودکار کلاؤڈ مینجمنٹ تک
انفراسٹرکچر کو کوڈ (IaC) کے طور پر استعمال کرنے والی تنظیمیں 90% تیزی سے ماحول فراہم کرتی ہیں اور انفراسٹرکچر کو دستی طور پر مینیج کرنے والوں کے مقابلے میں 60% کم کنفیگریشن سے متعلق بندش کا تجربہ کرتی ہیں۔ Terraform غالب IaC ٹول کے طور پر ابھرا ہے، جس میں 3,000 سے زیادہ فراہم کنندگان ہر بڑے کلاؤڈ پلیٹ فارم اور SaaS کو سپورٹ کر رہے ہیں۔
یہ گائیڈ ویب ایپلیکیشنز، ERP سسٹمز، اور ای کامرس پلیٹ فارمز کے لیے عملی Terraform کے استعمال کا احاطہ کرتا ہے --- آپ کی پہلی وسائل کی تعریف سے لے کر پروڈکشن گریڈ ملٹی انوائرنمنٹ تعیناتیوں تک۔
اہم ٹیک ویز
- ٹیرافارم ورژن کنٹرول کے ذریعے بنیادی ڈھانچے کی تبدیلیوں کو قابل جائزہ، قابل جانچ، اور الٹنے کے قابل بناتا ہے۔
- ریموٹ اسٹیٹ مینجمنٹ تنازعات کو روکتا ہے جب متعدد انجینئرز انفراسٹرکچر میں ترمیم کرتے ہیں۔
- ماڈیولز دوبارہ قابل استعمال نمونوں کو سمیٹتے ہیں، ترتیب کو سینکڑوں لائنوں سے چند پیرامیٹرز تک کم کرتے ہیں۔
- Terraform Cloud یا CI/CD انٹیگریشن محفوظ تبدیلیوں کے لیے لاگو کرنے سے پہلے منصوبہ بندی کو نافذ کرتا ہے
ایس ایم بی کے لیے ٹیرافارم کیوں
دستی انفراسٹرکچر کا مسئلہ
IaC کے بغیر، آپ کا بنیادی ڈھانچے کا علم اس میں رہتا ہے:
- AWS Console کلک پاتھز جن کا کسی نے دستاویز نہیں کیا۔
- ایس ایس ایچ کمانڈز مہینوں پہلے چلتی ہیں جو کسی کو یاد نہیں۔
- کنفیگریشن فائلیں براہ راست سرورز پر ترمیم کی گئیں۔
- "نیٹ ورک کیسے کام کرتا ہے" کا ایک انجینئر کا ذہنی ماڈل
Terraform کے ساتھ، آپ کا بنیادی ڈھانچہ Git میں رہتا ہے۔ ہر تبدیلی ایک پل کی درخواست ہے۔ ہر تعیناتی قابل تولید ہے۔ ہر انجینئر پوری تصویر سمجھ سکتا ہے۔
بنیادی تصورات
| تصور | تفصیل |
|---|---|
| فراہم کنندہ | پلگ ان جو کلاؤڈ پلیٹ فارم کے ساتھ انٹرفیس کرتا ہے (AWS, GCP, Azure, Cloudflare) |
| وسائل | ایک بنیادی ڈھانچے کا جزو (EC2 مثال، RDS ڈیٹا بیس، S3 بالٹی) |
| ڈیٹا ماخذ | موجودہ انفراسٹرکچر کا صرف پڑھنے کا حوالہ |
| متغیر | دوبارہ قابل استعمال کنفیگریشن کے لیے ان پٹ پیرامیٹر |
| آؤٹ پٹ | ٹیرافارم کنفیگریشن سے برآمد شدہ قیمت |
| ریاست | Terraform کیا انتظام کرتا ہے اور اس کی موجودہ خصوصیات کا ریکارڈ |
| ماڈیول | ایک متعین انٹرفیس کے ساتھ وسائل کا دوبارہ قابل استعمال گروپ |
پہلی ٹیرافارم کنفیگریشن
ویب ایپلیکیشن کے لیے AWS VPC اور EC2
# providers.tf
terraform {
required_version = ">= 1.7"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
backend "s3" {
bucket = "ecosire-terraform-state"
key = "production/terraform.tfstate"
region = "us-east-1"
encrypt = true
dynamodb_table = "terraform-locks"
}
}
provider "aws" {
region = var.aws_region
}
# variables.tf
variable "aws_region" {
type = string
default = "us-east-1"
}
variable "environment" {
type = string
default = "production"
}
variable "instance_type" {
type = string
default = "t3.large"
}
# main.tf
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
enable_dns_hostnames = true
enable_dns_support = true
tags = {
Name = "${var.environment}-vpc"
Environment = var.environment
ManagedBy = "terraform"
}
}
resource "aws_subnet" "public" {
count = 2
vpc_id = aws_vpc.main.id
cidr_block = "10.0.${count.index + 1}.0/24"
availability_zone = data.aws_availability_zones.available.names[count.index]
map_public_ip_on_launch = true
tags = {
Name = "${var.environment}-public-${count.index + 1}"
}
}
resource "aws_instance" "app" {
ami = data.aws_ami.ubuntu.id
instance_type = var.instance_type
subnet_id = aws_subnet.public[0].id
vpc_security_group_ids = [aws_security_group.app.id]
key_name = aws_key_pair.deploy.key_name
root_block_device {
volume_size = 50
volume_type = "gp3"
encrypted = true
}
tags = {
Name = "${var.environment}-app"
Environment = var.environment
}
}
resource "aws_db_instance" "postgres" {
identifier = "${var.environment}-db"
engine = "postgres"
engine_version = "17"
instance_class = "db.t3.medium"
allocated_storage = 50
max_allocated_storage = 200
storage_encrypted = true
db_name = "ecosire"
username = "app"
password = var.db_password
vpc_security_group_ids = [aws_security_group.db.id]
db_subnet_group_name = aws_db_subnet_group.main.name
backup_retention_period = 7
backup_window = "03:00-04:00"
maintenance_window = "sun:04:00-sun:05:00"
skip_final_snapshot = false
final_snapshot_identifier = "${var.environment}-db-final"
tags = {
Environment = var.environment
}
}
دوبارہ قابل استعمال انفراسٹرکچر کے لیے ماڈیول
ویب ایپلیکیشن ماڈیول بنانا
# modules/web-app/main.tf
variable "name" {
type = string
}
variable "environment" {
type = string
}
variable "instance_type" {
type = string
default = "t3.medium"
}
variable "vpc_id" {
type = string
}
variable "subnet_ids" {
type = list(string)
}
resource "aws_lb" "app" {
name = "${var.name}-${var.environment}-alb"
internal = false
load_balancer_type = "application"
security_groups = [aws_security_group.alb.id]
subnets = var.subnet_ids
}
resource "aws_lb_target_group" "app" {
name = "${var.name}-${var.environment}-tg"
port = 3000
protocol = "HTTP"
vpc_id = var.vpc_id
health_check {
path = "/health"
healthy_threshold = 2
unhealthy_threshold = 3
interval = 30
}
}
resource "aws_autoscaling_group" "app" {
name = "${var.name}-${var.environment}-asg"
min_size = 2
max_size = 10
desired_capacity = 2
vpc_zone_identifier = var.subnet_ids
target_group_arns = [aws_lb_target_group.app.arn]
launch_template {
id = aws_launch_template.app.id
version = "$Latest"
}
tag {
key = "Name"
value = "${var.name}-${var.environment}"
propagate_at_launch = true
}
}
output "alb_dns_name" {
value = aws_lb.app.dns_name
}
ماڈیول کا استعمال
# environments/production/main.tf
module "web" {
source = "../../modules/web-app"
name = "ecosire-web"
environment = "production"
instance_type = "t3.large"
vpc_id = module.network.vpc_id
subnet_ids = module.network.public_subnet_ids
}
module "api" {
source = "../../modules/web-app"
name = "ecosire-api"
environment = "production"
instance_type = "t3.large"
vpc_id = module.network.vpc_id
subnet_ids = module.network.public_subnet_ids
}
ریاستی انتظام
S3 کے ساتھ ریموٹ اسٹیٹ
# Bootstrap: create the state bucket and DynamoDB table manually or with a separate config
resource "aws_s3_bucket" "terraform_state" {
bucket = "ecosire-terraform-state"
lifecycle {
prevent_destroy = true
}
}
resource "aws_s3_bucket_versioning" "terraform_state" {
bucket = aws_s3_bucket.terraform_state.id
versioning_configuration {
status = "Enabled"
}
}
resource "aws_dynamodb_table" "terraform_locks" {
name = "terraform-locks"
billing_mode = "PAY_PER_REQUEST"
hash_key = "LockID"
attribute {
name = "LockID"
type = "S"
}
}
DynamoDB کے ذریعے اسٹیٹ لاکنگ دو انجینئرز کو بیک وقت terraform apply چلانے سے روکتا ہے، جو ریاست کو خراب کر سکتا ہے۔
اسٹیٹ فائل سیکیورٹی
Terraform اسٹیٹ فائل میں ڈیٹا بیس پاس ورڈز، API کیز، اور وسائل کی IDs سمیت حساس معلومات شامل ہیں۔ اس کی حفاظت کریں:
- باقی میں خفیہ کاری: S3 بالٹی ورژننگ + سرور سائیڈ انکرپشن
- ٹرانزٹ میں انکرپٹ: HTTPS صرف ریاستی رسائی کے لیے
- رسائی کو محدود کریں: IAM کی پالیسیاں یہ محدود کرتی ہیں کہ کون پڑھ/لکھ سکتا ہے۔
- گٹ کے ساتھ کبھی بھی عہد نہ کریں: اسٹیٹ فائلز کو کبھی بھی ورژن کنٹرول میں نہیں ہونا چاہیے۔
- ورژننگ کو فعال کریں: S3 ورژننگ خراب حالت سے بازیافت کی اجازت دیتی ہے۔
CI/CD انٹیگریشن
گٹ ہب ایکشنز ٹیرافارم پائپ لائن
name: Terraform
on:
pull_request:
paths: ['infrastructure/**']
push:
branches: [main]
paths: ['infrastructure/**']
jobs:
plan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
- name: Terraform Init
run: terraform init
working-directory: infrastructure/environments/production
- name: Terraform Plan
run: terraform plan -out=tfplan
working-directory: infrastructure/environments/production
- name: Comment PR with plan
if: github.event_name == 'pull_request'
uses: actions/github-script@v7
with:
script: |
const plan = require('fs').readFileSync('infrastructure/environments/production/tfplan.txt', 'utf8');
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `## Terraform Plan\n\`\`\`\n${plan}\n\`\`\``
});
apply:
needs: plan
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
environment: production
steps:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
- name: Terraform Apply
run: terraform apply -auto-approve
working-directory: infrastructure/environments/production
کثیر ماحول کی حکمت عملی
| ماحولیات | مقصد | مثال کے سائز | لاگت کا ہدف |
|---|---|---|---|
| ترقی | فیچر ٹیسٹنگ | t3.micro / t3.small | <$100/مہینہ |
| سٹیجنگ | پری پروڈکشن کی توثیق | آئینے کی پیداوار (چھوٹا) | ~30% پیداوار |
| پیداوار | لائیو ٹریفک | لوڈ کے لیے دائیں سائز کا | آپٹمائزڈ |
Terraform ورک اسپیسز یا فی ماحول کے لیے علیحدہ ڈائریکٹریز استعمال کریں:
infrastructure/
modules/
web-app/
database/
network/
environments/
development/
main.tf
terraform.tfvars
staging/
main.tf
terraform.tfvars
production/
main.tf
terraform.tfvars
اکثر پوچھے گئے سوالات
Terraform یا Pulumi --- ہمیں کس کا انتخاب کرنا چاہیے؟
Terraform اگر آپ کی ٹیم میں آپریشن انجینئرز شامل ہیں جو اعلانیہ ترتیب کو ترجیح دیتے ہیں۔ پلومی اگر آپ کی ٹیم ڈویلپر بھاری ہے اور ٹائپ اسکرپٹ یا ازگر میں بنیادی ڈھانچہ لکھنے کو ترجیح دیتی ہے۔ Terraform میں ایک بڑا ماحولیاتی نظام اور زیادہ کمیونٹی ماڈیولز ہیں۔ پلومی میں ابتدائی سیکھنے کا منحنی خطوط ہے لیکن یہ پیچیدہ منطق کے لیے زیادہ لچکدار ہے۔
ہم موجودہ انفراسٹرکچر کو Terraform میں کیسے درآمد کرتے ہیں؟
موجودہ وسائل کو Terraform مینجمنٹ کے تحت لانے کے لیے terraform import استعمال کریں۔ مثال کے طور پر: terraform import aws_instance.app i-1234567890abcdef0۔ امپورٹ کرنے کے بعد، مماثل کنفیگریشن لکھیں۔ ٹیرافارم 1.5+ بلک امپورٹس کے لیے کنفیگریشن فائلوں میں امپورٹ بلاکس کو سپورٹ کرتا ہے۔
ہم Terraform میں رازوں کو کیسے ہینڈل کرتے ہیں؟
Terraform فائلوں کے راز کو کبھی بھی خفیہ نہ کریں۔ استعمال کریں۔ حساس متغیرات کو sensitive = true سے نشان زد کریں تاکہ انہیں پلان آؤٹ پٹ میں ظاہر ہونے سے روکا جا سکے۔
Terraform کے انتظام کی قیمت کیا ہے؟
Terraform بذات خود مفت اور اوپن سورس ہے۔ Terraform Cloud کے پاس 5 تک صارفین کے لیے ریموٹ اسٹیٹ اور پلان/ اپلائی کرنے کے لیے ایک مفت ٹائر ہے۔ بنیادی لاگت سیکھنے کا منحنی خطوط ہے (ایک تجربہ کار انجینئر کے لیے 20-40 گھنٹے) اور جاری دیکھ بھال (فی مہینہ 2-4 گھنٹے)۔ یہ مینوئل انفراسٹرکچر مینجمنٹ پر بچائے گئے وقت سے پورا ہوتا ہے۔
آگے کیا آتا ہے۔
ٹیرافارم خودکار بنیادی ڈھانچے کی بنیاد فراہم کرتا ہے۔ اسے خودکار تعیناتی کے لیے CI/CD پائپ لائنز، آپریشنل مرئیت کے لیے مانیٹرنگ اور لچک کے لیے ڈیزاسٹر ریکوری کے ساتھ جوڑیں۔
بنیادی ڈھانچے کی آٹومیشن مشاورت کے لیے ECOSIRE سے رابطہ کریں، یا مکمل روڈ میپ کے لیے ہماری DevOps گائیڈ برائے چھوٹے کاروبار کو دریافت کریں۔
ECOSIRE کے ذریعہ شائع کیا گیا -- کاروباروں کو کلاؤڈ انفراسٹرکچر کو خودکار بنانے میں مدد کرنا۔
تحریر
ECOSIRE Research and Development Team
ECOSIRE میں انٹرپرائز گریڈ ڈیجیٹل مصنوعات بنانا۔ Odoo انٹیگریشنز، ای کامرس آٹومیشن، اور AI سے چلنے والے کاروباری حل پر بصیرت شیئر کرنا۔
متعلقہ مضامین
Accounts Payable Automation: Cut Processing Costs by 80 Percent
Implement accounts payable automation to reduce invoice processing costs from $15 to $3 per invoice with OCR, three-way matching, and ERP workflows.
AI in Accounting and Bookkeeping Automation: The CFO Implementation Guide
Automate accounting with AI for invoice processing, bank reconciliation, expense management, and financial reporting. 85% faster close cycles.
AI Agents for Business Process Automation: From Chatbots to Autonomous Workflows
How AI agents automate complex business processes across sales, operations, finance, and customer service with multi-step reasoning and system integration.