ٹیرافارم کے ساتھ کلاؤڈ انفراسٹرکچر کا انتظام کیسے کریں۔

ٹیرافارم کے ساتھ کلاؤڈ انفراسٹرکچر کا انتظام کیسے کریں۔

اس مضمون میں ہم دیکھیں گے کہ Terraform کس چیز پر مشتمل ہے، اور آہستہ آہستہ اپنا بنیادی ڈھانچہ بھی شروع کریں گے۔ VMware کے ساتھ کلاؤڈ میں - ہم مختلف مقاصد کے لیے تین VM تیار کریں گے: پراکسی، فائل اسٹوریج اور CMS۔

ہر چیز کے بارے میں تفصیل سے اور تین مراحل میں:

1. Terraform - تفصیل، فوائد اور اجزاء

Terraform ایک IaC (Infrastructure-as-Code) ٹول ہے جو کوڈ کا استعمال کرتے ہوئے ورچوئل انفراسٹرکچر کی تعمیر اور انتظام کرتا ہے۔

ہم نے ٹول کے ساتھ کام کرنے کے کئی فوائد نوٹ کیے:

  • نئے کرایہ داروں کی تعیناتی کی رفتار (اپنی مرضی کے مطابق ورچوئل ماحول)۔ عام طور پر، جتنے زیادہ نئے کلائنٹس ہوتے ہیں، اتنے ہی زیادہ "کلکس" تکنیکی معاون عملے کو نئے وسائل شائع کرنے کے لیے کرنے کی ضرورت ہوتی ہے۔ Terraform کے ساتھ، صارفین تکنیکی مدد کی ضرورت کے بغیر یا مشین کو خود بند کیے بغیر ورچوئل مشین کی ترتیبات (مثال کے طور پر، OS کو خود بخود بند کرنا اور ورچوئل ڈسک پارٹیشن کو بڑھانا) تبدیل کر سکتے ہیں۔

  • ایکٹیویشن پلان کی فوری تصدیق نیا کرایہ دار۔ انفراسٹرکچر کوڈ کی تفصیل کا استعمال کرتے ہوئے، ہم فوری طور پر چیک کر سکتے ہیں کہ کیا شامل کیا جائے گا اور کس ترتیب میں، اور ساتھ ہی یہ یا وہ ورچوئل مشین یا ورچوئل نیٹ ورک جس میں ورچوئل مشینوں کے کنکشن ہوں گے، کس حتمی حالت میں ہوں گے۔

  • سب سے زیادہ مقبول کلاؤڈ پلیٹ فارم کی وضاحت کرنے کی صلاحیت۔ آپ ٹول استعمال کر سکتے ہیں۔ Amazon اور Google Cloud سے، VMware vCloud ڈائریکٹر پر مبنی نجی پلیٹ فارمز تک، IaaS، SaaS اور PaaS حل کے اندر خدمات پیش کرتے ہیں۔

  • متعدد کلاؤڈ فراہم کنندگان کا نظم کریں۔ اور ان کے درمیان بنیادی ڈھانچے کو تقسیم کریں تاکہ فالٹ ٹولرنس کو بہتر بنایا جا سکے، ایک ہی کنفیگریشن کا استعمال کرتے ہوئے کلاؤڈ وسائل کی تخلیق، تشخیص اور ان کا نظم کریں۔

  • ڈیمو اسٹینڈز بنانے کے لیے آسان استعمال سافٹ ویئر ٹیسٹنگ اور ڈیبگنگ کے لیے۔ آپ ٹیسٹنگ ڈیپارٹمنٹ کے لیے اسٹینڈز بنا اور منتقل کر سکتے ہیں، متوازی طور پر مختلف ماحول میں ٹیسٹ سافٹ ویئر، اور صرف ایک ریسورس بلڈ پلان بنا کر وسائل کو فوری طور پر تبدیل اور حذف کر سکتے ہیں۔

"ٹیریریم" ٹیرافارم

ہم نے مختصراً ٹول کے فوائد کے بارے میں بات کی، اب آئیے اسے اس کے اجزاء میں تقسیم کرتے ہیں۔

فراہم کرنے والے 

Terraform میں، تقریبا کسی بھی قسم کے بنیادی ڈھانچے کو وسائل کے طور پر پیش کیا جا سکتا ہے۔ وسائل اور API پلیٹ فارم کے درمیان تعلق فراہم کنندہ ماڈیولز کے ذریعے فراہم کیا جاتا ہے، جو آپ کو ایک مخصوص پلیٹ فارم کے اندر وسائل بنانے کی اجازت دیتے ہیں، مثال کے طور پر، Azure یا VMware vCloud Director۔

پروجیکٹ کے حصے کے طور پر، آپ مختلف پلیٹ فارمز پر مختلف فراہم کنندگان کے ساتھ بات چیت کر سکتے ہیں۔

وسائل (وسائل کی تفصیل)۔

وسائل کی تفصیل آپ کو پلیٹ فارم کے اجزاء کا انتظام کرنے کی اجازت دیتی ہے، جیسے کہ ورچوئل مشینیں یا نیٹ ورک۔ 

