کلاؤڈ فارمیشن بمقابلہ ٹیرافارم

ٹیرافارم ہر منظرنامے میں کلاؤڈ فارمیشن سے افضل ہے سوائے اس کے کہ جب آپ کو AWS سے خون بہہ جانے والی کنارے کی خصوصیات کو قطعی طور پر استعمال کرنا ہو۔ یہاں ہے۔

سیکھنے یا جاننے کے مراحل کی خمدار لکیر:

میرے خیال میں سب سے زیادہ لوگ سبق حاصل کرکے یا مثالوں کو دیکھ کر نئی ٹیکنالوجیز سیکھتے ہیں۔ زیادہ تر پروگرامنگ زبانوں کے ساتھ ایسا کرنا کافی آسان ہے ، کم از کم اندراج کی سطح کے لئے۔
کلاؤڈ فارمیشن کے ساتھ نہیں۔ یہ JSON (یا YAML) فارمیٹ ہے۔ اس کو انسانوں کے ذریعہ نہیں بلکہ کمپیوٹرز کے استعمال اور تیار کرنے کے لئے ڈیزائن کیا گیا ہے۔ خود ہی آزمائیں ، ذیل میں EC2 مثال (بنیادی طور پر VM) گھماؤ کرنے کے لئے درکار کوڈ کا ٹکڑا ہے۔

{
  "AWSTemplate FormatVersion": "2010-09-09" ،
....
بلہ بلہ بالا کی 150 لائنیں ...
....
  } ،

  "حوالہ جات" : {
    "EC2Instance": {
      "قسم": "AWS :: EC2 :: مثال" ،
      "پراپرٹیز": {
        "یوزر ڈیٹا": {"Fn :: Base64": {"Fn :: join": [""، ["IPAddress ="، IP "ریف": "IPAddress"}]]}}،
        "انسٹینس ٹائپ": {"ریفری": "انسٹینس ٹائپ"} ،
        "سیکیورٹی گروپس": [{"ریف": "انٹنس سکیوریٹی گروپ"}] ،
        "کینیام": {"ریف": "کینیام"} ،
        "ImageId": {"Fn :: FindInMap": ["AWSRegionArch2AMI"، {"ریف": "AWS :: علاقہ"} ،
                          F "Fn :: FindInMap": ["AWSInstanceType2Arch"، {"ریف": "انٹنس ٹائپ"} ، "آرک"]}]}
      }
    } ،

    "انسٹینسسیکیوریٹی گروپ": {
      "قسم": "AWS :: EC2 :: سیکیورٹی گروپ" ،
      "پراپرٹیز": {
        "گروپ بیان": "ایس ایس ایچ رسائی کو فعال کریں" ،
        "سیکیورٹی گروپ انجریس":
          [{"آئی پی پروٹوکول": "ٹی سی پی" ، "فی پورٹ": "22" ، "ٹو پورٹ": "22" ، "سیڈرآپ": Ref "ریف": "ایس ایس ایچ لوکیشن"}}]
      }
    } ،

    "IP پتہ" : {
      "قسم": "AWS :: EC2 :: EIP"
    } ،

    "IPAssoc": {
      "ٹائپ کریں": "AWS :: EC2 :: EIPAocociation" ،
      "پراپرٹیز": {
        "InstanceId": {"ریف": "EC2Instance"} ،
        "EIP": {"ریف": "IPAddress"}
      }
    }
  } ،
  "نتائج": {
    "InstanceId": {
      "تفصیل": "نئے بنی ای سی 2 مثال کی مثال"
      "قیمت": Ref "ریفری": "EC2Instance"}
    } ،
    "InstanceIPAddress": {
      "تفصیل": "نئے بنائے گئے ای سی 2 مثال کا IP پتہ" ،
      "قدر": {"ریفری": "آئی پی ایڈریس"}
    }
  }
}

