Terraformer - Infrastructure to Code

Terraformer - Infrastructure to Code
Ndikufuna ndikuuzeni za chida chatsopano cha CLI chomwe ndidalemba kuti ndithetse vuto lakale.

vuto

Terraform yakhala yokhazikika m'gulu la Devops/Cloud/IT. Chinthucho ndi chothandiza kwambiri komanso chothandiza pothana ndi zomangamanga monga ma code. Pali zokondweretsa zambiri mu Terraform komanso mafoloko ambiri, mipeni yakuthwa ndi rakes.
Ndi Terraform ndikosavuta kupanga zinthu zatsopano ndikuwongolera, kusintha kapena kuzichotsa. Kodi iwo omwe ali ndi zomangamanga zazikulu mumtambo ndipo osapangidwa kudzera pa Terraform ayenera kuchita chiyani? Kulembanso ndi kupanganso mtambo wonsewo ndi wokwera mtengo komanso wosatetezeka.
Ndinakumana ndi vutoli pa ntchito za 2, chitsanzo chophweka ndi pamene mukufuna kuti chirichonse chikhale mu Git mu mawonekedwe a terraform mafayilo, koma muli ndi zidebe za 250 + ndipo ndizolemba zambiri kuti mulembe terraform ndi dzanja.
pali nkhani kuyambira 2014 ku terrafom yomwe idatsekedwa mu 2016 ndi chiyembekezo kuti padzakhala kunja.

Nthawi zambiri, zonse zili ngati pachithunzichi kuchokera kumanja kupita kumanzere

Chenjezo: Wolembayo sakhala ku Russia kwa theka la moyo wake ndipo amalemba zochepa mu Chirasha. Chenjerani ndi zolakwika za kalembedwe.

Malangizo

1. Pali mayankho okonzeka komanso akale a AWS terraforming. Nditayesa kutulutsa ndowa zanga 250+, ndinazindikira kuti zonse zinali zoipa pamenepo. AWS yakhala ikuyambitsa zambiri zatsopano, koma terraforming sakudziwa za iwo ndipo kawirikawiri ndi ruby. template ikuwoneka yochepa. Pambuyo pa 2 madzulo ndinatumiza Kokani pempho kuti muwonjezere zina pamenepo ndikuzindikira kuti yankho lotere siloyenera konse.
Momwe terraforming imagwirira ntchito: zimatengera deta kuchokera ku AWS SDK ndikupanga tf ndi tfstate kudzera pa template.
Pali mavuto atatu apa:
1. Padzakhala nthawi zonse kuchedwa mu zosintha
2. tf owona nthawi zina kutuluka wosweka
3. tfstate imasonkhanitsidwa mosiyana ndi tf ndipo sizimalumikizana nthawi zonse
Nthawi zambiri, zimakhala zovuta kupeza zotsatira zomwe `terraform plan` imanena kuti palibe zosintha

2. `terraform import` ndi lamulo lomangidwa mu terraform. Zimagwira ntchito bwanji?
Mumalemba fayilo ya TF yopanda kanthu yokhala ndi dzina ndi mtundu wazinthu, kenako thamangani `terraform import` ndikudutsa ID yazinthu. terraform amalumikizana ndi wothandizirayo, amalandira deta ndikupanga fayilo ya tfstate.
Pali mavuto atatu apa:
1. Timangopeza fayilo ya tfstate, ndipo tf ilibe kanthu, muyenera kulemba pamanja kapena kusintha kuchokera ku tfstate
2. Itha kugwira ntchito ndi chida chimodzi panthawi imodzi ndipo sichithandizira zonse. Ndipo nditaninso ndi ndowa 250+?
3. Muyenera kudziwa ID ya zothandizira - ndiko kuti, muyenera kukulunga mu code yomwe imapeza mndandanda wazinthu.
Kawirikawiri, zotsatira zake zimakhala zochepa ndipo sizikula bwino

Lingaliro langa

Zofunikira:
1. Kutha kupanga mafayilo a tf ndi tfstate pazinthu. Mwachitsanzo, tsitsani zidebe zonse/gulu lachitetezo/zosunga zolemetsa ndipo `terraform plan` yabweretsanso kuti palibe zosintha.
2. Muyenera 2 GCP + AWS mitambo
3. Yankho lapadziko lonse lapansi lomwe ndi losavuta kusintha nthawi zonse ndipo silimawononga nthawi pachinthu chilichonse kwa masiku atatu ogwira ntchito
4. Pangani kukhala Open Source - aliyense ali ndi vuto lomwelo

Chilankhulo cha Go ndichifukwa chake ndimachikonda, ndipo chili ndi laibulale yopanga mafayilo a HCL omwe amagwiritsidwa ntchito mu terraform + ma code ambiri mu terraform omwe angakhale othandiza.

njira