آپ خود VMware vCloud ڈائریکٹر فراہم کنندہ کے لیے وسائل کی تفصیل بنا سکتے ہیں اور اس تفصیل کو کسی بھی ہوسٹنگ فراہم کنندہ کے ساتھ وسائل بنانے کے لیے استعمال کر سکتے ہیں جو vCloud Director استعمال کرتا ہے۔ آپ کو صرف تصدیقی پیرامیٹرز اور نیٹ ورک کنکشن کے پیرامیٹرز کو مطلوبہ ہوسٹنگ فراہم کنندہ میں تبدیل کرنے کی ضرورت ہے

رزق دینے والے۔

یہ جزو ورچوئل مشینیں بنانے کے بعد آپریٹنگ سسٹم کی ابتدائی تنصیب اور دیکھ بھال کے لیے آپریشنز کرنا ممکن بناتا ہے۔ ایک بار جب آپ نے ایک ورچوئل مشین ریسورس بنا لیا، تو آپ پروویژنرز کو SSH کے ذریعے کنفیگر اور کنیکٹ کرنے، آپریٹنگ سسٹم کو اپ ڈیٹ کرنے، اور اسکرپٹ کو ڈاؤن لوڈ اور چلانے کے لیے استعمال کر سکتے ہیں۔ 

ان پٹ اور آؤٹ پٹ متغیرات۔

ان پٹ متغیرات - کسی بھی قسم کے بلاک کے لیے ان پٹ متغیرات۔ 

آؤٹ پٹ متغیرات آپ کو وسائل بنانے کے بعد اقدار کو بچانے کی اجازت دیتے ہیں اور دوسرے ماڈیولز میں ان پٹ متغیر کے طور پر استعمال کیا جا سکتا ہے، مثال کے طور پر پروویژنرز بلاک میں۔

ریاستیں.

ریاستوں کی فائلیں فراہم کنندہ پلیٹ فارم کے وسائل کی ترتیب کے بارے میں معلومات کو ذخیرہ کرتی ہیں۔ جب پلیٹ فارم پہلی بار بنایا جاتا ہے، وسائل کے بارے میں کوئی معلومات نہیں ہوتی ہیں اور کسی بھی آپریشن سے پہلے، Terraform پہلے سے بیان کردہ وسائل کے حقیقی انفراسٹرکچر کے ساتھ ریاست کو اپ ڈیٹ کرتا ہے۔

ریاستوں کا بنیادی مقصد یہ ہے کہ پہلے سے تخلیق کردہ وسائل کی اشیاء کے ایک گروپ کو بچانا ہے تاکہ اضافی وسائل اور اشیاء کی ترتیب کا موازنہ کیا جا سکے تاکہ پلیٹ فارم میں بار بار تخلیق اور تبدیلیوں سے بچا جا سکے۔

پہلے سے طے شدہ طور پر، ریاستی معلومات مقامی terraform.tfstate فائل میں محفوظ کی جاتی ہیں، لیکن اگر ضروری ہو تو، ٹیم کے کام کے لیے ریموٹ اسٹوریج کا استعمال ممکن ہے۔

آپ دوسرے وسائل کے ساتھ مزید تعامل کرنے کے لیے موجودہ پلیٹ فارم کے وسائل کو بھی درآمد کر سکتے ہیں جو بدلے میں Terraform کی مدد کے بغیر بنائے گئے تھے۔  

2. بنیادی ڈھانچے کی تخلیق

اجزاء کو ترتیب دیا گیا ہے، اب Terraform کا استعمال کرتے ہوئے ہم آہستہ آہستہ تین ورچوئل مشینوں کے ساتھ ایک بنیادی ڈھانچہ بنائیں گے۔ پہلا nginx پراکسی سرور نصب کے ساتھ، دوسرا نیکسٹ کلاؤڈ پر مبنی فائل اسٹوریج کے ساتھ اور تیسرا CMS Bitrix کے ساتھ۔

ہم اپنی مثال کے ذریعے کوڈ لکھیں گے اور اس پر عمل کریں گے۔ بادل VMware vCloud ڈائریکٹر پر. ہمارے صارفین کو آرگنائزیشن ایڈمنسٹریٹر کے حقوق کے ساتھ ایک اکاؤنٹ ملتا ہے۔ اگر آپ کسی دوسرے VMware کلاؤڈ میں انہی حقوق کے ساتھ اکاؤنٹ استعمال کرتے ہیں، تو آپ ہماری مثالوں سے کوڈ کو دوبارہ پیش کر سکتے ہیں۔ جاؤ!

سب سے پہلے، آئیے اپنے نئے پروجیکٹ کے لیے ایک ڈائرکٹری بنائیں جس میں انفراسٹرکچر کو بیان کرنے والی فائلیں رکھی جائیں گی۔

mkdir project01

اگلا، ہم بنیادی ڈھانچے کے اجزاء کی وضاحت کرتے ہیں۔ Terraform فائلوں میں بیان کی بنیاد پر تعلقات اور فائلوں پر کارروائی کرتا ہے۔ فائلوں کا نام بلاکس کے بیان کردہ مقصد کی بنیاد پر رکھا جا سکتا ہے، مثال کے طور پر network.tf - بنیادی ڈھانچے کے لیے نیٹ ورک کے پیرامیٹرز کو بیان کرتا ہے۔

اپنے بنیادی ڈھانچے کے اجزاء کو بیان کرنے کے لیے، ہم نے درج ذیل فائلیں بنائیں:

فائلوں کی فہرست۔

main.tf - ورچوئل ماحول کے لیے پیرامیٹرز کی تفصیل - ورچوئل مشینیں، ورچوئل کنٹینرز؛

