زه غواړم تاسو ته د نوي CLI وسیلې په اړه ووایم چې ما د یوې زړې ستونزې حل کولو لپاره لیکلي.
ستونزه
Terraform له اوږدې مودې راهیسې په Devops/Cloud/IT ټولنه کې یو معیار دی. شی د کوډ په توګه د زیربنا سره معامله کولو لپاره خورا اسانه او ګټور دی. په Terraform کې ډیری خوندونه او همدارنګه ډیری فورکونه، تیز چاقو او ریکونه شتون لري.
د Terraform سره دا خورا اسانه دی چې نوي شیان رامینځته کړئ او بیا یې اداره کړئ ، بدل کړئ یا حذف کړئ. هغه څوک چې په بادل کې لوی زیربنا لري او د Terraform له لارې نه رامینځته شوي باید څه وکړي؟ د ټول بادل بیا لیکل او بیا جوړول یو څه ګران او ناامنه دي.
زه په 2 دندو کې د دې ستونزې سره مخ شوم ، ترټولو ساده مثال یې هغه وخت دی کله چې تاسو غواړئ هرڅه په ګیټ کې د ټیرفارم فایلونو په شکل کې وي ، مګر تاسو 250+ بالټونه لرئ او دا د لاس په واسطه په ټیرفارم کې لیکل خورا ډیر دي.
موجود دي
په عموم کې، هرڅه یوازې د ښي څخه کیڼ اړخ ته په انځور کې دي
خبرداری: لیکوال خپل نیم ژوند په روسیه کې نه کوي او لږ څه لیکي. د املا د غلطیو څخه ځان وساتئ.
حلونه
1. د AWS لپاره چمتو شوي او زاړه حلونه شتون لري
د ټرافورمنګ څنګه کار کوي: دا د AWS SDK څخه ډاټا اخلي او د ټیمپلیټ له لارې tf او tfstate تولیدوي.
دلته 3 ستونزې شتون لري:
1. په تازه معلوماتو کې به تل ځنډ وي
2. د tf فایلونه کله ناکله ماتیږي
3. tfstate له tf څخه په جلا توګه راټولیږي او تل نه سره یو ځای کیږي
په عموم کې، دا ستونزمنه ده چې یوې پایلې ته ورسیږو په کوم کې چې د "ټرافارم پلان" وايي چې هیڅ بدلون نشته
2. `Terraform import` په Terraform کې جوړ شوی کمانډ دی. دا څنګه کار کوی؟
تاسو د نوم او سرچینې ډول سره یو خالي TF فایل ولیکئ، بیا د 'ټرافارم واردات' چل کړئ او د سرچینې ID پاس کړئ. terraform د چمتو کونکي سره اړیکه نیسي، ډاټا ترلاسه کوي او د tfstate فایل جوړوي.
دلته 3 ستونزې شتون لري:
1. موږ یوازې د tfstate فایل ترلاسه کوو، او tf خالي دی، تاسو اړتیا لرئ دا په لاسي ډول ولیکئ یا یې له tfstate څخه بدل کړئ
2. په یو وخت کې یوازې د یوې سرچینې سره کار کولی شي او د ټولو سرچینو ملاتړ نه کوي. او زه باید د 250+ بالټونو سره بیا څه وکړم؟
3. تاسو اړتیا لرئ د سرچینو ID پیژنئ - دا دی چې تاسو اړتیا لرئ دا په کوډ کې وتړئ چې د سرچینو لیست ترلاسه کوي
په عموم کې، پایله جزوي ده او ښه اندازه نه کوي
زما پریکړه
اړتیاوې:
1. د سرچینو لپاره د tf او tfstate فایلونو رامینځته کولو وړتیا. د مثال په توګه، ټول بالټونه/امنیت ګروپ/لوډ بیلنسر ډاونلوډ کړئ او دا 'ټرافارم پلان' بیرته راګرځیدلی چې هیڅ بدلون شتون نلري
2. تاسو 2 GCP + AWS بادلونو ته اړتیا لرئ
3. نړیوال حل چې هر وخت تازه کول اسانه دي او د 3 ورځو کار لپاره د هرې سرچینې وخت ضایع نه کوي
4. دا خلاص سرچینه جوړ کړئ - هرڅوک ورته ستونزه لري
د ګو ژبه له همدې امله زه یې خوښوم ، او دا د HCL فایلونو رامینځته کولو لپاره کتابتون لري چې په ټیرفارم کې کارول کیږي + په ټیرفارم کې ډیری کوډ چې ګټور کیدی شي
لاره
لومړۍ هڅه
ما د ساده نسخې سره پیل کړ. د اړتیا وړ سرچینې لپاره د SDK له لارې کلاوډ سره اړیکه ونیسئ او د ټرافارم لپاره ساحو ته یې بدل کړئ. هڅه په امنیتي ګروپ کې سمدلاسه مړه شوه ځکه چې ما یوازې د امنیت ډلې بدلولو لپاره 1.5 ورځې نه خوښولې (او ډیری سرچینې شتون لري). د اوږدې مودې لپاره او بیا ساحې بدلول / اضافه کیدی شي
دوهمه هڅه
د بیان شوي مفکورې پر بنسټ
اوس راځئ چې د tfstate ته tf لپاره د کنورټر لیکلو تکراري فحشا ترسره کړو. د هغو کسانو لپاره چې هیڅکله یې tfstate نه دی لوستلی، دا JSON دی، مګر ځانګړی.
دلته د هغې مهمې برخې ځانګړتیاوې دي
"attributes": {
"id": "default/backend-logging-load-deployment",
"metadata.#": "1",
"metadata.0.annotations.%": "0",
"metadata.0.generate_name": "",
"metadata.0.generation": "24",
"metadata.0.labels.%": "1",
"metadata.0.labels.app": "backend-logging",
"metadata.0.name": "backend-logging-load-deployment",
"metadata.0.namespace": "default",
"metadata.0.resource_version": "109317427",
"metadata.0.self_link": "/apis/apps/v1/namespaces/default/deployments/backend-logging-load-deployment",
"metadata.0.uid": "300ecda1-4138-11e9-9d5d-42010a8400b5",
"spec.#": "1",
"spec.0.min_ready_seconds": "0",
"spec.0.paused": "false",
"spec.0.progress_deadline_seconds": "600",
"spec.0.replicas": "1",
"spec.0.revision_history_limit": "10",
"spec.0.selector.#": "1",
دلته ده:
1. id - تار
2. میټاډاټا - د اندازې 1 لړۍ او په هغې کې د ساحو سره یو څیز چې لاندې تشریح شوی
3. spec - د اندازې 1 هش او کیلي، په دې کې ارزښت
په لنډه توګه، د ساتیرۍ بڼه، هر څه کیدای شي څو درجې ژور وي
"spec.#": "1",
"spec.0.min_ready_seconds": "0",
"spec.0.paused": "false",
"spec.0.progress_deadline_seconds": "600",
"spec.0.replicas": "1",
"spec.0.revision_history_limit": "10",
"spec.0.selector.#": "1",
"spec.0.selector.0.match_expressions.#": "0",
"spec.0.selector.0.match_labels.%": "1",
"spec.0.selector.0.match_labels.app": "backend-logging-load",
"spec.0.strategy.#": "0",
"spec.0.template.#": "1",
"spec.0.template.0.metadata.#": "1",
"spec.0.template.0.metadata.0.annotations.%": "0",
"spec.0.template.0.metadata.0.generate_name": "",
"spec.0.template.0.metadata.0.generation": "0",
"spec.0.template.0.metadata.0.labels.%": "1",
"spec.0.template.0.metadata.0.labels.app": "backend-logging-load",
"spec.0.template.0.metadata.0.name": "",
"spec.0.template.0.metadata.0.namespace": "",
"spec.0.template.0.metadata.0.resource_version": "",
"spec.0.template.0.metadata.0.self_link": "",
"spec.0.template.0.metadata.0.uid": "",
"spec.0.template.0.spec.#": "1",
"spec.0.template.0.spec.0.active_deadline_seconds": "0",
"spec.0.template.0.spec.0.container.#": "1",
"spec.0.template.0.spec.0.container.0.args.#": "3",
په عموم کې، که څوک د مرکې لپاره د پروګرام کولو ستونزه غواړي، یوازې له دوی څخه وغواړئ چې د دې کار لپاره یو پارسر ولیکي :)
د بګ پرته د پارسر لیکلو لپاره د ډیرو هڅو وروسته، ما د هغې یوه برخه د ټرافورم کوډ کې وموندله، او ترټولو مهمه برخه. او داسې بریښي چې هرڅه سم کار کوي
درېیمه هڅه
د terraform چمتو کونکي بائنریونه دي چې د کلاوډ API سره کار کولو لپاره د ټولو سرچینو او منطق سره کوډ لري. هر کلاوډ خپل چمتو کونکی لري او پخپله ټیرفارم یوازې د دوه پروسو ترمینځ د خپل RPC پروتوکول له لارې غږ کوي.
اوس ما پریکړه وکړه چې د ټیرفارم چمتو کونکو سره مستقیم د RPC تلیفونونو له لارې اړیکه ونیسم. دا په ښکلي ډول وګرځید او دا یې ممکنه کړه چې د ټرافورم چمتو کونکي نوي ته بدل کړي او د کوډ بدلولو پرته نوې ب featuresې ترلاسه کړي. دا هم معلومه شوه چې په tfstate کې ټولې ساحې باید په tf کې نه وي، مګر تاسو څنګه موندلی شئ؟ یوازې د دې په اړه له خپل چمتو کونکي څخه پوښتنه وکړئ. بیا د منظم بیانونو د راټولولو یو بل تکراري فحشا پیل شوه، د tfstate دننه د ساحو لټون په ژوره توګه په ټولو کچو کې.
په پای کې، موږ یو ګټور CLI وسیله ترلاسه کړه چې د ټولو ټیرفارم چمتو کونکو لپاره یو عام زیربنا لري او تاسو کولی شئ په اسانۍ سره یو نوی اضافه کړئ. همچنان ، د سرچینو اضافه کول لږ کوډ اخلي. برسیره پردې ټول ډوله شیان لکه د سرچینو ترمنځ اړیکې. البته، ډیری بیلابیلې ستونزې شتون لري چې ټول یې نشي بیان کیدی.
ما حیوان ته Terrafomer نوم ورکړ.
وروستی
د Terrafomer په کارولو سره، موږ د دوه بادلونو څخه د tf + tfstate کوډ 500-700 زره لینونه تولید کړل. موږ وکولای شو چې میراثي شیان واخلو او یوازې د ټیرفارم له لارې یې لمس کول پیل کړو ، لکه څنګه چې د کوډ نظرونو په توګه غوره زیربنا کې. دا یوازې جادو دی کله چې تاسو لوی بادل واخلئ او د ټیم له لارې یې د ټیرفارم کارګر فایلونو په بڼه ترلاسه کړئ. او بیا grep/بدلون/git او داسې نور.
ما دا کنده کړه او په ترتیب کې یې واچوله، اجازه مې ترلاسه کړه. د پنجشنبې په ورځ (02.05.19/XNUMX/XNUMX) د هرچا لپاره په GitHub کې خپور شو.
دمخه یې 600 ستوري ترلاسه کړي ، د اوپن سټیک او کبرنیټس لپاره د ملاتړ اضافه کولو لپاره 2 پل غوښتنې. ښه نظر. په عموم کې، پروژه د خلکو لپاره ګټوره ده
زه هرچا ته مشوره ورکوم څوک چې غواړي د Terraform سره کار پیل کړي او د دې لپاره هرڅه بیا نه لیکي.
زه به خوښ شم چې غوښتنې ، مسلې ، ستوري راوباسي.
ډیمو
سرچینه: www.habr.com