مستقبل لاء Terraform ۾ زيربنا جي وضاحت. انتون بابنڪو (2018)
گھڻا ماڻھو ڄاڻن ٿا ۽ پنھنجي روزاني ڪم ۾ Terraform استعمال ڪن ٿا، پر ان لاءِ بھترين طريقا اڃا ٺھي نہ سگھيا آھن. هر ٽيم کي پنهنجي پنهنجي طريقن ۽ طريقن کي ايجاد ڪرڻو پوندو.
توھان جو انفراسٹرڪچر تقريباً سادو شروع ٿئي ٿو: ڪجھ وسيلا + ڪجھ ڊولپر. وقت سان گڏ، اهو سڀني قسمن جي هدايتن ۾ وڌندو آهي. ڇا توھان وسيلن کي گروپ ڪرڻ جا طريقا ڳوليندا آھيو Terraform ماڊلز ۾، ڪوڊ منظم ڪريو فولڊر ۾، ۽ ٻيو ڇا ٿي سگھي ٿو غلط ٿي سگھي ٿو؟ (مشهور آخري لفظ)
وقت گذري ٿو ۽ توهان محسوس ڪيو ته توهان جو انفراسٽرڪچر توهان جو نئون پالتو آهي، پر ڇو؟ توهان انفراسٽرڪچر ۾ ناقابل بيان تبديلين جي باري ۾ پريشان آهيو، توهان انفراسٽرڪچر ۽ ڪوڊ کي ڇڪڻ کان ڊڄو ٿا - نتيجي طور، توهان نئين ڪارڪردگي ۾ دير ڪريو يا معيار کي گهٽايو ...
Github تي AWS لاءِ Terraform ڪميونٽي ماڊلز جي مجموعي کي منظم ڪرڻ جي ٽن سالن کان پوءِ ۽ پيداوار ۾ Terraform جي ڊگهي مدي تائين سار سنڀال، Anton Babenko پنهنجو تجربو شيئر ڪرڻ لاءِ تيار آهي: TF ماڊلز کي ڪيئن لکجي ته جيئن مستقبل ۾ نقصان نه ٿئي.
ڳالهين جي آخر تائين، شرڪت ڪندڙ Terraform ۾ وسيلن جي انتظام جي اصولن، Terraform ۾ ماڊلز سان لاڳاپيل بهترين طريقا، ۽ انفراسٽرڪچر مينيجمينٽ سان لاڳاپيل ڪجهه مسلسل انضمام جي اصولن کان وڌيڪ واقف ٿيندا.
اعلان:مان نوٽ ڪريان ٿو ته اها رپورٽ نومبر 2018 جي آهي- 2 سال گذري چڪا آهن. رپورٽ ۾ بحث ڪيل Terraform 0.11 جو نسخو هاڻي سپورٽ ناهي. گذريل 2 سالن دوران، 2 نوان رليز جاري ڪيا ويا آهن، جن ۾ ڪافي جدت، سڌارا ۽ تبديليون شامل آهن. مھرباني ڪري ھن تي ڌيان ڏيو ۽ دستاويز چيڪ ڪريو.
ان کان پوء مون ڪافي ڪوڊ لکيو آهي ان کي دلچسپ انداز ۾ رکڻ لاء. ۽ مان توھان کي ھاڻي ھن بابت ٻڌائڻ جي ڪوشش ڪندس.
مان Terraform سان ڪم ڪرڻ جي پيچيدگين ۽ خاصيتن بابت ڳالهائيندس. پر اهو واقعي HighLoad جو موضوع ناهي. ۽ هاڻي توهان سمجھندا سين ڇو.
وقت سان گڏ، مون لکڻ شروع ڪيو Terraform ماڊلز. صارفين سوال لکيا، مون انهن کي ٻيهر لکيو. ان کان پوء مون ڪوڊ کي فارميٽ ڪرڻ لاء مختلف افاديت لکيا اڳ-ڪمٽ ٿلهو، وغيره.
جيئن مون ذڪر ڪيو آهي، مان Terraform AWS ماڊلز جو مکيه سنڀاليندڙ آهيان، جيڪو GitHub تي هڪ وڏو ذخيرو آهي جتي اسان سڀ کان عام ڪمن لاءِ ماڊلز جي ميزباني ڪندا آهيون: VPC، Autoscaling، RDS.
۽ جيڪو توهان ٻڌو آهي اهو سڀ کان بنيادي آهي. جيڪڏهن توهان کي شڪ آهي ته توهان سمجهي رهيا آهيو ته Terraform ڇا آهي، پوء اهو بهتر آهي ته توهان جو وقت ڪنهن ٻئي هنڌ گذاريو. هتي ٽيڪنيڪل اصطلاحن جي تمام گهڻي کوٽ هوندي. ۽ مون رپورٽ جي سطح کي بلند ترين قرار ڏيڻ ۾ ڪو به شڪ نه ڪيو. ان جو مطلب اهو آهي ته آئون تمام ممڪن اصطلاح استعمال ڪندي ڳالهائي سگهان ٿو بغير ڪنهن وضاحت جي.
Terraform 2014 ۾ هڪ افاديت جي طور تي ظاهر ٿيو جنهن توهان کي ڪوڊ جي طور تي انفراسٽرڪچر لکڻ، منصوبابندي ڪرڻ ۽ منظم ڪرڻ جي اجازت ڏني. هتي اهم تصور آهي "بنيادي ڍانچي جيئن ڪوڊ."
سڀ دستاويز، جيئن مون چيو، ۾ لکيل آهي terraform.io. مون کي اميد آهي ته گهڻا ماڻهو هن سائيٽ بابت ڄاڻن ٿا ۽ دستاويز پڙهيا آهن. جيڪڏهن ائين آهي، ته پوء توهان صحيح جاء تي آهيو.
اسان ڪجهه حڪم هلائيندا آهيون، خاص طور تي "terraform init" انحصار ۽ مهيا ڪندڙن کي لوڊ ڪرڻ لاءِ.
۽ اسان هلون ٿا “terraform apply” حڪم کي چيڪ ڪرڻ لاءِ ته ڇا مخصوص تشڪيل اسان جي ٺاهيل وسيلن سان ملي ٿي. جيئن ته اسان اڳ ۾ ڪجھ به نه پيدا ڪيو آهي، Terraform اسان کي انهن وسيلن کي ٺاهڻ لاء اشارو ڪري ٿو.
اسان ان ڳالهه جي تصديق ڪريون ٿا. اهڙيءَ طرح اسان هڪ بالٽ ٺاهيندا آهيون جنهن کي seasnail سڏيو ويندو آهي.
اتي پڻ ڪيترائي ساڳيا افاديت آھن. توھان مان گھڻا جيڪي Amazon استعمال ڪندا آھن AWS CloudFormation يا Google Cloud Deployment Manager يا Azure Resource Manager ڄاڻندا آھن. انهن مان هر هڪ کي پنهنجي ڪنهن نه ڪنهن قسم جي عمل ۾ آهي وسيلن کي منظم ڪرڻ لاءِ انهن مان هر هڪ عوامي ڪلائوڊ فراهم ڪندڙ. Terraform خاص طور تي ڪارائتو آهي ڇو ته اهو توهان کي 100 کان وڌيڪ مهيا ڪندڙن کي منظم ڪرڻ جي اجازت ڏئي ٿو. (وڌيڪ تفصيل هتي)
اهي مقصد جيڪي Terraform شروع کان وٺي تعاقب ڪيا آهن:
Terraform وسيلن جو هڪ واحد منظر مهيا ڪري ٿو.
توهان کي سڀني جديد پليٽ فارمن کي سپورٽ ڪرڻ جي اجازت ڏئي ٿي.
۽ Terraform کي شروعات کان ئي ھڪ افاديت جي طور تي ٺاھيو ويو آھي جيڪو توھان کي محفوظ ۽ اڳڪٿي سان انفراسٽرڪچر تبديل ڪرڻ جي اجازت ڏئي ٿو.
2014 ۾، لفظ "پيش گذار" هن حوالي سان تمام غير معمولي محسوس ڪيو.
جيڪڏهن توهان هڪ VPC ٺاهڻ چاهيو ٿا، ته توهان تقريبن انهن 12 لائينن کي بيان ڪريو. بيان ڪريو جنهن علائقي ۾ توهان ٺاهڻ چاهيو ٿا، IP پتي جو ڪهڙو cidr_block استعمال ڪرڻ. اهو ئي سڀ ڪجهه آهي.
قدرتي طور، منصوبي کي آهستي آهستي وڌندو.
۽ توهان اتي نئين شين جو هڪ گروپ شامل ڪيو ويندو: وسيلا، ڊيٽا جا ذريعا، توهان نون فراهم ڪندڙن سان ضم ٿي ويندا، اوچتو توهان استعمال ڪرڻ چاهيندا Terraform صارفين کي منظم ڪرڻ لاءِ توهان جي GitHub اڪائونٽ وغيره. توهان شايد مختلف استعمال ڪرڻ چاهيندا. DNS فراهم ڪندڙ، هر شي کي پار ڪريو. Terraform هن کي آسان بڻائي ٿو.
اچو ته هيٺيان مثال ڏسو.
توهان آهستي آهستي شامل ڪيو internet_gateway ڇاڪاڻ ته توهان چاهيو ٿا ته توهان جي VPC جا وسيلا انٽرنيٽ جي رسائي حاصل ڪرڻ لاءِ. هي هڪ سٺو خيال آهي.
نتيجو هي آهي main.tf:
هي main.tf جو مٿيون حصو آهي.
هي main.tf جو هيٺيون حصو آهي.
پوء توھان شامل ڪريو subnet. جيستائين توھان شامل ڪرڻ چاھيو ٿا NAT گيٽ ويز، رستا، روئنگ ٽيبل ۽ ٻين سبنيٽس جو ھڪڙو گروپ، توھان وٽ 38 لائينون نه آھن، پر لڳ ڀڳ 200-300 لائينون.
اهو آهي، توهان جي main.tf فائل آهستي آهستي وڌي رهي آهي. ۽ اڪثر ڪري ماڻهو هڪ فائل ۾ سڀڪنھن شيء کي وجهي. main.tf ۾ 10-20 Kb ظاهر ٿئي ٿو. تصور ڪريو ته 10-20 Kb متن مواد آهي. ۽ هر شيء سان ڳنڍيل آهي. هن سان گڏ ڪم ڪرڻ لاء آهستي آهستي ڏکيو ٿي رهيو آهي. 10-20 Kb هڪ سٺو صارف ڪيس آهي، ڪڏهن ڪڏهن وڌيڪ. ۽ ماڻهو هميشه اهو نه سوچيو ته اهو خراب آهي.
جيئن ته باقاعده پروگرامنگ ۾، يعني ڪوڊ جي طور تي انفراسٽرڪچر نه آهي، اسان مختلف طبقن، پيڪيجز، ماڊلز، گروپن جو هڪ گروپ استعمال ڪرڻ جا عادي آهيون. Terraform توهان کي گهڻو ڪجهه ڪرڻ جي اجازت ڏئي ٿو.
ڪوڊ وڌي رهيو آهي.
وسيلن جي وچ ۾ انحصار پڻ وڌي رهيا آهن.
۽ اسان کي وڏي، وڏي ضرورت آهي. اسان سمجهون ٿا ته اسان هن وانگر وڌيڪ نه رهي سگهون ٿا. اسان جو ڪوڊ وڏو ٿي رهيو آهي. 10-20 Kb، يقينا، تمام وسيع نه آهي، پر اسان صرف نيٽ ورڪ اسٽيڪ بابت ڳالهائي رهيا آهيون، يعني توهان صرف نيٽ ورڪ وسيلن کي شامل ڪيو آهي. اسان ايپليڪيشن لوڊ بيلنس جي باري ۾ نه ڳالهائي رهيا آهيون، ڊيپلائيشن ES ڪلستر، ڪبرنيٽس، وغيره، جتي 100 Kb آساني سان ٺاهي سگھجن ٿيون. جيڪڏھن توھان ھي سڀ لکندا، توھان تمام جلد سکندا ته Terraform مهيا ڪري ٿو Terraform ماڊلز.
Terraform ماڊلز ھڪ خود مختيار Terraform ٺاھ جوڙ آھي جنھن کي ھڪ گروپ طور منظم ڪيو ويندو آھي. اهو سڀ ڪجهه توهان کي ڄاڻڻ جي ضرورت آهي Terraform ماڊلز بابت. اهي سڀ ڪجهه سمارٽ نه آهن، اهي توهان کي اجازت نه ڏيندا آهن ڪنهن به شيء تي منحصر ڪري پيچيده ڪنيڪشن ٺاهڻ. اهو سڀ ڪجهه ڊولپرز جي ڪلهن تي پوي ٿو. اهو آهي، اهو صرف ڪجهه قسم جي Terraform ترتيب آهي جيڪو توهان اڳ ۾ ئي لکيو آهي. ۽ توهان صرف ان کي هڪ گروپ طور سڏي سگهو ٿا.
تنهن ڪري اسان اهو سمجهڻ جي ڪوشش ڪري رهيا آهيون ته اسان پنهنجي 10-20-30 Kb ڪوڊ کي ڪيئن بهتر ڪنداسين. اسان آهستي آهستي محسوس ڪري رهيا آهيون ته اسان کي ڪجهه ماڊل استعمال ڪرڻ جي ضرورت آهي.
ماڊلز جو پهريون قسم توهان کي منهن ڏيڻو آهي وسيلا ماڊلز. اهي نه ٿا سمجهن ته توهان جو انفراسٽرڪچر ڇا آهي، توهان جو ڪاروبار ڇا آهي، ڪٿي ۽ ڪهڙيون حالتون آهن. اهي بلڪل اهي ماڊلز آهن جن کي مان، اوپن سورس ڪميونٽي سان گڏ، انتظاميه، ۽ جن کي اسان توهان جي انفراسٽرڪچر لاءِ ابتدائي بلڊنگ بلاڪ طور پيش ڪيو آهي.
وسيلن جي ماڊل جو هڪ مثال.
جڏهن اسان هڪ وسيلا ماڊل کي سڏيندا آهيون، اسان بيان ڪريون ٿا ته اسان کي ان جي مواد کي ڪهڙي رستي تان لوڊ ڪرڻ گهرجي.
اسان اتي دليلن جو هڪ گروپ پاس ڪيو. اهو ئي سڀ ڪجهه آهي. اهو سڀ ڪجهه اسان کي ڄاڻڻ جي ضرورت آهي جڏهن اسان هن ماڊل کي استعمال ڪندا آهيون.
ڪيترن ئي ماڻهن جو خيال آهي ته جيڪڏهن اهي جديد نسخو استعمال ڪري، سڀڪنھن شيء کي مستحڪم ٿي ويندي. پر نه. انفراسٽرڪچر کي ورزن ٿيڻ گهرجي؛ اسان کي واضح طور تي جواب ڏيڻ گهرجي ته هي يا اهو جزو ڪهڙي ورزن تي لڳايو ويو هو.
هتي اهو ڪوڊ آهي جيڪو هن ماڊل جي اندر آهي. سيڪيورٽي گروپ ماڊل. هتي طومار 640 هين لائن ڏانهن وڃي ٿو. Amazon ۾ هر ممڪن ترتيب ۾ هڪ سيڪيورٽي-ڪرپ وسيلو ٺاهڻ هڪ تمام غير معمولي ڪم آهي. اهو ڪافي ناهي ته صرف هڪ سيڪيورٽي گروپ ٺاهيو ۽ ان کي ٻڌايو ته ان کي پاس ڪرڻ لاء ڪهڙا ضابطا. اهو تمام سادو هوندو. Amazon اندر هڪ لک مختلف پابنديون آهن. مثال طور، جيڪڏهن توهان استعمال ڪريو وي پي سي جي آخري پوائنٽ، پريفڪس لسٽ، مختلف APIs ۽ ڪوشش ڪري ٿو ته اهو سڀ ڪجهه ٻين شين سان گڏ ڪري، پوءِ Terraform توهان کي ائين ڪرڻ جي اجازت نٿو ڏئي. ۽ Amazon API هن کي اجازت نٿو ڏئي. تنهن ڪري، اسان کي اهو سڀ خوفناڪ منطق هڪ ماڊل ۾ لڪائڻ جي ضرورت آهي ۽ صارف جو ڪوڊ ڏيو جيڪو صرف هن وانگر نظر اچي ٿو.
صارف کي ڄاڻڻ جي ضرورت ناهي ته اهو اندر ڪيئن ٺاهيو ويو آهي.
ماڊل جو ٻيو قسم، جيڪو وسيلن جي ماڊلز تي مشتمل آهي، اڳ ۾ ئي مسئلا حل ڪري ٿو جيڪي توهان جي ڪاروبار تي وڌيڪ لاڳو ٿين ٿا. گهڻو ڪري هي هڪ جڳهه آهي جيڪو Terraform لاء هڪ واڌارو آهي ۽ ٽيگ لاء ڪجهه سخت قدر مقرر ڪري ٿو، ڪمپني جي معيار لاء. توھان اتي ڪارڪردگي پڻ شامل ڪري سگھو ٿا جيڪو Terraform في الحال توھان کي استعمال ڪرڻ جي اجازت نٿو ڏئي. هي هن وقت آهي. هاڻي نسخو 0.11، جيڪو ماضي جي شيء ٿيڻ بابت آهي. پر اڃا تائين، پري پروسيسرز، jsonnet، cookiecutter ۽ ٻين شين جو هڪ گروپ هڪ معاون ميڪانيزم آهي جيڪو مڪمل ڪم لاء استعمال ڪيو وڃي.
اڳتي هلي مان ان جا ڪجهه مثال ڏيندس.
بنيادي ڍانچي جي ماڊل کي سڏيو ويندو آهي ساڳئي طرح.
مواد کي ڊائون لوڊ ڪرڻ جو ذريعو ڏيکاريل آهي.
قدرن جو هڪ ٽڪرو هن ماڊل ۾ گذريو ويو آهي.
اڳيون، هن ماڊل جي اندر، وسيلن جي ماڊلز جو هڪ گروپ سڏيو ويندو آهي هڪ VPC يا ايپليڪيشن لوڊ بيلنس ٺاهڻ لاء، يا هڪ سيڪيورٽي گروپ ٺاهڻ يا هڪ لچڪدار ڪنٽينر سروس ڪلستر لاء.
ماڊل جا ٻه قسم آهن. اھو سمجھڻ ضروري آھي ڇو ته مون ھن رپورٽ ۾ جيڪا معلومات گڏ ڪئي آھي انھن مان گھڻا دستاويز ۾ لکيل نه آھن.
۽ Terraform ۾ دستاويز هن وقت ڪافي مشڪل آهي ڇاڪاڻ ته اهو صرف چوي ٿو اتي اهي خاصيتون آهن، توهان انهن کي استعمال ڪري سگهو ٿا. پر هوءَ اها نه ٻڌائي ته انهن خاصيتن کي ڪيئن استعمال ڪجي، ڇو ته انهن کي استعمال ڪرڻ بهتر آهي. تنهن ڪري، ماڻهن جو تمام وڏو تعداد ڪجهه لکندو آهي جنهن سان اهي رهي نٿا سگهن.
اچو ته هڪ نظر رکون ته اڳتي هلي اهي ماڊل ڪيئن لکجن. پوء اسان ڏسنداسين ته انهن کي ڪيئن ڪال ڪجي ۽ ڪوڊ سان ڪيئن ڪم ڪجي.
ھدايت #0 آھي نه لکڻ لاءِ وسيلا ماڊلز. انهن مان گهڻا ماڊل اڳ ۾ ئي توهان لاءِ لکيل آهن. جيئن مون چيو، اهي اوپن سورس آهن، اهي توهان جي ڪاروباري منطق تي مشتمل نه آهن، انهن وٽ IP پتي، پاسورڊ وغيره لاء هارڊ ڪوڊ ٿيل قدر نه آهي. ماڊل تمام لچڪدار آهي. ۽ اهو گهڻو ڪري اڳ ۾ ئي لکيو ويو آهي. Amazon کان وسيلن لاء ڪيترائي ماڊل آهن. اٽڪل 650. ۽ انھن مان گھڻا سٺي معيار جا آھن.
هن مثال ۾، ڪو ماڻهو توهان وٽ آيو ۽ چيو، "مان هڪ ڊيٽابيس کي منظم ڪرڻ جي قابل ٿيڻ چاهيان ٿو. هڪ ماڊل ٺاهيو ته جيئن مان ڊيٽابيس ٺاهي سگهان. اهو شخص نه ڄاڻندو آهي يا ته Amazon يا Terraform تي عملدرآمد جي تفصيل. هو صرف چوي ٿو: "مان MSSQL کي منظم ڪرڻ چاهيان ٿو." اھو آھي، اسان جو مطلب آھي ته اھو اسان جي ماڊل کي سڏيندو، انجڻ جي قسم کي پاس ڪندو، ۽ ٽائم زون کي ظاھر ڪندو.
۽ هڪ شخص کي اهو نه ڄاڻڻ گهرجي ته اسان هن ماڊل جي اندر ٻه مختلف وسيلا ٺاهينداسين: هڪ MSSQL لاءِ، ٻيو هر شيءِ لاءِ، صرف ان ڪري جو Terraform 0.11 ۾ توهان ٽائم زون ويلز کي اختياري طور بيان نٿا ڪري سگهو.
۽ هن ماڊل مان نڪرڻ تي، هڪ شخص صرف هڪ پتو حاصل ڪرڻ جي قابل هوندو. هن کي اها به خبر نه هوندي ته ڪهڙي ڊيٽابيس مان، ڪهڙي وسيلا مان اسان هي سڀ اندروني طور ٺاهي رهيا آهيون. هي لڪائڻ جو هڪ تمام اهم عنصر آهي. ۽ اهو لاڳو ٿئي ٿو نه رڳو انهن ماڊلز تي جيڪي عوامي آهن اوپن سورس ۾، پر انهن ماڊلن تي پڻ جيڪي توهان پنهنجي پروجيڪٽ ۽ ٽيمن ۾ لکندا.
هي ٻيو دليل آهي، جيڪو ڪافي اهم آهي جيڪڏهن توهان ڪجهه دير تائين Terraform استعمال ڪري رهيا آهيو. توهان وٽ هڪ مخزن آهي جنهن ۾ توهان پنهنجي ڪمپني لاءِ پنهنجا سڀئي Terraform ماڊل رکيا آهن. ۽ اهو بلڪل عام آهي ته وقت سان گڏ اهو منصوبو هڪ يا ٻه ميگا بائيٽ جي سائيز تائين وڌندو. هي ٺيڪ آهي.
پر مسئلو اهو آهي ته ڪيئن Terraform انهن ماڊلز کي سڏي ٿو. مثال طور، جيڪڏهن توهان هر هڪ صارف کي ٺاهڻ لاءِ هڪ ماڊيول سڏين ٿا، ته Terraform پهرين پوري مخزن کي لوڊ ڪندو ۽ پوءِ ان فولڊر ڏانهن ويندو جتي اهو مخصوص ماڊل واقع آهي. اهڙي طرح توهان هر وقت هڪ ميگا بائيٽ ڊائون لوڊ ڪندا. جيڪڏهن توهان 100 يا 200 استعمال ڪندڙن کي منظم ڪريو ٿا، ته پوءِ توهان 100 يا 200 ميگا بائيٽ ڊائون لوڊ ڪندا، ۽ پوءِ ان فولڊر ۾ وڃو. تنهنڪري قدرتي طور تي توهان نه ٿا چاهيو ته هر وقت توهان "Terraform init" کي هٽايو سامان جو هڪ گروپ ڊائون لوڊ ڪريو.
هن مسئلي جا ٻه حل آهن. سڀ کان پهريان، لاڳاپيل رستا استعمال ڪرڻ آهي. هن طريقي سان توهان ڪوڊ ۾ ظاهر ڪيو ته فولڊر مقامي آهي (./). ۽ توھان کان پھريان ڪجھ به لانچ ڪريو، توھان ڪريو ٿا گيٽ ڪلون ھن مخزن جو مقامي طور تي. هن طريقي سان توهان هڪ ڀيرو ڪريو.
اتي، يقينا، تمام گهڻو downsides آهن. مثال طور، توهان ورزننگ استعمال نٿا ڪري سگهو. ۽ اهو ڪڏهن ڪڏهن سان گڏ رهڻ ڏکيو آهي.
ٻيو حل. جيڪڏهن توهان وٽ تمام گهڻا ذيلي ماڊل آهن ۽ توهان وٽ اڳ ۾ ئي ڪنهن قسم جي پائيپ لائين آهي، پوءِ اتي آهي MBT پروجيڪٽ، جيڪو توهان کي اجازت ڏئي ٿو ڪيترن ئي مختلف پيڪيجز کي گڏ ڪري هڪ monorepository مان ۽ انهن کي S3 تي اپلوڊ ڪري. هي هڪ تمام سٺو طريقو آهي. اهڙيء طرح، iam-user-1.0.0.zip فائل جو وزن صرف 1 Kb هوندو، ڇاڪاڻ ته هن وسيلن کي ٺاهڻ لاء ڪوڊ تمام ننڍڙو آهي. ۽ اهو تمام تيز ڪم ڪندو.
اچو ته ان بابت ڳالهايون جيڪي ماڊلز ۾ استعمال نٿا ڪري سگهجن.
ماڊلز ۾ هي برائي ڇو آهي؟ سڀ کان وڌيڪ خراب شيء آهي صارف جو فرض. فرض ڪريو صارف ھڪڙو مهيا ڪندڙ جي تصديق جو اختيار آھي جيڪو مختلف ماڻھن پاران استعمال ڪري سگھجي ٿو. مثال طور، اسان سڀ ڪردار کي گڏ ڪنداسين. هن جو مطلب آهي ته Terraform هن ڪردار تي وٺي ويندي. ۽ پوءِ ان ڪردار سان گڏ ٻيا عمل به سرانجام ڏيندو.
۽ برائي اها آهي ته جيڪڏهن واسيا هڪ طريقي سان Amazon سان ڳنڍڻ پسند ڪري ٿو، مثال طور، ڊفالٽ ماحول واري تبديلي کي استعمال ڪندي، ۽ پيٽيا پسند ڪندو آهي ته هن جي حصيداري ڪيل چيلي کي استعمال ڪرڻ، جيڪا هن وٽ هڪ ڳجهي جاء تي آهي، پوء توهان ٻنهي ۾ وضاحت نٿا ڪري سگهو. ٽيرافارم. ۽ انهي ڪري ته اهي مصيبت جو تجربو نه ڪن، ماڊل ۾ هن بلاڪ کي ظاهر ڪرڻ جي ڪا ضرورت ناهي. اهو هڪ اعلي سطح تي اشارو ڪيو وڃي. اھو آھي، اسان وٽ ھڪڙو وسيلو ماڊل آھي، ھڪڙو انفراسٽرڪچر ماڊل ۽ ھڪڙو ٺاھڻ مٿي تي. ۽ هن کي ڪنهن مٿاهون هنڌ ڏانهن اشارو ڪيو وڃي.
برائي اها آهي ته توهان هميشه ڪنٽرول نه ڪندا آهيو جڏهن هي رزق ڪندڙ شروع ڪيو ويندو، پهرين. ۽ ٻيو، توهان ڪنٽرول نٿا ڪريو ته aws ec2 جو مطلب ڇا آهي، يعني ڇا اسان هاڻي لينڪس يا ونڊوز بابت ڳالهائي رهيا آهيون. تنهن ڪري توهان ڪجهه نه ٿا لکي سگهو جيڪو ساڳيو ڪم ڪندو مختلف آپريٽنگ سسٽم تي يا مختلف يوزر ڪيسن لاءِ.
سڀ کان عام مثال، جنهن کي سرڪاري دستاويزن ۾ پڻ اشارو ڪيو ويو آهي، اهو آهي ته جيڪڏهن توهان aws_instance لکو ٿا ۽ دليلن جو هڪ گروپ بيان ڪريو ٿا، ته پوءِ ان ۾ ڪو به حرج ناهي ته جيڪڏهن توهان اتي روزي ڏيندڙ “local-exec” کي بيان ڪريو ۽ پنهنجو جوابي عمل هلائي. راند جو ڪتاب.
حقيقت ۾، ها، ان ۾ ڪجھ به غلط ناهي. پر لفظي طور تي جلد ئي توهان کي اهو احساس ٿيندو ته هي مقامي-ايڪسيڪ شيء موجود ناهي، مثال طور، لانچ_configuration ۾.
۽ جڏھن توھان استعمال ڪندا آھيو launch_configuration، ۽ توھان چاھيو ٿا ٺاھيو آٽو اسڪيلنگ گروپ ھڪڙي مثال کان، پوءِ launch_configuration ۾ ”روزي ڏيندڙ“ جو ڪو تصور ناھي. اتي "صارف ڊيٽا" جو تصور آهي.
تنهن ڪري، هڪ وڌيڪ عالمگير حل استعمال ڪندڙ ڊيٽا استعمال ڪرڻ آهي. ۽ اهو شروع ڪيو ويندو يا ته مثال پاڻ تي، جڏهن مثال آن ڪيو ويندو آهي، يا ساڳئي صارف ڊيٽا ۾، جڏهن خودڪار اسڪيلنگ گروپ هن لانچ_configuration کي استعمال ڪندو آهي.
جيڪڏهن توهان اڃا تائين رزق ڪندڙ کي هلائڻ چاهيو ٿا، ڇاڪاڻ ته اهو هڪ چمڪندڙ جزو آهي، جڏهن هڪ وسيلو ٺاهيو ويندو آهي، ان وقت توهان کي توهان جي روزي کي هلائڻو پوندو، توهان جو حڪم. اهڙيون حالتون تمام گهڻيون آهن.
۽ ان لاءِ سڀ کان وڌيڪ صحيح وسيلو سڏيو ويندو آهي null_resource. Null_resource هڪ ڊمي وسيلو آهي جيڪو اصل ۾ ڪڏهن به پيدا نه ٿيو آهي. اهو ڪنهن به شيءِ کي هٿ نٿو اچي، نه API، نه آٽو اسڪيلنگ. پر اهو توهان کي ڪنٽرول ڪرڻ جي اجازت ڏئي ٿو جڏهن حڪم هلائڻ لاء. انهي حالت ۾، حڪم تخليق دوران هلائي ويندي آهي.
اتي ڪيترائي نشان آھن. مان سڀني نشانين ۾ وڏي تفصيل سان نه ويندس. هن بابت هڪ مضمون آهي. پر جيڪڏهن توهان Terraform سان ڪم ڪيو آهي يا ٻين ماڻهن جا ماڊل استعمال ڪيا آهن، ته پوءِ توهان اڪثر محسوس ڪيو آهي ته ڪيترائي ماڊلز، جهڙوڪ اوپن سورس ۾ اڪثر ڪوڊ، ماڻهن طرفان پنهنجي ضرورتن لاءِ لکيا ويندا آهن. هڪ شخص ان کي لکيو ۽ هن جو مسئلو حل ڪيو. مون ان کي GitHub ۾ پڪڙيو، ان کي رهڻ ڏيو. اهو رهندو، پر جيڪڏهن اتي ڪو دستاويز ۽ مثال نه آهي، ته پوء ڪو به ان کي استعمال نه ڪندو. ۽ جيڪڏهن ڪا به ڪارڪردگي نه آهي جيڪا توهان کي پنهنجي مخصوص ڪم کان ٿورو وڌيڪ حل ڪرڻ جي اجازت ڏئي ٿي، پوء ڪو به ان کي استعمال نه ڪندو. صارفين کي وڃائڻ جا ڪيترائي طريقا آهن.
جيڪڏهن توهان ڪجهه لکڻ چاهيو ٿا ته جيئن ماڻهو ان کي استعمال ڪن، پوء آئون انهن نشانين تي عمل ڪرڻ جي صلاح ڪريان ٿو.
تنهن ڪري، اسان ڏٺو ته ماڊل ڪيئن لکجي. اتي ٻه دليل آهن. پهريون، جيڪو سڀ کان اهم آهي، اهو نه لکو جيڪڏهن توهان ڪري سگهو ٿا، ڇاڪاڻ ته ماڻهن جو هڪ گروپ توهان کان اڳ ۾ ئي اهي ڪم ڪري چڪو آهي. ۽ ٻيو، جيڪڏهن توهان اڃا تائين فيصلو ڪيو ٿا، ته پوء ماڊلز ۽ روزي ڏيندڙن ۾ مهيا ڪندڙن کي استعمال ڪرڻ جي ڪوشش نه ڪريو.
هي دستاويز جو سرمائي حصو آهي. توھان ھاڻي سوچي رھيا آھيو: ”ڪجھ واضح آھي. يقين نه ٿو اچي“. پر اسان ڇهن مهينن ۾ ڏسنداسين.
هاڻي اچو ته انهن ماڊلز کي ڪيئن سڏجي ان بابت ڳالهايون.
اسان سمجھون ٿا ته اسان جو ڪوڊ وقت سان وڌي ٿو. اسان وٽ هاڻي هڪ فائل ناهي، اسان وٽ اڳ ۾ ئي 20 فائلون آهن. اهي سڀ هڪ فولڊر ۾ آهن. يا شايد پنجن فولڊرن ۾. ٿي سگهي ٿو ته اسان ڪنهن نه ڪنهن طرح انهن کي علائقي جي لحاظ کان، ڪجهه حصن جي ذريعي ٽوڙڻ شروع ڪري رهيا آهيون. پوءِ اسان سمجھون ٿا ته ھاڻي اسان وٽ هم وقت سازي ۽ آرڪيسٽريشن جا ڪي اصول آھن. اهو آهي، اسان کي اهو سمجهڻ گهرجي ته اسان کي ڇا ڪرڻ گهرجي جيڪڏهن اسان نيٽ ورڪ وسيلن کي تبديل ڪيو، اسان کي اسان جي باقي وسيلن سان ڇا ڪرڻ گهرجي، انهن انحصار کي ڪيئن بڻائڻ، وغيره.
اتي ٻه انتها آهن. پهرين انتهائي سڀ هڪ ۾ آهي. اسان وٽ ھڪڙو ماسٽر فائل آھي. هن وقت تائين، هي سرڪاري بهترين عمل هو Terraform ويب سائيٽ تي.
پر ھاڻي اھو لکيو ويو آھي ختم ٿيل ۽ ختم ٿيل. ڪجهه وقت کان پوء، Terraform ڪميونٽي اهو محسوس ڪيو ته اهو بهترين عمل کان پري هو، ڇاڪاڻ ته ماڻهن مختلف طريقن سان منصوبي کي استعمال ڪرڻ شروع ڪيو. ۽ مسئلا آهن. مثال طور، جڏهن اسان هڪ جڳهه تي سڀني انحصار کي لسٽ ڪندا آهيون. اتي حالتون آھن جڏھن اسين ڪلڪ ڪندا آھيون ”ٽرافارم پلان“ ۽ جيستائين Terraform سڀني وسيلن جي رياستن کي اپڊيٽ ڪري ٿو، گھڻو وقت گذري سگھي ٿو.
گهڻو وقت آهي، مثال طور، 5 منٽ. ڪجھ لاءِ اھو گھڻو وقت آھي. مون ڪيس ڏٺا آهن جن ۾ 15 منٽ لڳن ٿا. AWS API 15 منٽ خرچ ڪيو اهو معلوم ڪرڻ جي ڪوشش ڪئي ته هر وسيلن جي حالت سان ڇا ٿي رهيو آهي. هي هڪ تمام وڏو علائقو آهي.
۽، قدرتي طور، هڪ لاڳاپيل مسئلو ظاهر ٿيندو جڏهن توهان هڪ جاء تي ڪجهه تبديل ڪرڻ چاهيو ٿا، پوء توهان 15 منٽ انتظار ڪريو، ۽ اهو توهان کي ڪجهه تبديلين جو هڪ ڪئنوس ڏئي ٿو. توهان ٿڪايو، "ها" لکيو، ۽ ڪجهه غلط ٿي ويو. هي هڪ تمام حقيقي مثال آهي. Terraform توهان کي مسئلن کان بچائڻ جي ڪوشش نه ڪندو آهي. اهو آهي، جيڪو توهان چاهيو ٿا لکو. مسئلا هوندا - توهان جا مسئلا. جڏهن ته Terraform 0.11 ڪنهن به طرح توهان جي مدد ڪرڻ جي ڪوشش نه آهي. 0.12 ۾ ڪجھ دلچسپ جڳھون آھن جيڪي توھان کي چوڻ جي اجازت ڏين ٿيون: "واسيا، توھان واقعي اھو چاھيو ٿا، ڇا توھان پنھنجي ھوش ۾ اچي سگھوٿا؟"
صرف مسئلو اهو آهي ته توهان کي وڌيڪ ڪوڊ لکڻ جي ضرورت آهي، يعني توهان کي فائلن جي وڏي تعداد ۾ متغير بيان ڪرڻ جي ضرورت آهي ۽ هن کي اپڊيٽ ڪرڻ جي ضرورت آهي. ڪجهه ماڻهو اهو پسند نٿا ڪن. اها ڳالهه مون لاءِ عام آهي. ۽ ڪجهه ماڻهو سوچن ٿا: "هي مختلف هنڌن تي ڇو لکندو، مان اهو سڀ هڪ جڳهه تي رکندس." اهو ممڪن آهي، پر هي ٻيو انتها آهي.
هي سڀ ڪنهن هڪ جاءِ تي رهندڙ آهن؟ هڪ، ٻه، ٽي ماڻهو، يعني ڪو استعمال ڪري رهيو آهي.
۽ ڪير سڏيندو هڪ خاص جزو، هڪ بلاڪ يا هڪ انفراسٽرڪچر ماڊل؟ پنج ست ماڻهو. هي ٿڌو آهي.
سڀ کان عام جواب وچ ۾ ڪٿي آهي. جيڪڏهن پروجيڪٽ وڏو آهي، ته توهان وٽ اڪثر اهڙي صورتحال هوندي جتي ڪو به حل مناسب ناهي ۽ نه هر شيء اتي ڪم ڪري ٿي، تنهنڪري توهان هڪ مرکب سان ختم ڪيو. ان ۾ ڪجھ به غلط نه آھي، جيستائين توھان سمجھو ٿا ته ٻنهي جا فائدا آھن.
جيڪڏھن ڪجھ تبديل ٿي ويو اسٽيڪ VPC ۾ ۽ توھان انھن تبديلين کي EC2 تي لاڳو ڪرڻ چاھيو، يعني توھان آٽو اسڪيلنگ گروپ کي اپڊيٽ ڪرڻ چاھيو ٿا ڇو ته توھان وٽ ھڪڙو نئون سب نيٽ آھي، پوءِ مان ھن قسم جي انحصار آرڪيسٽريشن کي سڏيان ٿو. ڪجھ حل آھن: ڪير استعمال ڪري ٿو؟
مان صلاح ڪري سگهان ٿو ته ڪهڙا حل آهن. توھان استعمال ڪري سگھو ٿا Terraform جادو ڪرڻ لاءِ، يا توھان استعمال ڪري سگھوٿا ميڪ فائلز استعمال ڪرڻ لاءِ Terraform. ۽ ڏسو ته اتي ڪجھ تبديل ٿي ويو آھي، توھان ان کي ھتي لانچ ڪري سگھو ٿا.
توهان کي اهو فيصلو ڪيئن پسند آهي؟ ڇا ڪنهن کي يقين آهي ته هي هڪ بهترين حل آهي؟ مان هڪ مسڪراهٽ ڏسان ٿو، ظاهري طور تي شڪ پيدا ٿي ويا آهن.
يقينا، گهر ۾ هن جي ڪوشش نه ڪريو. Terraform ڪڏهن به Terraform کان هلائڻ لاء ٺهيل نه هئي.
هڪ رپورٽ تي هنن مون کي ٻڌايو: ”نه، اهو ڪم نه ڪندو. نقطي اهو آهي ته اهو ڪم نه ڪرڻ گهرجي. جيتوڻيڪ اهو تمام متاثر ڪندڙ نظر اچي ٿو جڏهن توهان شروع ڪري سگهو ٿا Terraform مان Terraform، ۽ پوء Terraform، توهان کي اهو نه ڪرڻ گهرجي. Terraform هميشه تمام آساني سان شروع ڪرڻ گهرجي.
۽ ڪهڙو دليل هي ماڊل قبول ڪري ٿو. Terragrunt بابت ڄاڻڻ لاء اهو سڀ ڪجهه آهي.
دستاويز موجود آهي، ۽ GitHub تي 1 تارا آهن. پر اڪثر ڪيسن ۾ اهو آهي جيڪو توهان کي ڄاڻڻ جي ضرورت آهي. ۽ اهو ڪمپنين ۾ لاڳو ڪرڻ تمام آسان آهي جيڪي صرف Terraform سان ڪم ڪرڻ شروع ڪري رهيا آهن.
تنهنڪري آرڪيسٽريشن Terragrunt آهي. ٻيا اختيار آھن.
هاڻي اچو ته ان بابت ڳالهايون ته ڪوڊ سان ڪيئن ڪم ڪجي.
جيڪڏهن توهان کي پنهنجي ڪوڊ ۾ نيون خاصيتون شامل ڪرڻ جي ضرورت آهي، اڪثر ڪيسن ۾ اهو آسان آهي. توهان هڪ نئون وسيلو لکي رهيا آهيو، هر شيء سادو آهي.
جيڪڏهن توهان وٽ ڪجهه وسيلا آهن جيڪي توهان اڳ ۾ ٺاهيا هئا، مثال طور، توهان Terraform بابت AWS کاتو کولڻ کان پوءِ سکيو ۽ اهي وسيلا استعمال ڪرڻ چاهيو ٿا جيڪي توهان وٽ اڳ ۾ آهن، ته پوءِ اهو مناسب ٿيندو ته توهان پنهنجي ماڊل کي هن طريقي سان وڌايو، ته جيئن اهو موجوده وسيلن جي استعمال جي حمايت ڪري ٿو.
۽ بلاڪ وسيلن کي استعمال ڪندي نئين وسيلن جي تخليق جي حمايت ڪئي.
آئوٽ پٽ تي اسان هميشه آئوٽ آئ ڊي واپس ڪندا آهيون ان تي منحصر آهي ته ڇا استعمال ڪيو ويو.
Terraform 0.11 ۾ ٻيو تمام اهم مسئلو فهرستن سان ڪم ڪري رهيو آهي.
مشڪل اهو آهي ته جيڪڏهن اسان وٽ استعمال ڪندڙن جي اهڙي فهرست آهي.
۽ جڏهن اسان ٺاهيندا آهيون انهن صارفين کي بلاڪ وسيلا استعمال ڪندي، پوءِ سڀ ڪجهه ٺيڪ ٿي وڃي ٿو. اسان سڄي لسٽ ذريعي وڃو، هر هڪ لاء هڪ فائل ٺاهي. سڀ ڪجهه ٺيڪ آهي. ۽ پوءِ، مثال طور، user3، جيڪو وچ ۾ آهي، ان کي هتان هٽايو وڃي، پوءِ ان کان پوءِ ٺاهيل سمورا وسيلا ٻيهر ٺاهيا ويندا، ڇاڪاڻ ته انڊيڪس تبديل ٿي ويندو.
هڪ رياستي ماحول ۾ فهرستن سان ڪم ڪرڻ. رياستي ماحول ڇا آهي؟ اها صورتحال آهي جتي هڪ نئين قدر پيدا ٿئي ٿي جڏهن هي وسيلو پيدا ٿئي ٿو. مثال طور، AWS Access Key يا AWS Secret Key، يعني جڏهن اسان هڪ صارف ٺاهيون ٿا، اسان کي هڪ نئين رسائي يا ڳجهي چيڪ ملي ٿي. ۽ هر دفعي اسان هڪ صارف کي حذف ڪندا آهيون، هن صارف کي هڪ نئين چيڪ هوندي. پر هي فينگ شوئي ناهي، ڇاڪاڻ ته صارف اسان سان دوستي نه ڪرڻ چاهيندو جيڪڏهن اسان هن لاءِ هڪ نئون يوزر ٺاهيو هر وقت جڏهن ڪو ٽيم ڇڏي وڃي.
اهو ئي حل آهي. هي ڪوڊ آهي Jsonnet ۾ لکيل آهي. Jsonnet گوگل کان هڪ templating ٻولي آهي.
هي حڪم توهان کي هن ٽيمپليٽ کي قبول ڪرڻ جي اجازت ڏئي ٿو ۽ آئوٽ پٽ جي طور تي اهو هڪ json فائل موٽائي ٿو جيڪو توهان جي ٽيمپليٽ مطابق ٺاهيو ويو آهي.
ٽيمپليٽ هن طرح نظر اچي ٿو.
Terraform توهان کي HCL ۽ Json ٻنهي سان گڏ ڪم ڪرڻ جي اجازت ڏئي ٿو، تنهنڪري جيڪڏهن توهان وٽ Json پيدا ڪرڻ جي صلاحيت آهي، ته پوء توهان ان کي Terraform ۾ سلپ ڪري سگهو ٿا. ايڪسٽينشن .tf.json سان فائل ڪاميابي سان ڊائون لوڊ ٿي ويندي.
هاڻي اسان کي ڊپ ناهي ته ڪو ٽيم ڇڏي وڃي. اسان صرف json فائل کي ايڊٽ ڪنداسين. Vasya Pupkin ڇڏي ويو، Petya Pyatochkin رهي. Petya Pyatochkin هڪ نئين چاٻي حاصل نه ڪندو.
Terraform کي ٻين اوزارن سان ضم ڪرڻ واقعي Terraform جو ڪم ناهي. Terraform وسيلا ٺاهڻ لاء پليٽ فارم جي طور تي ٺاهيو ويو ۽ اهو ئي آهي. ۽ سڀ ڪجهه جيڪو بعد ۾ اچي ٿو اهو Terraform جي ڳڻتي ناهي. ۽ اتي ان کي ٺاهڻ جي ڪا ضرورت ناهي. جواب ڏيڻ وارو آهي، جيڪو توهان کي هر شي جي ضرورت آهي.
پر حالتون پيدا ٿينديون آهن جڏهن اسان Terraform کي وڌائڻ چاهيون ٿا ۽ ڪجهه مڪمل ٿيڻ کان پوء ڪجهه حڪم کي ڪال ڪريو.
۽ پوء اسان هن حڪم کي شيل ٽيرافارم آئوٽ مان سڏين ٿا ۽ قيمت بيان ڪريون ٿا جيڪو اسان چاهيون ٿا. اهڙيء طرح، حڪم سڀني متبادل قدرن سان عمل ڪيو ويندو آهي. اهو تمام آرامده آهي.
ٻيو طريقو. هي آهي null_resource جو استعمال اسان جي انفراسٽرڪچر ۾ تبديلين تي منحصر آهي. اسان ساڳئي مقامي-exe کي سڏي سگهون ٿا جيئن ئي ڪجهه وسيلن جي تبديلين جي ID.
قدرتي طور تي، اهو سڀ ڪجهه آسان آهي ڪاغذ تي، ڇاڪاڻ ته ايمازون، ٻين سڀني عوامي فراهم ڪندڙن وانگر، ان جي پنهنجي ڪنڊ ڪيسن جو هڪ گروپ آهي.
شروع ڪرڻ لاءِ، Terraform پلان يا Terraform CLI اندر سڀني غير ڳجهي دليلن کان پاسو ڪريو. اهو سڀ ڪجهه يا ته هڪ tfvars فائل ۾ يا هڪ ماحولياتي متغير ۾ وجهي سگهجي ٿو.
پر توهان کي اهو سڄو جادو حڪم ياد ڪرڻ جي ضرورت ناهي. Terraform منصوبو - var ۽ بند اسان وڃون ٿا. پهريون متغير var آهي، ٻيو variable var آهي، ٽيون، چوٿون. بنيادي ڍانچي جو سڀ کان اهم اصول جيڪو مان اڪثر استعمال ڪندو آهيان اهو آهي ته صرف ڪوڊ کي ڏسڻ سان، مون کي واضح سمجهڻ گهرجي ته اتي ڇا لڳايو ويو آهي، ڪهڙي حالت ۾ ۽ ڪهڙي قدرن سان. ۽ تنهنڪري مون کي دستاويز پڙهڻ يا واسيا کان پڇڻ جي ضرورت ناهي ته هو اسان جو ڪلستر ٺاهڻ لاءِ ڪهڙا پيرا ميٽر استعمال ڪيا. مون کي صرف tfvars ايڪسٽينشن سان هڪ فائل کولڻ جي ضرورت آهي، جيڪا اڪثر ماحول سان ملندي آهي، ۽ اتي هر شيءِ کي ڏسندي آهي.
انهي سان گڏ، دائري کي گهٽائڻ لاء ٽارگيٽ دليلن کي استعمال نه ڪريو. ان لاءِ ان کي استعمال ڪرڻ تمام آسان آھي ننڍڙا انفراسٽرڪچر ماڊلز.
انهي سان گڏ، متوازي کي محدود ڪرڻ ۽ وڌائڻ جي ڪا ضرورت ناهي. جيڪڏهن مون وٽ 150 وسيلا آهن ۽ مان چاهيان ٿو Amazon متوازي کي ڊفالٽ 10 کان 100 تائين، پوءِ گهڻو ڪري ڪجهه غلط ٿي ويندو. يا اهو هاڻي سٺو ٿي سگهي ٿو، پر جڏهن Amazon چوي ٿو ته توهان تمام گهڻيون ڪالون ڪري رهيا آهيو، توهان مصيبت ۾ هوندا.
Terraform انهن مسئلن مان اڪثر کي ٻيهر شروع ڪرڻ جي ڪوشش ڪندو، پر توهان تقريبا ڪجھ به حاصل نه ڪنداسين. Parallelism = 1 استعمال ڪرڻ لاءِ هڪ اهم شيءِ آهي جيڪڏهن توهان AWS API جي اندر يا Terraform فراهم ڪندڙ جي اندر ڪجهه بگ تي ڌڪ هڻي رهيا آهيو. ۽ پوء توهان کي وضاحت ڪرڻ جي ضرورت آهي: parallelism=1 ۽ انتظار ڪريو جيستائين Terraform هڪ ڪال ختم ڪري، پوء ٻيو، پوء ٽيون. هو انهن کي هڪ هڪ ڪري لانچ ڪندو.
ڪم اسپيس استعمال ڪندڙن پاران پيدا نه ڪيا ويا. هن جو مطلب اهو ناهي ته صارفين GitHub مسئلن ۾ لکيو آهي ته اسان Terraform ورڪ اسپيس کان سواء نٿا رهي سگهون. نه اهڙي نه. Terraform انٽرپرائز هڪ تجارتي حل آهي. HashiCorp کان Terraform فيصلو ڪيو ته اسان کي ڪم جي جڳهن جي ضرورت آهي، تنهنڪري اسان ان کي فائل ڪيو. مون کي ان کي هڪ الڳ فولڊر ۾ رکڻ لاء تمام آسان آهي. پوء اتي ٿوري گهڻي فائلون هونديون، پر اهو صاف ٿي ويندو.
ڪوڊ سان ڪيئن ڪم ڪجي؟ حقيقت ۾، فهرستن سان ڪم ڪرڻ ئي درد آهي. ۽ وٺو Terraform آسان. اها شيءِ ناهي جيڪا توهان لاءِ سڀ ڪجهه عظيم ڪندي. اتي هر شي کي ڇڪڻ جي ضرورت ناهي جيڪا دستاويز ۾ لکيل آهي.
رپورٽ جو موضوع ”مستقبل لاءِ“ لکيو ويو هو. مان ان بابت تمام مختصر ڳالهائيندس. مستقبل لاء، هن جو مطلب آهي ته 0.12 جلد جاري ڪيو ويندو.
0.12 نئين شين جي هڪ ٽن آهي. جيڪڏهن توهان باقاعده پروگرامنگ مان ايندا آهيو، ته پوء توهان سڀني قسمن جي متحرڪ بلاڪ، لوپس، صحيح ۽ مشروط مقابلي جي عملن کي ياد ڪندا، جتي کاٻي ۽ ساڄي پاسن کي هڪ ئي وقت ۾ حساب نه ڪيو ويو آهي، پر صورتحال تي منحصر آهي. توھان ان کي تمام گھڻو ياد ڪندا آھيو، تنھنڪري 0.12 اھو توھان لاءِ حل ڪندو.
پر! جيڪڏهن توهان گهٽ ۽ آسان لکندا آهيو، تيار ڪيل ماڊلز ۽ ٽئين پارٽي حل استعمال ڪندي، پوءِ توهان کي انتظار نه ڪرڻو پوندو ۽ اميد آهي ته 0.12 اچي ويندو ۽ توهان لاءِ سڀ ڪجهه ٺيڪ ڪري ڇڏيندو.
رپورٽ لاءِ مهرباني! توهان ڪوڊ جي طور تي انفراسٽرڪچر بابت ڳالهايو ۽ لفظي طور تي ٽيسٽ بابت هڪ لفظ چيو. ڇا ماڊلز ۾ ٽيسٽ جي ضرورت آهي؟ اها ذميواري ڪنهن جي آهي؟ ڇا مون کي ان کي پاڻ لکڻ جي ضرورت آهي يا اهو ماڊلز جي ذميواري آهي؟
ايندڙ سال رپورٽن سان ڀريو ويندو ته اسان هر شي کي جانچڻ جو فيصلو ڪيو آهي. امتحان ڇا ڪجي اهو سڀ کان وڏو سوال آهي. اتي ڪيترائي انحصار آھن، مختلف مهيا ڪندڙن کان تمام گھڻيون پابنديون. جڏهن توهان ۽ مان ڳالهائي رهيا آهيو ۽ توهان چئو ٿا: "مون کي ٽيسٽ جي ضرورت آهي،" تڏهن مان پڇان ٿو: "توهان ڇا ٽيسٽ ڪندا؟" توهان چئو ٿا ته توهان پنهنجي علائقي ۾ ٽيسٽ ڪنداسين. پوءِ مان چوان ٿو ته اهو ڪم منهنجي علائقي ۾ نٿو ٿئي. اهو آهي، اسان ان تي متفق ٿيڻ جي قابل نه هوندا. اهو ذڪر نه ڪرڻ گهرجي ته اتي ڪيترائي ٽيڪنيڪل مسئلا آهن. اهو آهي، انهن تجربن کي ڪيئن لکجي ته جيئن اهي ڪافي آهن.
مان فعال طور تي هن موضوع تي تحقيق ڪري رهيو آهيان، يعني توهان جي لکيل انفراسٽرڪچر جي بنياد تي خودڪار ٽيسٽ ڪيئن ٺاهيا وڃن. اھو آھي، جيڪڏھن توھان ھي ڪوڊ لکيو آھي، پوء مون کي ان کي هلائڻ جي ضرورت آھي، ان جي بنياد تي مان ٽيسٽ ٺاھي سگھان ٿو.
زميندار اڪثر ذڪر ڪيل لائبريرين مان هڪ آهي جيڪا توهان کي لکڻ جي اجازت ڏئي ٿي انٽيگريشن ٽيسٽ لاءِ Terraform. هي افاديت مان هڪ آهي. مان DSL قسم کي ترجيح ڏيان ٿو، مثال طور، rspec.
Anton، رپورٽ لاء مهرباني! منهنجو نالو ويلري آهي. مون کي هڪ ننڍڙو فلسفي سوال پڇڻ ڏيو. اتي آهي، مشروط طور، روزي، اتي تعیناتي آهي. پروويزننگ منهنجو انفراسٽرڪچر ٺاهي ٿو، ڊيپلائيمينٽ ۾ اسان ان کي ڪنهن مفيد شيءِ سان ڀريون ٿا، مثال طور، سرور، ايپليڪيشنون وغيره. ۽ اها ڳالهه منهنجي ذهن ۾ آهي ته Terraform روزي جي لاءِ وڌيڪ آهي، ۽ جواب ڏيڻ وارو وڌيڪ آهي تعیناتي لاءِ، ڇاڪاڻ ته جوابي به آهي جسماني انفراسٽرڪچر لاءِ. توهان کي nginx، Postgres انسٽال ڪرڻ جي اجازت ڏئي ٿي. پر ساڳئي وقت، جواب ڏيڻ جي اجازت ڏيڻ لڳي ٿي، مثال طور، Amazon يا گوگل وسيلن جي. پر Terraform پڻ توهان کي اجازت ڏئي ٿو ته ڪجهه سافٽ ويئر ان جي ماڊلز کي استعمال ڪندي. توھان جي نقطي نظر کان، ڇا آھي ھڪڙي قسم جي سرحد جيڪا Terraform ۽ Ansible جي وچ ۾ ھلندي آھي، ڪٿي ۽ ڇا استعمال ڪرڻ بھتر آھي؟ يا، مثال طور، ڇا توهان سوچيو ٿا ته جوابي اڳ ۾ ئي گندگي آهي، توهان کي هر شيء لاء Terraform استعمال ڪرڻ جي ڪوشش ڪرڻ گهرجي؟
سٺو سوال، والري. مان سمجهان ٿو ته Terraform 2014 کان وٺي مقصد جي لحاظ کان تبديل نه ڪيو آهي. اهو انفراسٽرڪچر لاءِ ٺاهيو ويو ۽ انفراسٽرڪچر لاءِ مري ويو. اسان کي اڃا به ضرورت هئي ۽ هوندي به ترتيب جي انتظام جي جواب جي. چيلنج اهو آهي ته صارف ڊيٽا اندر موجود آهي launch_configuration. ۽ اتي توهان Ansible، وغيره ڪڍو. هي معياري فرق آهي جيڪو مون کي تمام گهڻو پسند آهي.
جيڪڏهن اسان خوبصورت زيربناء بابت ڳالهائي رهيا آهيون، پوء اتي موجود آهن افاديت جهڙوڪ پيڪر جيڪي هن تصوير کي گڏ ڪن ٿا. ۽ پوءِ Terraform ڊيٽا جو ماخذ استعمال ڪري ٿو ھن تصوير کي ڳولڻ ۽ ان جي launch_configuration کي اپڊيٽ ڪرڻ لاءِ. اهو آهي، هن طريقي سان پائپ لائن آهي ته اسان پهرين ٽريڪٽر کي ڇڪيو، پوء ٽرافارم کي ڇڪيو. ۽ جيڪڏهن تعمير ٿئي ٿي، پوء هڪ نئين تبديلي ٿئي ٿي.
سلام! رپورٽ لاءِ مهرباني! منهنجو نالو ميشا آهي، آر بي ايس ڪمپني. توھان ڪال ڪري سگھو ٿا جواب ڏيندڙ جي ذريعي جواب ڏيڻ وارو جڏھن ھڪڙو وسيلو ٺاھيو. جواب ڏيڻ وارو پڻ هڪ موضوع آهي جنهن کي متحرڪ انوینٽري سڏيو ويندو آهي. ۽ توهان پهرين ڪال ڪري سگهو ٿا Terraform، ۽ پوءِ جوابي ڪال ڪريو، جيڪو رياست کان وسيلا وٺي ۽ ان تي عمل ڪندو. ڇا بهتر آهي؟
ماڻهو ٻنهي کي برابر ڪاميابي سان استعمال ڪن ٿا. اهو مون کي لڳي ٿو ته جوابي ۾ متحرڪ انوینٽري هڪ آسان شيء آهي، جيڪڏهن اسان آٽو اسڪيلنگ گروپ بابت نه ڳالهائي رهيا آهيون. ڇاڪاڻ ته آٽو اسڪيلنگ گروپ ۾ اسان وٽ اڳ ۾ ئي اسان جي پنهنجي ٽول ڪٽ آهي، جنهن کي لانچ_configuration سڏيو ويندو آهي. launch_configuration ۾ اسان هر شي کي رڪارڊ ڪندا آهيون جنهن کي لانچ ڪرڻ جي ضرورت آهي جڏهن اسان هڪ نئون وسيلو ٺاهيندا آهيون. تنهن ڪري، Amazon سان، متحرڪ انوینٽري استعمال ڪندي ۽ Terraform ts فائل پڙهڻ، منهنجي خيال ۾، اوورڪل آهي. ۽ جيڪڏهن توهان ٻيا اوزار استعمال ڪندا آهيو جتي ”آٽو اسڪيلنگ گروپ“ جو ڪو تصور ناهي، مثال طور، توهان استعمال ڪندا آهيو DigitalOcean يا ڪو ٻيو فراهم ڪندڙ جتي ڪو به آٽو اسڪيلنگ گروپ ناهي، پوءِ اتي توهان کي دستي طور تي API ڪڍڻو پوندو، IP پتي ڳوليو، ٺاهيو هڪ متحرڪ انوینٽري فائل، ۽ جوابي اڳ ۾ ئي ان جي ذريعي گھمندو. اهو آهي، Amazon لاءِ آهي launch_configuration، ۽ هر شيءِ لاءِ متحرڪ انوینٽري آهي.