network.tf - ورچوئل نیٹ ورک کے پیرامیٹرز اور NAT اور فائر وال کے قواعد کی تفصیل؛

variables.tf - متغیرات کی فہرست جو ہم استعمال کرتے ہیں۔

vcd.tfvars - VMware vCloud ڈائریکٹر ماڈیول کے لیے پروجیکٹ متغیر اقدار۔

ٹیرافارم میں کنفیگریشن لینگویج اعلانیہ ہے اور پروویژنر بلاکس کے علاوہ بلاکس کی ترتیب سے کوئی فرق نہیں پڑتا، کیونکہ اس بلاک میں ہم بنیادی ڈھانچے کی تیاری کے دوران ان احکامات کی وضاحت کرتے ہیں جن پر عمل درآمد کیا جائے گا اور انہیں ترتیب سے عمل میں لایا جائے گا۔

بلاک ڈھانچہ۔

<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

بلاکس کو بیان کرنے کے لیے، اس کی اپنی پروگرامنگ لینگویج HCL (HashiCorp Configuration Language) استعمال کی جاتی ہے؛ JSON کا استعمال کرتے ہوئے انفراسٹرکچر کو بیان کرنا ممکن ہے۔ آپ نحو کے بارے میں مزید جان سکتے ہیں۔ ڈویلپر کی ویب سائٹ پر پڑھیں.

ماحولیاتی متغیر کنفیگریشن، variables.tf اور vcd.tfvars

سب سے پہلے، آئیے دو فائلیں بنائیں جو VMware vCloud ڈائریکٹر ماڈیول کے لیے تمام استعمال شدہ متغیرات اور ان کی اقدار کی فہرست کو بیان کرتی ہیں۔ سب سے پہلے، variables.tf فائل بنائیں۔

variables.tf فائل کے مشمولات۔

variable "vcd_org_user" {

  description = "vCD Tenant User"

}

variable "vcd_org_password" {

  description = "vCD Tenant Password"

}

variable "vcd_org" {

  description = "vCD Tenant Org"

}

variable "vcd_org_vdc" {

  description = "vCD Tenant VDC"

}

variable "vcd_org_url" {

  description = "vCD Tenant URL"

}

variable "vcd_org_max_retry_timeout" {

  default = "60"

}

variable "vcd_org_allow_unverified_ssl" {

  default = "true"

}

variable "vcd_org_edge_name" {

  description = "vCD edge name"

}

variable "vcd_org_catalog" {

  description = "vCD public catalog"

}

variable "vcd_template_os_centos7" {

  description = "OS CentOS 7"

  default = "CentOS7"

}

variable "vcd_org_ssd_sp" {

  description = "Storage Policies"

  default = "Gold Storage Policy"

}

variable "vcd_org_hdd_sp" {

  description = "Storage Policies"

  default = "Bronze Storage Policy"

}

variable "vcd_edge_local_subnet" {

  description = "Organization Network Subnet"

}

variable "vcd_edge_external_ip" {

  description = "External public IP"

}

variable "vcd_edge_local_ip_nginx" {}

variable "vcd_edge_local_ip_bitrix" {}

variable "vcd_edge_local_ip_nextcloud" {}

variable "vcd_edge_external_network" {}

متغیر اقدار جو ہمیں فراہم کنندہ سے موصول ہوتی ہیں۔

  • vcd_org_user — تنظیم کے منتظم کے حقوق کے ساتھ صارف نام،

  • vcd_org_password — صارف کا پاس ورڈ،

  • vcd_org — تنظیم کا نام،

  • vcd_org_vdc — ورچوئل ڈیٹا سینٹر کا نام،

  • vcd_org_url - API URL،

  • vcd_org_edge_name — ورچوئل روٹر کا نام،

  • vcd_org_catalog — ورچوئل مشین ٹیمپلیٹس والی ڈائریکٹری کا نام،

  • vcd_edge_external_ip — عوامی IP پتہ،

  • vcd_edge_external_network — بیرونی نیٹ ورک کا نام،

  • vcd_org_hdd_sp — HDD اسٹوریج پالیسی کا نام،

  • vcd_org_ssd_sp — SSD اسٹوریج پالیسی کا نام۔

اور ہمارے متغیرات درج کریں:

  • vcd_edge_local_ip_nginx — NGINX والی ورچوئل مشین کا IP پتہ،

  • vcd_edge_local_ip_bitrix - 1C والی ورچوئل مشین کا IP پتہ: Bitrix،

  • vcd_edge_local_ip_nextcloud — نیکسٹ کلاؤڈ والی ورچوئل مشین کا IP ایڈریس۔

دوسری فائل کے ساتھ ہم vcd.tfvars فائل میں VMware vCloud ڈائریکٹر ماڈیول کے لیے متغیرات بناتے اور بتاتے ہیں: آئیے یاد کریں کہ ہم اپنی مثال میں استعمال کرتے ہیں۔ اپنے کلاؤڈ mClouds، اگر آپ کسی دوسرے فراہم کنندہ کے ساتھ کام کرتے ہیں، تو ان کے ساتھ اقدار کو چیک کریں۔ 

vcd.tfvars فائل کے مشمولات۔

vcd_org_url = "https://vcloud.mclouds.ru/api"

vcd_org_user = "orgadmin"