گندی۔ سیکیورٹی گروپ کے ذریعہ عوامی IP کے ساتھ VM حاصل کرنے کے لئے 210 کوڈ کی لائنیں۔ 210. 210! ہر ٹیمپلیٹ کے ساتھ یہاں بوائیلرپلیٹ کوڈ کی بھاری مقدار موجود ہے ، جو بنیادی طور پر شور ہے (اس پر بعد میں مزید)۔
اگر آپ کو اس مرحلے پر چھوڑنے کے لئے یہ کافی نہیں ہے تو ، سرکاری دستاویزات پر ایک نظر ڈالیں۔ اب یہ YAML کے استعمال کی طرف بڑھ گیا ہے ، لیکن جب آپ نمونے کے ٹکڑوں کو دیکھنا چاہتے ہیں تو پتہ چلتا ہے کہ وہ سب JSON میں موجود ہیں۔ گوگل کے نتائج میں بھی یہی بات ہے۔
بی ٹی ڈبلیو جب آپ کو ایک خطے میں مختلف نمونے کے ٹکڑے مل جاتے ہیں ، تو آپ کچھ مضحکہ خیز کہہ سکتے ہیں

گول # 1: CF: 0 TF: 1

تحریری کوڈ

بہت ہی مذکورہ بالا دلائل کوڈ لکھنے پر ہی لاگو ہوتے ہیں۔ ایک فوری مثال کے لئے بالکل اوپر ایک جیسے وسائل پر ایک نظر ڈالیں ، لیکن ٹیرفارم میں بیان کیا گیا ہے:

وسائل "aws_instance" "ویب" {
  امی = "12345-6789-10"
  مثال_ٹائپ = "t2.micro"

  ٹیگز {
    نام = "میٹھا"
  }
}
ڈیٹا "aws_eip" "پائپ"
  public_ip = "1.1.1.1"
}

وسائل "aws_eip_association" "پائپ" {
  مثال_یڈ = "$ {aws_instance.web.id}"
  مختص_ ID = "$ {data.aws_eip.pip.id id"
}
وسائل "aws_security_group" "اجازت_سب" {
  نام = "اجازت_شاعش"
  وضاحت = "ہر جگہ سے ایس ایس ایس کی اجازت دیں"

  داخل کرنا
    منجانب_پورٹ = 0
    to_port = 22
    پروٹوکول = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}
وسائل "aws_network_interface_sg_attachment" "sg_attachment"
  سیکیورٹی_گروپ_id = "$ ws aws_security_group.allow_all.id}"
  network_interface_id = "$ ws aws_instance.web.primary_network_interface_id}"
}

فرق چونکانے والی ہے ، ہے نا؟ نوٹ کریں کہ ان کے IDs کے ذریعہ دوسرے وسائل کا حوالہ دینا کتنا آسان ہے۔ ایک سرسری نظر سے آپ بتا سکتے ہیں کہ کیا ہو رہا ہے اور بنیادی ڈھانچے میں بنیادی تبدیلیاں کر سکتے ہیں۔ جو اچھی طرح سے ہمیں ایک اور موڑ پر لے آتا ہے

گول # 2 CF: 0 TF: 1

توثیقی کوڈ

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

عملدرآمد کا منصوبہ تیار کیا گیا ہے اور اسے نیچے دکھایا گیا ہے۔
وسائل کے اقدامات کو درج ذیل علامتوں کے ساتھ اشارہ کیا گیا ہے:
  + بنائیں
ٹیرافارم مندرجہ ذیل اقدامات انجام دے گا:
+ azurerm_resource_group.test_tf101
      ID: <مابعد>
      مقام: "یوکے ویسٹ"
      نام: "test_tf101"
      ٹیگز.٪: <مابعد>
+ Azurerm_subnet.sub1
      ID: <مابعد>
      ایڈریس_پروفکس: "172.16.0.8/29"
      ip_configurations. #: 
      نام: "ذیلی 1"
      نیٹ ورک_سیکیوریٹی_گروپ_ایڈ: <مابعد>
      وسائل_گروپ_ نام: "امتحان_ٹف 101"
      روٹ_ٹیبل_ایڈ: <مابعد>
      ورچوئل_نیٹ ورک_نیوم: "ٹیسٹ_وینٹ"
منصوبہ: 2 شامل کرنے کے لئے ، 0 تبدیل کرنے کے لئے ، 0 کو ختم کرنا۔
-------------------------------------------------- ------------------

گول # 3 CF: 0 TF: 1

دور دراز کی حالت

