Terraformer - کوډ ته زیربنا

Terraformer - کوډ ته زیربنا
زه غواړم تاسو ته د نوي CLI وسیلې په اړه ووایم چې ما د یوې زړې ستونزې حل کولو لپاره لیکلي.

ستونزه

Terraform له اوږدې مودې راهیسې په Devops/Cloud/IT ټولنه کې یو معیار دی. شی د کوډ په توګه د زیربنا سره معامله کولو لپاره خورا اسانه او ګټور دی. په Terraform کې ډیری خوندونه او همدارنګه ډیری فورکونه، تیز چاقو او ریکونه شتون لري.
د Terraform سره دا خورا اسانه دی چې نوي شیان رامینځته کړئ او بیا یې اداره کړئ ، بدل کړئ یا حذف کړئ. هغه څوک چې په بادل کې لوی زیربنا لري او د Terraform له لارې نه رامینځته شوي باید څه وکړي؟ د ټول بادل بیا لیکل او بیا جوړول یو څه ګران او ناامنه دي.
زه په 2 دندو کې د دې ستونزې سره مخ شوم ، ترټولو ساده مثال یې هغه وخت دی کله چې تاسو غواړئ هرڅه په ګیټ کې د ټیرفارم فایلونو په شکل کې وي ، مګر تاسو 250+ بالټونه لرئ او دا د لاس په واسطه په ټیرفارم کې لیکل خورا ډیر دي.
موجود دي موضوع له 2014 راهیسې په ټرافوم کې چې په 2016 کې وتړل شو د دې امید سره چې واردات به وي.

په عموم کې، هرڅه یوازې د ښي څخه کیڼ اړخ ته په انځور کې دي

خبرداری: لیکوال خپل نیم ژوند په روسیه کې نه کوي او لږ څه لیکي. د املا د غلطیو څخه ځان وساتئ.

حلونه

1. د AWS لپاره چمتو شوي او زاړه حلونه شتون لري terraforming. کله چې ما هڅه وکړه چې خپل 250+ بالټونه د هغې له لارې ترلاسه کړم، ما پوهیده چې هلته هرڅه خراب وو. AWS له اوږدې مودې راهیسې ډیری نوي اختیارونه معرفي کوي، مګر ټرافورمنګ د دوی په اړه نه پوهیږي او په عموم کې دا روبي دی کينډۍ لږ ښکاري. د ماسپښین 2 وروسته ما لیږلی د کشولو غوښتنه هلته نور ځانګړتیاوې اضافه کړي او پوه شو چې دا ډول حل په هیڅ ډول مناسب نه دی.
د ټرافورمنګ څنګه کار کوي: دا د 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 څنګه ترلاسه کول؟ دا هغه ځای دی چې د 'ټرافارم ریفریش' قومانده د ژغورنې لپاره راغله. terraform ټولې سرچینې په tfstate کې اخلي او د ID په واسطه په دوی کې ډاټا راوباسي او هر څه tfstate ته لیکي. دا دی، یوازې د نومونو او IDs سره یو خالي tfstate جوړ کړئ، د "terraform refresh" پرمخ وړئ او بیا موږ بشپړ tfstates ترلاسه کوو. هورې!
اوس راځئ چې د 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 کې خپور شو. github.com/GoogleCloudPlatform/terraformer
دمخه یې 600 ستوري ترلاسه کړي ، د اوپن سټیک او کبرنیټس لپاره د ملاتړ اضافه کولو لپاره 2 پل غوښتنې. ښه نظر. په عموم کې، پروژه د خلکو لپاره ګټوره ده
زه هرچا ته مشوره ورکوم څوک چې غواړي د Terraform سره کار پیل کړي او د دې لپاره هرڅه بیا نه لیکي.
زه به خوښ شم چې غوښتنې ، مسلې ، ستوري راوباسي.

ډیمو
Terraformer - کوډ ته زیربنا

سرچینه: www.habr.com

Add a comment