vcd_org_password = "*"

vcd = "org"

vcd_org_vdc = "orgvdc"

vcd_org_maxretry_timeout = 60

vcd_org_allow_unverified_ssl = true

vcd_org_catalog = "Templates"

vcd_templateos_centos7 = "CentOS7"

vcd_org_ssd_sp = "Gold Storage Policy"

vcd_org_hdd_sp = "Bronze Storage Policy"

vcd_org_edge_name = "MCLOUDS-EDGE"

vcd_edge_external_ip = "185.17.66.1"

vcd_edge_local_subnet = "192.168.110.0/24"

vcd_edge_local_ip_nginx = "192.168.110.1"

vcd_edge_local_ip_bitrix = "192.168.110.10"

vcd_edge_local_ip_nextcloud = "192.168.110.11"

vcd_edge_external_network = "NET-185-17-66-0"

نیٹ ورک کنفیگریشن، network.tf.

ماحولیاتی متغیرات سیٹ ہو چکے ہیں، اب ہم ورچوئل مشین کنکشن سکیم ترتیب دیں گے - ہم ہر ورچوئل مشین کو ایک پرائیویٹ IP ایڈریس تفویض کریں گے اور بندرگاہوں کو بیرونی نیٹ ورک پر "آگے بڑھانے" کے لیے Destination NAT کا استعمال کریں گے۔ انتظامی بندرگاہوں تک رسائی کو محدود کرنے کے لیے، ہم صرف اپنے IP پتے کے لیے رسائی مقرر کریں گے۔

ٹیرافارم کے ساتھ کلاؤڈ انفراسٹرکچر کا انتظام کیسے کریں۔ٹیرافارم پلیٹ فارم کے لیے نیٹ ورک ڈایاگرام بنایا جا رہا ہے۔

ہم net_lan01 نام کے ساتھ ایک ورچوئل تنظیمی نیٹ ورک بناتے ہیں، پہلے سے طے شدہ گیٹ وے: 192.168.110.254، اور ایڈریس اسپیس: 192.168.110.0/24 کے ساتھ۔

ہم ایک ورچوئل نیٹ ورک کی وضاحت کرتے ہیں۔

resource "vcd_network_routed" "net" {

  name = "net_lan01"

  edge_gateway = var.vcd_org_edge_name

  gateway = "192.168.110.254"

  dns1 = "1.1.1.1"

  dns2 = "8.8.8.8"

 static_ip_pool {

start_address = "192.168.110.1"

end_address = "192.168.110.253"

  }

}

آئیے فائر وال کے اصول بناتے ہیں جو ورچوئل مشینوں کو انٹرنیٹ تک رسائی کی اجازت دیتے ہیں۔ اس بلاک کے اندر، کلاؤڈ میں موجود تمام ورچوئل وسائل کو انٹرنیٹ تک رسائی حاصل ہوگی:

ہم انٹرنیٹ تک VM تک رسائی کے اصول بیان کرتے ہیں۔

resource "vcd_nsxv_firewall_rule" "fw_internet_access" {

  edge_gateway   = var.vcdorgedgename

  name = "Internet Access"

  source {

gateway_interfaces = ["internal"]

  }

  destination {

gateway_interfaces = ["external"]

  }

  service {

protocol = "any"

  }

  depends_on = [vcdnetworkrouted.net]

}

انحصار قائم کرنے کے بعد کہ vcdnetworkrouted.net بلاک پر کارروائی کرنے کے بعد، ہم vcdnsxvfirewallrule بلاک کو ترتیب دینے کے لیے آگے بڑھتے ہیں۔، کے ذریعے منحصرکرتاہے. ہم اس اختیار کو استعمال کرتے ہیں کیونکہ کچھ انحصار کنفیگریشن میں واضح طور پر پہچانے جا سکتے ہیں۔

اس کے بعد، ہم ایسے اصول بنائیں گے جو بیرونی نیٹ ورک سے بندرگاہوں تک رسائی کی اجازت دیتے ہیں اور SSH کے ذریعے سرورز سے جڑنے کے لیے ہمارے IP ایڈریس کی نشاندہی کرتے ہیں۔ کسی بھی انٹرنیٹ صارف کو ویب سرور پر پورٹ 80 اور 443 تک رسائی حاصل ہے، اور 90.1.15.1 کے IP ایڈریس والے صارف کو ورچوئل سرورز کی SSH پورٹس تک رسائی حاصل ہے۔

بیرونی نیٹ ورک سے بندرگاہوں تک رسائی کی اجازت دیں۔

resource "vcd_nsxv_firewall_rule" "fwnatports" {

  edge_gateway   = var.vcd_org_edge_name

  name = "HTTPs Access"

  source {

gateway_interfaces = ["external"]

  }

  destination {

  gateway_interfaces = ["internal"]

  }

  service {

protocol = "tcp"

port = "80"

  }

  service {

protocol = "tcp"

port = "443"

  }

  depends_on = [vcd_network_routed.net]

}

resource "vcd_nsxv_firewall_rule" "fw_nat_admin_ports" {

  edge_gateway   = var.vcd_org_edge_name

  name = "Admin Access"

  source {

  ip_addresses = [ "90.1.15.1" ]

  }

  destination {

  gateway_interfaces = ["internal"]

  }

  service {

protocol = "tcp"

port = "58301"

  }

  service {

protocol = "tcp"

port = "58302"

  }

  service {

protocol = "tcp"

port = "58303"

  }

  depends_on = [vcd_network_routed.net]

}