Kuyesera koyamba
Ndinayamba ndi Baibulo losavuta. Kulumikizana ndi mtambo kudzera pa SDK pazofunikira ndikuzisintha kukhala magawo a terraform. Kuyesera kunafa nthawi yomweyo pa gulu la chitetezo chifukwa sindinkakonda masiku a 1.5 kuti atembenuzire gulu la chitetezo chokha (ndipo pali zinthu zambiri). Kwa nthawi yayitali ndiye minda imatha kusinthidwa / kuwonjezeredwa

Kuyesera kwachiwiri
Kutengera lingaliro lomwe lafotokozedwa apa. Ingotengani ndikusintha tfstate kukhala tf. Deta yonse ilipo ndipo minda ndi yofanana. Momwe mungapezere tfstate yonse pazinthu zambiri? Apa ndipamene lamulo la `terraform refresh` lidabwera kudzapulumutsa. terraform imatenga zonse zomwe zili mu tfstate ndipo, ndi ID, imatulutsa deta pa iwo ndikulemba zonse ku tfstate. Ndiye kuti, pangani tfstate yopanda kanthu yokhala ndi mayina ndi ma ID okha, yendetsani `terraform refresh` ndiyeno timapeza ma tfstates athunthu. Uwu!
Tsopano tiyeni tichite zolaula zobwerezabwereza polemba chosinthira cha tfstate kupita ku tf. Kwa iwo omwe sanawerengepo tfstate, ndi JSON, koma yapadera.
Nayi mawonekedwe ake ofunikira

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

Pali:
1. ID - chingwe
2. metadata - mndandanda wa kukula 1 ndipo mkati mwake muli chinthu chokhala ndi minda yomwe ikufotokozedwa pansipa
3. spec - hashi ya kukula 1 ndi fungulo, mtengo wake
Mwachidule, mawonekedwe osangalatsa, chilichonse chikhoza kukhala chakuya zingapo

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

Nthawi zambiri, ngati wina akufuna vuto la pulogalamu yofunsa mafunso, ingowafunsani kuti alembe cholembera pa ntchitoyi :)
Pambuyo poyesa kulemba cholembera popanda nsikidzi, ndinapeza gawo lake mu code terraform, ndi gawo lofunika kwambiri. Ndipo zonse zinkawoneka kuti zikuyenda bwino

Kuyesera katatu
opereka ma terraform ndi ma binaries omwe ali ndi ma code okhala ndi zida zonse ndi malingaliro ogwirira ntchito ndi mtambo API. Mtambo uliwonse uli ndi wopereka wake ndipo terraform wokha umangowayimbira kudzera mu protocol yake ya RPC pakati pa njira ziwiri.
Tsopano ndidaganiza zolumikizana ndi opereka terraform mwachindunji kudzera pa mafoni a RPC. Zinawoneka bwino ndikupangitsa kuti zitheke kusintha operekera terraform kukhala atsopano ndikupeza zatsopano popanda kusintha kachidindo. Zikuwonekeranso kuti si magawo onse mu tfstate omwe ayenera kukhala mu tf, koma mungadziwe bwanji? Ingofunsani wothandizira wanu za izi. Kenako zolaula zina zobwerezabwereza za kusonkhanitsa mawu okhazikika zinayamba, kufunafuna minda mkati mwa tfstate pamagulu onse mozama.

Pamapeto pake, tili ndi chida chothandiza cha CLI chomwe chili ndi zida zofananira kwa onse opereka ma terraform ndipo mutha kuwonjezera china chatsopano. Komanso, kuwonjezera zinthu kumatenga kachidindo kakang'ono. Komanso mitundu yonse ya zabwino monga kugwirizana pakati pa chuma. N’zoona kuti panali mavuto osiyanasiyana amene sitingawafotokoze onse.
Chinyamacho ndinachitcha kuti Terrafomer.

Finale

Pogwiritsa ntchito Terrafomer, tinapanga mizere 500-700 ya tf + tfstate code kuchokera kumitambo iwiri. Tinatha kutenga zinthu zakale ndikuyamba kuzikhudza kokha kudzera mu terraform, monga muzomangamanga zabwino kwambiri monga malingaliro a code. Ndi zamatsenga chabe pamene mutenga mtambo waukulu ndikuulandira kupyolera mu gulu mu mawonekedwe a terraform worker files. Ndiyeno grep/replace/git ndi zina zotero.

Ine ndinachipesa icho ndi kuchiyika icho mu dongosolo, ndinalandira chilolezo. Idatulutsidwa pa GitHub kwa aliyense Lachinayi (02.05.19/XNUMX/XNUMX). github.com/GoogleCloudPlatform/terraformer
Talandira kale nyenyezi 600, zopempha 2 zokoka kuti muwonjezere thandizo la openstack ndi kubernetes. Ndemanga yabwino. Kawirikawiri, ntchitoyi ndi yothandiza kwa anthu
Ndikulangiza aliyense amene akufuna kuyamba kugwira ntchito ndi Terraform osati kulembanso zonse za izi.
Ndikhala wokondwa kukoka zopempha, nkhani, nyenyezi.

Chotsatsa
Terraformer - Infrastructure to Code

Source: www.habr.com

Kuwonjezera ndemanga