Terraformer - Bun-structar gu Còd

Terraformer - Bun-structar gu Còd
Bu mhath leam innse dhut mun inneal CLI ùr a sgrìobh mi gus fuasgladh fhaighinn air seann dhuilgheadas.

duilgheadas

Tha Terraform air a bhith na inbhe o chionn fhada anns a’ choimhearsnachd Devops/Cloud/IT. Tha an rud gu math goireasach agus feumail airson dèiligeadh ri bun-structar mar chòd. Tha mòran de thlachd ann an Terraform a bharrachd air mòran forcaichean, sgeinean biorach agus ràcan.
Le Terraform tha e gu math goireasach rudan ùra a chruthachadh agus an uairsin an riaghladh, an atharrachadh no an cuir às. Dè bu chòir dhaibhsan aig a bheil bun-structar mòr san sgòth agus nach deach a chruthachadh tro Terraform a dhèanamh? Tha ath-sgrìobhadh agus ath-chruthachadh an sgòth gu lèir dòigh air choireigin daor agus cunnartach.
Thachair mi ris an duilgheadas seo aig obraichean 2, is e an eisimpleir as sìmplidh nuair a tha thu ag iarraidh gum bi a h-uile càil ann an Git ann an cruth faidhlichean terraform, ach tha 250+ bucaid agad agus tha e tòrr a bhith gan sgrìobhadh ann an terraform le làimh.
tha cùis bho 2014 ann an terrafom a chaidh a dhùnadh ann an 2016 le dòchas gum bi in-mhalairt ann.

San fharsaingeachd, tha a h-uile dad mar a tha san dealbh a-mhàin bho dheas gu clì

Rabhaidhean: Chan eil an t-ùghdar a’ fuireach anns an Ruis airson leth a bheatha agus chan eil e a’ sgrìobhadh mòran ann an Ruisis. Bi faiceallach mu mhearachdan litreachaidh.

Fuasglaidhean

1. Tha fuasglaidhean deiseil agus seann airson AWS cruth-tìre. Nuair a dh'fheuch mi ri na 250+ bucaid agam fhaighinn troimhe, thuig mi gu robh a h-uile dad dona an sin. Tha AWS air a bhith a’ toirt a-steach tòrr roghainnean ùra o chionn fhada, ach chan eil fios aig terraforming mun deidhinn agus san fharsaingeachd is e ruby ​​​​a th’ ann tha an teamplaid a’ coimhead gann. Às deidh 2 san fheasgar chuir mi Tarraing iarrtas gus barrachd fheartan a chur ris an sin agus thuig e nach eil fuasgladh mar sin freagarrach idir.
Mar a tha cruth-tìre ag obair: bidh e a’ toirt dàta bhon AWS SDK agus a’ gineadh tf agus tfstate tro theamplaid.
Tha 3 duilgheadasan an seo:
1. Bidh an-còmhnaidh dàil ann an ùrachaidhean
2. tf faidhlichean uaireannan a 'tighinn a-mach briste
3. Tha tfstate air a chruinneachadh air leth bho tf agus chan eil e an-còmhnaidh a’ tighinn còmhla
San fharsaingeachd, tha e duilich toradh fhaighinn anns a bheil ‘plana terraform’ ag ràdh nach eil atharrachaidhean ann