ہم کلاؤڈ لوکل نیٹ ورک سے انٹرنیٹ تک رسائی کے لیے سورس NAT قوانین بناتے ہیں:

ہم ماخذ NAT قواعد کی وضاحت کرتے ہیں۔

resource "vcd_nsxv_snat" "snat_local" {

edge_gateway = var.vcd_org_edge_name

  network_type = "ext"

  network_name = var.vcdedgeexternalnetwork

  original_address   = var.vcd_edge_local_subnet

translated_address = var.vcd_edge_external_ip

  depends_on = [vcd_network_routed.net]

}

اور نیٹ ورک بلاک کی ترتیب کو مکمل کرنے کے لیے، ہم بیرونی نیٹ ورک سے خدمات تک رسائی کے لیے Destination NAT کے اصول شامل کرتے ہیں:

منزل کے NAT قواعد شامل کرنا۔

resource "vcd_nsxv_dnat" "dnat_tcp_nginx_https" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

  description = "NGINX HTTPs"

original_address = var.vcd_edge_external_ip
original_port = 443

translated_address = var.vcd_edge_local_ip_nginx
translated_port = 443
protocol = "tcp"

depends_on = [vcd_network_routed.net]
}
resource "vcd_nsxv_dnat" "dnat_tcp_nginx_http" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "NGINX HTTP"

original_address = var.vcd_edge_external_ip
original_port = 80

translated_address = var.vcd_edge_local_ip_nginx
translated_port = 80
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

Nginx کے تحت SSH سرور میں پورٹ ترجمہ کے لیے NAT اصول شامل کریں۔

resource "vcd_nsxv_dnat" "dnat_tcp-nginx_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "SSH NGINX"

original_address = var.vcd_edge_external_ip
original_port = 58301

translated_address = var.vcd_edge_local_ip_nginx
translated_port = 22
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

1C-Bitrix کے ساتھ SSH سرور میں پورٹ ترجمہ کے لیے NAT اصول شامل کریں۔

resource "vcd_nsxv_dnat" "dnat_tcp_bitrix_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "SSH Bitrix"

original_address = var.vcd_edge_external_ip
original_port = 58302

translated_address = var.vcd_edge_local_ip_bitrix
translated_port = 22
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

Nextcloud کے ساتھ SSH سرور میں پورٹ ترجمہ کے لیے NAT اصول شامل کریں۔

resource "vcd_nsxv_dnat" "dnat_tcp_nextcloud_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "SSH Nextcloud"

original_address = var.vcd_edge_external_ip
original_port = 58303 translated_address = var.vcd_edge_local_ip_nextcloud
translated_port = 22
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

Main.tf ورچوئل ماحول کی ترتیب

جیسا کہ ہم نے مضمون کے آغاز میں منصوبہ بنایا تھا، ہم تین ورچوئل مشینیں بنائیں گے۔ انہیں "گیسٹ کسٹمائزیشن" کا استعمال کرتے ہوئے تیار کیا جائے گا۔ ہم نیٹ ورک کے پیرامیٹرز کو ان ترتیبات کے مطابق سیٹ کریں گے جو ہم نے بیان کی ہیں، اور صارف کا پاس ورڈ خود بخود تیار ہو جائے گا۔

آئیے اس vApp کی وضاحت کرتے ہیں جس میں ورچوئل مشینیں واقع ہوں گی اور ان کی ترتیب۔

ٹیرافارم کے ساتھ کلاؤڈ انفراسٹرکچر کا انتظام کیسے کریں۔ورچوئل مشین کنفیگریشن

آئیے ایک vApp کنٹینر بنائیں۔ تاکہ ہم فوری طور پر vApp اور VM کو ورچوئل نیٹ ورک سے جوڑ سکیں، ہم انحصار_on پیرامیٹر بھی شامل کر سکتے ہیں:

ایک کنٹینر بنائیں

resource "vcd_vapp" "vapp" {
name = "web"
power_on = "true" depends_on = [vcd_network_routed.net]

}

آئیے تفصیل کے ساتھ ایک ورچوئل مشین بنائیں

resource "vcd_vapp_vm" "nginx" {

vapp_name = vcd_vapp.vapp.name

name = "nginx"

catalog_name = var.vcd_org_catalog

template_name = var.vcd_template_os_centos7

storage_profile = var.vcd_org_ssd_sp

memory = 8192

cpus = 1

cpu_cores = 1

network {

type = "org"

name = vcd_network_routed.net.name

is_primary = true

adapter_type = "VMXNET3"

ip_allocation_mode = "MANUAL"

ip = var.vcd_edge_local_ip_nginx

}

override_template_disk {

bus_type = "paravirtual"

size_in_mb = "32768"

bus_number = 0

unit_number = 0

storage_profile = var.vcd_org_ssd_sp

}

}

VM تفصیل میں اہم پیرامیٹرز:

  • نام - ورچوئل مشین کا نام،

  • vappname - vApp کا نام جس میں نیا VM شامل کرنا ہے،

  • catalogname / templatename - کیٹلاگ کا نام اور ورچوئل مشین ٹیمپلیٹ کا نام،

  • اسٹوریج پروفائل - ڈیفالٹ اسٹوریج پالیسی۔