ٹیرافارم آپ کو دور دراز کے ذرائع سے آسانی سے ڈیٹا کی درآمد کرنے کی اجازت دیتا ہے ، مثال کے طور پر مختلف ماحول میں مختلف ریاستوں کے زیر انتظام۔ اس سے آپ کو وسائل اور ذمہ داریوں کو آسانی سے الگ کرنے کا موقع مل جاتا ہے۔ بیرونی معلومات کے ماخذ کو محض اعلان کریں اور جو بھی اس کے سامنے ہے اس کا استعمال کریں۔
کلاؤڈ فارمیشن میں کراس اسٹیک ریفرنسز کا تصور ہے ، لیکن یہاں تک کہ دستاویزات کو حاصل کرنا بھی ایک تکلیف ہے ، اور اے پی ڈبلیو ایس پر وی پی سی پیئرنگ ترتیب دینے کی مثال 71 لائنیں ہیں ، جبکہ ٹیرافارم میں 17 کے مقابلے میں۔

گول # 4 CF: 0 TF: 1

افعال

نیچے کا ٹکڑا چیک کریں۔

وسائل "aws_instance" "ویب" {
  # ہر میزبان نام کے ل one ایک مثال بنائیں
  گنتی = "$ {لمبائی (var.hostnames)}"

  # ہر ایک مثال کے مطابق نمائش کریں
  user_data = "$ {data.template.web_init. *. مہیا کی گئی [count.index]}"
}

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

گول # 5 CF: 0 TF: 1

ماڈیولز

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

متغیر "گنتی"
  پہلے سے طے شدہ = 2
}

وسائل "aws_instance" "ویب" {
  # ...

  گنتی = "$ {var.count}"

  # مثال کے طور پر 1 سے شروع ہونے والے انسداد کے ساتھ ٹیگ کریں ، یعنی۔ ویب -001
  ٹیگز {
    نام = "$ {فارمیٹ (" ویب-٪ 03d "، count.index + 1)}"
  }
}

گول # 6 CF: 0 TF: 1

ٹیم کا کام

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

گول # 7 CF: 0 TF: 1

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

بڑے پیمانے پر ٹیرفارم کی کم تعداد میں طاقت ایک ہی ٹول کے ذریعہ آپ کے بنیادی ڈھانچے کے ہر پہلو کو کنٹرول کرنے کی صلاحیت ہے۔ آپ کے پاس 70+ فراہم کنندگان کی فہرست ہے جو آپ استعمال کرسکتے ہیں ، جس میں آپ AWS ، گرت Azure ، سے Gitlab ، تیزی سے ، شیف ، ڈوکر تک کا استعمال کرسکتے ہیں۔ اور یہ سب ایک ہی ایچ سی ایل کا استعمال کررہے ہیں آپ کو ایک بار سیکھنا ہوگا۔ حیرت انگیز!

گول # 8 CF: 0 TF: 1

خلاصہ

8 راؤنڈ کے بعد ، یہ ہے

کلاؤڈ فارمیشن: 0 بمقابلہ ٹیرافارم: 8۔

یہاں تک کہ ایک اضافی نقطہ شامل کرنے کے بعد ، AWS کی پیش کشوں کے قریب ہونے کی وجہ سے کلاؤڈ فارمیشن میں بھی دو سے ہیک کا حتمی نتیجہ CF 2 TF 8 ہے ، جس کا مطلب ہے کہ ٹیرافارم نے اپنے حریف کو بالکل کچل دیا!
مجھے کافی یقین ہے کہ اسی طرح کا اطلاق ایزور اے آر ایم ٹیمپلیٹس بمقابلہ ٹیرافارم پر ہوتا ہے ، لہذا یہ وہاں ہے ، ایک میں دو موازنہ۔ اب اسی کو میں کارکردگی کہتے ہیں۔

دستبرداری
یہ پوسٹ شارٹ کٹ سے بھری ہوئی ہے اور ممکنہ طور پر غلطیاں اور غلط فہمیاں بھی ہیں ، جن کی نشاندہی کرنے پر میں خوشی خوش ہوں گی۔ میں بحث مباحثہ کرنا پسند کروں گا ، لہذا ہوسکتا ہے کہ یہاں بھی کوئی بیت چھپا ہو۔ ٹیرافارم ایف ٹی ڈبلیو