2. 'S e àithne stèidhichte ann an cruth-tìre a th' ann an `terraform import'. Ciamar a tha e ag obair?
Bidh thu a’ sgrìobhadh faidhle TF falamh leis an ainm agus an seòrsa goireas, an uairsin ruith `terraform import` agus cuir seachad ID a’ ghoireas. terraform a’ conaltradh ris an t-solaraiche, a’ faighinn an dàta agus a’ dèanamh faidhle tfstate.
Tha 3 duilgheadasan an seo:
1. Chan fhaigh sinn ach faidhle tfstate, agus tha an tf falamh, feumaidh tu a sgrìobhadh le làimh no a thionndadh bho tfstate
2. Chan urrainn ach obrachadh le aon ghoireas aig aon àm agus chan eil e a’ toirt taic do na goireasan uile. Agus dè a bu chòir dhomh a dhèanamh a-rithist le 250+ bucaid?
3. Feumaidh tu fios a Thùsail de na goireasan - 'se sin, feumaidh tu a wrap ann an còd a gheibh an liosta de ghoireasan
San fharsaingeachd, tha an toradh ann am pàirt agus chan eil e a’ sgèile gu math

Mo chinneadh

Riatanasan:
1. Comas faidhlichean tf agus tfstate a chruthachadh airson goireasan. Mar eisimpleir, luchdaich sìos a h-uile bucaid / buidheann tèarainteachd / cothromachadh luchdan agus gun do thill ‘plana terraform’ nach eil atharrachaidhean ann
2. Feumaidh tu sgòthan 2 GCP + AWS
3. Global fuasgladh a tha furasta ùrachadh a h-uile turas agus nach eil a 'caitheamh ùine air gach goireas airson 3 làithean obrach
4. Dèan e Open Source - tha an aon dhuilgheadas aig a h-uile duine

Is e an cànan Go as coireach gu bheil mi dèidheil air, agus tha leabharlann aige airson faidhlichean HCL a chruthachadh a thathas a’ cleachdadh ann an terraform + tòrr còd ann an terraform a dh’ fhaodadh a bhith feumail

frith-rathad

Feuch an toiseach
Thòisich mi le dreach sìmplidh. Cuir fios chun sgòth tron ​​SDK airson an goireas a tha a dhìth agus ga thionndadh gu raointean airson cruth-tìre. Bhàsaich an oidhirp sa bhad air a ’bhuidheann tèarainteachd leis nach do chòrd na làithean 1.5 rium gus dìreach a’ bhuidheann tèarainteachd a thionndadh (agus tha tòrr ghoireasan ann). Airson ùine mhòr agus an uairsin faodar raointean atharrachadh / cur ris

An dàrna oidhirp
Stèidhichte air a 'bheachd a chaidh a mhìneachadh an seo. Dìreach gabh agus tionndaidh tfstate gu tf. Tha an dàta gu lèir ann agus tha na raointean mar an ceudna. Ciamar a gheibh thu làn tfstate airson mòran ghoireasan ?? Seo far an tàinig an àithne ‘ùrachadh terraform’ gu teasairginn. Bidh terraform a’ toirt a h-uile goireas ann an tfstate agus, le ID, a’ tarraing a-mach dàta orra agus a’ sgrìobhadh a h-uile càil gu tfstate. Is e sin, cruthaich tfstate falamh anns nach eil ach ainmean agus IDan, ruith `terraform refresh` agus an uairsin gheibh sinn làn tfstates. Hooray!
A-nis dèanamaid pornagraf ath-chuairteach de bhith a’ sgrìobhadh inneal-tionndaidh airson tfstate gu tf. Dhaibhsan nach do leugh tfstate a-riamh, tha e JSON, ach sònraichte.
Seo na feartan pàirt chudromach aige

 "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",

Tha:
1. id - sreang
2. meata-dàta - sreath de mheud 1 agus annta nì le raointean a tha air am mìneachadh gu h-ìosal
3. spec - hash de mheud 1 agus iuchair, luach ann
Ann an ùine ghoirid, cruth spòrsail, faodaidh a h-uile dad a bhith grunn ìrean domhainn

                   "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",

San fharsaingeachd, ma tha duine ag iarraidh duilgheadas prògramadh airson agallamh, dìreach iarr orra parser a sgrìobhadh airson na h-obrach seo :)
Às deidh mòran oidhirpean air parser a sgrìobhadh gun bhiteagan, lorg mi pàirt dheth anns a ’chòd terraform, agus am pàirt as cudromaiche. Agus bha coltas gu robh a h-uile dad ag obair gu math

Feuch trì
Tha solaraichean terraform nan binaries anns a bheil còd leis a h-uile goireas agus loidsig airson a bhith ag obair leis an Cloud API. Tha a sholaraiche fhèin aig gach sgòth agus chan eil terraform fhèin gan gairm ach tron ​​​​phròtacal RPC aca eadar dà phròiseas.
A-nis chuir mi romham fios a chuir gu solaraichean terraform gu dìreach tro ghairmean RPC. Thionndaidh e a-mach gu breagha agus rinn e comasach solaraichean terraform atharrachadh gu feadhainn nas ùire agus feartan ùra fhaighinn gun a bhith ag atharrachadh a ’chòd. Tha e a’ tionndadh a-mach cuideachd nach bu chòir a h-uile raon ann an tfstate a bhith ann an tf, ach ciamar a gheibh thu a-mach? Dìreach faighnich don t-solaraiche agad mu dheidhinn seo. An uairsin thòisich pornagraf ath-chuairteach eile de bhith a’ cur ri chèile abairtean cunbhalach, a’ coimhead airson raointean taobh a-staigh tfstate aig gach ìre domhainn.

Aig a’ cheann thall, fhuair sinn inneal CLI feumail aig a bheil bun-structar cumanta airson a h-uile solaraiche terraform agus is urrainn dhut fear ùr a chuir ris gu furasta. Cuideachd, chan eil mòran còd a dhìth airson goireasan a chur ris. A bharrachd air a h-uile seòrsa de rudan math leithid ceanglaichean eadar goireasan. Gu dearbh, bha mòran dhuilgheadasan eadar-dhealaichte ann nach urrainnear a mhìneachadh uile.
Thug mi Terrafomer air a’ bheathach.

Deireannach

A’ cleachdadh Terrafomer, chruthaich sinn 500-700 mìle loidhne de chòd tf + tfstate bho dhà sgòth. Bha e comasach dhuinn rudan dìleab a ghabhail agus tòiseachadh a’ suathadh riutha tro terraform a-mhàin, mar anns a’ bhun-structar as fheàrr mar bheachdan còd. Is e dìreach draoidheachd a th’ ann nuair a bheir thu sgòth mòr agus a gheibh thu e tro sgioba ann an cruth faidhlichean luchd-obrach terraform. Agus an uairsin grep/replace/git agus mar sin air adhart.

Chrath mi a-mach e agus chuir mi ann an òrdugh e, fhuair mi cead. Air fhoillseachadh air GitHub airson a h-uile duine Diardaoin (02.05.19/XNUMX/XNUMX). github.com/GoogleCloudPlatform/terraformer
Fhuair sinn mu thràth 600 rionnag, 2 iarrtas tarraing airson taic a chuir ris airson Openstack agus kubernetes. Deagh fhios air ais. San fharsaingeachd, tha am pròiseact feumail do dhaoine
Tha mi a’ comhairleachadh a h-uile duine a tha airson tòiseachadh ag obair le Terraform agus gun a bhith ag ath-sgrìobhadh a h-uile càil airson seo.
Bidh mi toilichte iarrtasan, cùisean, rionnagan a tharraing.

Demo
Terraformer - Bun-structar gu Còd

Source: www.habr.com

Cuir beachd ann