نیٹ ورک بلاک پیرامیٹرز:

  • قسم - منسلک نیٹ ورک کی قسم،

  • نام - VM کو کس ورچوئل نیٹ ورک سے جوڑنا ہے،

  • isprimary - بنیادی نیٹ ورک اڈاپٹر،

  • ipallocation_mode — MANUAL/DHCP/POOL ایڈریس ایلوکیشن موڈ،

  • ip — ورچوئل مشین کے لیے IP ایڈریس، ہم اسے دستی طور پر بیان کریں گے۔

override_template_disk بلاک:

  • sizeinmb — ورچوئل مشین کے لیے بوٹ ڈسک کا سائز

  • اسٹوریج_پروفائل - ڈسک کے لیے اسٹوریج کی پالیسی

آئیے نیکسٹ کلاؤڈ فائل اسٹوریج کی تفصیل کے ساتھ دوسرا VM بنائیں

resource "vcd_vapp_vm" "nextcloud" {

vapp_name = vcd_vapp.vapp.name

name = "nextcloud"

catalog_name = var.vcd_org_catalog

template_name = var.vcd_template_os_centos7

storage_profile = var.vcd_org_ssd_sp

memory = 8192

cpus = 1

cpu_cores = 1

network {

type = "org"

name = vcd_network_routed.net.name

is_primary = true

adapter_type = "VMXNET3"

ip_allocation_mode = "MANUAL"

ip = var.vcd_edge_local_ip_nextcloud

}

override_template_disk {

bus_type = "paravirtual"

size_in_mb = "32768"

bus_number = 0

unit_number = 0

storage_profile = var.vcd_org_ssd_sp

}

}

resource "vcd_vm_internal_disk" "disk1" {

vapp_name = vcd_vapp.vapp.name

vm_name = "nextcloud"

bus_type = "paravirtual"

size_in_mb = "102400"

bus_number = 0

unit_number = 1

storage_profile = var.vcd_org_hdd_sp

allow_vm_reboot = true

depends_on = [ vcd_vapp_vm.nextcloud ]

}

vcdvminternal_disk سیکشن میں ہم ایک نئی ورچوئل ڈسک کی وضاحت کریں گے جو ورچوئل مشین سے منسلک ہے۔

vcdvminternaldisk بلاک کے لیے وضاحتیں:

  • bustype - ڈسک کنٹرولر کی قسم

  • sizeinmb - ڈسک کا سائز

  • بس نمبر / یونٹ نمبر - اڈاپٹر میں کنکشن کا مقام

  • اسٹوریج_پروفائل - ڈسک کے لیے اسٹوریج کی پالیسی

آئیے Bitrix پر تازہ ترین VM کی وضاحت کرتے ہیں۔

resource "vcd_vapp_vm" "bitrix" {

vapp_name = vcd_vapp.vapp.name

name = "bitrix"

catalog_name = var.vcd_org_catalog

template_name = var.vcd_template_os_centos7

storage_profile = var.vcd_org_ssd_sp

memory = 8192

cpus = 1

cpu_cores = 1

network {

type = "org"

name = vcd_network_routed.net.name

is_primary = true

adapter_type = "VMXNET3"

ip_allocation_mode = "MANUAL"

ip = var.vcd_edge_local_ip_bitrix

}

override_template_disk {

bus_type = "paravirtual"

size_in_mb = "81920"

bus_number = 0

unit_number = 0

storage_profile = var.vcd_org_ssd_sp

}

}

OS کو اپ ڈیٹ کرنا اور اضافی اسکرپٹس انسٹال کرنا

نیٹ ورک تیار ہے، ورچوئل مشینیں بیان کی گئی ہیں۔ اپنے بنیادی ڈھانچے کو درآمد کرنے سے پہلے، ہم پروویژنر بلاکس کا استعمال کرتے ہوئے اور جوابی استعمال کیے بغیر ابتدائی پروویژننگ کر سکتے ہیں۔

آئیے دیکھتے ہیں کہ پروویژنر بلاک کا استعمال کرتے ہوئے OS کو اپ ڈیٹ کرنے اور CMS Bitrix انسٹالیشن اسکرپٹ کو چلانے کا طریقہ۔

پہلے، آئیے CentOS اپ ڈیٹ پیکجز انسٹال کریں۔

resource "null_resource" "nginx_update_install" {

provisioner "remote-exec" {

connection {

type = "ssh"

user = "root"

password = vcd_vapp_vm.nginx.customization[0].admin_password

host = var.vcd_edge_external_ip

port = "58301"

timeout = "30s"

}

inline = [

"yum -y update && yum -y upgrade",

"yum -y install wget nano epel-release net-tools unzip zip" ]

}

}

}

اجزاء کا عہدہ:

  • provisioner "remote-exec" - ریموٹ پروویژننگ بلاک کو جوڑیں۔

  • کنکشن بلاک میں ہم کنکشن کی قسم اور پیرامیٹرز کی وضاحت کرتے ہیں:

  • قسم - پروٹوکول، ہمارے معاملے میں SSH؛

  • صارف - صارف کا نام؛

  • پاس ورڈ - صارف کا پاس ورڈ۔ ہمارے معاملے میں، ہم پیرامیٹر vcdvappvm.nginx.customization[0].admin_password کی طرف اشارہ کرتے ہیں، جو سسٹم صارف کے لیے تیار کردہ پاس ورڈ کو اسٹور کرتا ہے۔

  • میزبان — کنکشن کے لیے بیرونی IP ایڈریس؛

  • پورٹ — کنکشن کے لیے پورٹ، جو پہلے DNAT سیٹنگز میں بیان کیا گیا تھا۔

  • ان لائن - ان کمانڈز کی فہرست بنائیں جو درج کی جائیں گی۔ حکموں کو ترتیب سے درج کیا جائے گا جیسا کہ اس سیکشن میں اشارہ کیا گیا ہے۔

مثال کے طور پر، آئیے اضافی طور پر 1C-Bitrix انسٹالیشن اسکرپٹ پر عمل کریں۔ اسکرپٹ پر عمل درآمد کے نتائج کا آؤٹ پٹ پلان کے چلنے کے دوران دستیاب ہوگا۔ اسکرپٹ کو انسٹال کرنے کے لیے، پہلے ہم بلاک کی وضاحت کرتے ہیں:

آئیے 1C-Bitrix کی تنصیب کی وضاحت کرتے ہیں۔

provisioner "file" {

source = "prepare.sh"

destination = "/tmp/prepare.sh"

connection {

type = "ssh"

user = "root"

password = vcd_vapp_vm.nginx.customization[0].admin_password

host = var.vcd_edge_external_ip

port = "58301"

timeout = "30s"

}

}

provisioner "remote-exec" {

inline = [

"chmod +x /tmp/prepare.sh", "./tmp/prepare.sh"

]

}

اور ہم فوری طور پر Bitrix اپ ڈیٹ کی وضاحت کریں گے۔

1C-Bitrix کی فراہمی کی ایک مثال۔

resource "null_resource" "install_update_bitrix" {

provisioner "remote-exec" {

connection {

type = "ssh"

user = "root"

password = vcd_vapp_vm.bitrix.customization[0].admin_password

host = var.vcd_edge_external_ip

port = "58302"

timeout = "60s"

}

inline = [

"yum -y update && yum -y upgrade",

"yum -y install wget nano epel-release net-tools unzip zip",

"wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh -O /tmp/bitrix-env.sh",

"chmod +x /tmp/bitrix-env.sh",

"/tmp/bitrix-env.sh"

]

}

}

اہم! اگر آپ SELinux کو پہلے سے غیر فعال نہیں کرتے ہیں تو اسکرپٹ کام نہیں کر سکتا! اگر آپ کو bitrix-env.sh کا استعمال کرتے ہوئے CMS 1C-Bitrix کو انسٹال اور کنفیگر کرنے کے بارے میں تفصیلی مضمون کی ضرورت ہے، تو آپ کر سکتے ہیں۔ ویب سائٹ پر ہمارا بلاگ مضمون استعمال کریں۔.

3. بنیادی ڈھانچے کی ابتدا

ٹیرافارم کے ساتھ کلاؤڈ انفراسٹرکچر کا انتظام کیسے کریں۔ماڈیولز اور پلگ ان شروع کرنا

کام کے لیے، ہم ایک سادہ "جنٹل مین کٹ" استعمال کرتے ہیں: Windows 10 OS والا لیپ ٹاپ اور آفیشل ویب سائٹ سے ڈسٹری بیوشن کٹ terraform.io. آئیے کمانڈ کا استعمال کرتے ہوئے پیک کھولیں اور شروع کریں: terraform.exe init

کمپیوٹنگ اور نیٹ ورک کے بنیادی ڈھانچے کو بیان کرنے کے بعد، ہم اپنی ترتیب کو جانچنے کے لیے منصوبہ بندی شروع کرتے ہیں، جہاں ہم دیکھ سکتے ہیں کہ کیا تخلیق کیا جائے گا اور یہ ایک دوسرے سے کیسے منسلک ہوگا۔

  1. کمانڈ پر عمل کریں۔ - terraform plan -var-file=vcd.tfvars.

  2. ہمیں نتیجہ ملتا ہے۔ - Plan: 16 to add, 0 to change, 0 to destroy. یعنی اس پلان کے مطابق 16 وسائل بنائے جائیں گے۔

  3. ہم کمانڈ پر منصوبہ شروع کرتے ہیں۔ - terraform.exe apply -var-file=vcd.tfvars.

ورچوئل مشینیں بنائی جائیں گی، اور پھر ہم نے جو پیکجز درج کیے ہیں وہ پروویژنر سیکشن کے اندر عمل میں آئیں گے - OS کو اپ ڈیٹ کیا جائے گا اور CMS Bitrix انسٹال کیا جائے گا۔

کنکشن ڈیٹا وصول کر رہا ہے۔

پلان پر عمل درآمد کے بعد، ہم سرورز سے منسلک ہونے کے لیے ٹیکسٹ فارم میں ڈیٹا وصول کرنا چاہتے ہیں، اس کے لیے ہم آؤٹ پٹ سیکشن کو اس طرح فارمیٹ کریں گے:

output "nginxpassword" {

 value = vcdvappvm.nginx.customization[0].adminpassword

}

اور درج ذیل آؤٹ پٹ ہمیں تخلیق شدہ ورچوئل مشین کا پاس ورڈ بتاتا ہے:

Outputs: nginx_password = F#4u8!!N

نتیجے کے طور پر، ہمیں اپنے مزید کام کے لیے ایک اپ ڈیٹ شدہ آپریٹنگ سسٹم اور پہلے سے نصب شدہ پیکجوں کے ساتھ ورچوئل مشینوں تک رسائی حاصل ہوتی ہے۔ سب تیار ہے!

لیکن کیا ہوگا اگر آپ کے پاس پہلے سے موجود بنیادی ڈھانچہ موجود ہے؟

3.1 موجودہ انفراسٹرکچر کے ساتھ کام کرنا Terraform

یہ آسان ہے، آپ import کمانڈ کا استعمال کرکے موجودہ ورچوئل مشینیں اور ان کے vApp کنٹینرز درآمد کر سکتے ہیں۔

آئیے وی اے پی پی وسائل اور ورچوئل مشین کی وضاحت کرتے ہیں۔

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

اگلا مرحلہ vApp وسائل کی خصوصیات کو فارمیٹ میں درآمد کرنا ہے۔ vcdvapp.<vApp> <org>.<orgvdc>.<vApp>، جہاں:

  • vApp - vApp کا نام؛

  • org — تنظیم کا نام؛

  • org_vdc — ورچوئل ڈیٹا سینٹر کا نام۔

ٹیرافارم کے ساتھ کلاؤڈ انفراسٹرکچر کا انتظام کیسے کریں۔VAPP وسائل کی خصوصیات کو درآمد کرنا

آئیے فارمیٹ میں VM وسائل کی خصوصیات درآمد کریں: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, جس میں:

  • VM - VM نام؛

  • vApp - vApp کا نام؛

  • org — تنظیم کا نام؛

  • orgvdc ورچوئل ڈیٹا سینٹر کا نام ہے۔

درآمد کامیاب رہا۔

C:UsersMikhailDesktopterraform>terraform import vcd_vapp_vm.Zabbix mClouds.mClouds.Monitoring.Zabbix

vcd_vapp_vm.Zabbix: Importing from ID "mClouds.mClouds.Monitoring.Zabbix"...

vcd_vapp_vm.Zabbix: Import prepared!

Prepared vcd_vapp_vm for import

vcd_vapp_vm.Zabbix: Refreshing state... [id=urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f]

Import successful!

The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.

اب ہم نئے درآمد شدہ وسائل کو دیکھ سکتے ہیں:

درآمد شدہ وسائل

> terraform show

...

# vcd_vapp.Monitoring:

resource "vcd_vapp" "Monitoring" {

guest_properties = {}

href = "https://vcloud.mclouds.ru/api/vApp/vapp-fe5db285-a4af-47c4-93e8-55df92f006ec"

id = "urn:vcloud:vapp:fe5db285-a4af-47c4-93e8-55df92f006ec"

ip = "allocated"

metadata = {}

name = "Monitoring"

org = "mClouds"

status = 4

status_text = "POWERED_ON"

vdc = "mClouds"

}

# vcd_vapp_vm.Zabbix:

resource "vcd_vapp_vm" "Zabbix" {

computer_name = "Zabbix"

cpu_cores = 1

cpus = 2

expose_hardware_virtualization = false

guest_properties = {}

hardware_version = "vmx-14"

href = "https://vcloud.mclouds.ru/api/vApp/vm-778f4a89-1c8d-45b9-9d94-0472a71c4d1f"

id = "urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f"

internal_disk = [

{

bus_number = 0

bus_type = "paravirtual"

disk_id = "2000"

iops = 0

size_in_mb = 122880

storage_profile = "Gold Storage Policy"

thin_provisioned = true

unit_number = 0

},

]

memory = 8192

metadata = {}

name = "Zabbix"

org = "mClouds"

os_type = "centos8_64Guest"

storage_profile = "Gold Storage Policy"

vapp_name = "Monitoring"

vdc = "mClouds"

customization {

allow_local_admin_password = true

auto_generate_password = true

change_sid = false

enabled = false

force = false

join_domain = false

join_org_domain = false

must_change_password_on_first_login = false

number_of_auto_logons = 0

}

network {

adapter_type = "VMXNET3"

ip_allocation_mode = "DHCP"

is_primary = true

mac = "00:50:56:07:01:b1"

name = "MCLOUDS-LAN01"

type = "org"

}

}

اب ہم یقینی طور پر تیار ہیں - ہم نے آخری نقطہ (موجودہ انفراسٹرکچر میں درآمد کرنا) کے ساتھ کیا ہے اور Terraform کے ساتھ کام کرنے کے تمام اہم نکات پر غور کیا ہے۔ 

یہ ٹول بہت آسان نکلا اور آپ کو اپنے بنیادی ڈھانچے کو کوڈ کے طور پر بیان کرنے کی اجازت دیتا ہے، ایک کلاؤڈ فراہم کنندہ کی ورچوئل مشینوں سے لے کر نیٹ ورک کے اجزاء کے وسائل کو بیان کرنے تک۔

ایک ہی وقت میں، ماحول سے آزادی مقامی، کلاؤڈ وسائل کے ساتھ کام کرنا، اور پلیٹ فارم کا انتظام بھی ممکن بناتی ہے۔ اور اگر کوئی تعاون یافتہ پلیٹ فارم نہیں ہے اور آپ ایک نیا شامل کرنا چاہتے ہیں تو آپ اپنا فراہم کنندہ لکھ سکتے ہیں اور اسے استعمال کر سکتے ہیں۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں