Terraformer - Infrastructure To Code

Terraformer - Infrastructure To Code
Makemake wau e haʻi iā ʻoe e pili ana i ka mea hana CLI hou aʻu i kākau ai e hoʻoponopono i kahi pilikia kahiko.

pilikia

He kūlana maʻamau ka Terraform ma ke kaiāulu Devops/Cloud/IT. He mea maʻalahi a pono ka mea no ka hoʻopili ʻana i nā ʻōnaehana e like me ke code. Nui nā mea leʻaleʻa i loko o Terraform a me nā ʻōpala he nui, nā pahi ʻoi a me nā rake.
Me Terraform he mea maʻalahi loa ia e hana i nā mea hou a laila hoʻokele, hoʻololi a holoi paha. He aha ka mea e hana ai ka poʻe i loaʻa i kahi ʻenehana nui i ke ao a ʻaʻole i hana ʻia ma o Terraform? ʻO ke kākau hou ʻana a me ka hana hou ʻana i ke ao holoʻokoʻa he pipiʻi a palekana.
Ua loaʻa iaʻu kēia pilikia ma 2 mau hana, ʻo ka hiʻohiʻona maʻalahi ke makemake ʻoe i nā mea āpau ma Git ma ke ʻano o nā faila terraform, akā loaʻa iā ʻoe he 250+ mau bākeke a he nui ke kākau iā lākou ma ka terraform ma ka lima.
he nui na hilo mai 2014 ma terrafom i pani ʻia ma 2016 me ka manaʻolana e lawe ʻia mai.

Ma keʻano laulā, ua like nā mea a pau ma ke kiʻi wale nō mai ka'ākau a hema

'Ōlelo Aʻo: ʻAʻole noho ka mea kākau ma Rusia no ka hapalua o kona ola a kākau liʻiliʻi ma ka ʻōlelo Lūkini. E makaʻala i nā kuhi hewa.

Pāʻoihana

1. Aia kahi hoʻonā mākaukau a kahiko no AWS hana hoʻolāʻau. I koʻu hoʻāʻo ʻana e kiʻi i kaʻu mau bākeke 250+ ma o ia mea, ʻike wau ua hewa nā mea āpau ma laila. Ua lōʻihi ka hoʻolauna ʻana o AWS i nā koho hou he nui, akā ʻaʻole ʻike ka terraforming e pili ana iā lākou a ma ka laulā he ruby. kakaʻikahi ke nānā aku. Ma hope o ka hola 2 o ke ahiahi ua hoʻouna au Noi huki e hoʻohui hou aku i nā hiʻohiʻona ma laila a ʻike ʻia ʻaʻole kūpono kēlā ʻano hopena.
Pehea ka hana ʻana o ka terraforming: lawe ʻo ia i ka ʻikepili mai ka AWS SDK a hoʻopuka i ka tf a me ka tfstate ma o kahi template.
Aia 3 pilikia maanei:
1. E mau ana ka lag i nā mea hou
2. Ua haki nā faila i kekahi manawa
3. Ua ohi kaawale ka tfstate mai tf a aole e hui mau
Ma keʻano laulā, paʻakikī ka loaʻa ʻana o kahi hopena i ʻōlelo ai ʻo 'terraform plan' ʻaʻohe loli

2. ʻO ka 'terraform import' kahi kauoha i kūkulu ʻia i ka terraform. Pehea e hana ai?
Kākau ʻoe i kahi faila TF ʻole me ka inoa a me ke ʻano o ka kumuwaiwai, a laila holo 'terraform import' a hāʻawi i ka ID kumu waiwai. Hoʻopili ka terraform i ka mea hāʻawi, loaʻa ka ʻikepili a hana i kahi faila tfstate.
Aia 3 pilikia maanei:
1. Loaʻa iā mākou kahi faila tfstate wale nō, a ʻaʻole ka tf, pono ʻoe e kākau me ka lima a i ʻole e hoʻololi iā ia mai tfstate
2. Hiki ke hana me hoʻokahi kumu waiwai i ka manawa a ʻaʻole kākoʻo i nā kumuwaiwai āpau. A he aha kaʻu e hana hou ai me 250+ mau bākeke?
3. Pono ʻoe e ʻike i ka ID o nā kumuwaiwai - ʻo ia hoʻi, pono ʻoe e uhi iā ia i loko o ke code e loaʻa ai ka papa inoa o nā kumuwaiwai.
Ma keʻano laulā, he hapa ka hopena a ʻaʻole maikaʻi ka nui

ʻO kaʻu hoʻoholo

Manaʻo:
1. Hiki ke hana i nā faila tf a me tfstate no nā kumuwaiwai. No ka laʻana, hoʻoiho i nā bākeke a pau/hui palekana/kaumaha a hoʻihoʻi ʻia ka 'terraform plan' ʻaʻohe loli.
2. Pono ʻoe i 2 GCP + AWS ao
3. ʻO ka hoʻonā honua maʻalahi e hoʻonui i kēlā me kēia manawa a ʻaʻole hoʻopau manawa i kēlā me kēia kumuwaiwai no 3 mau lā o ka hana
4. Hana ia Open Source - like ka pilikia o kēlā me kēia kanaka

ʻO ka ʻōlelo Go ke kumu aʻu i makemake ai, a he waihona kona no ka hana ʻana i nā faila HCL i hoʻohana ʻia ma ka terraform + ka nui o nā code i ka terraform e hiki ke hoʻohana.

Ala

Hoao mua
Ua hoʻomaka wau me kahi mana maʻalahi. Hoʻokaʻaʻike i ke ao ma o ka SDK no ka kumuwaiwai i makemake ʻia a hoʻololi ʻia i loko o nā kahua no ka terraform. Ua make koke ka ho'āʻoʻana i ka hui palekana no ka meaʻaʻole wau i makemake i nā lā 1.5 e hoʻololi wale i ka hui palekana (a he nui nā kumuwaiwai). No ka manawa lōʻihi a laila hiki ke hoʻololi / hoʻohui ʻia nā māla

Hoao lua
Ma muli o ka manaʻo i wehewehe ʻia maanei. Lawe wale a hoʻololi i ka tfstate i tf. Aia nā ʻikepili a pau a ua like nā kahua. Pehea e loaʻa ai ka tfstate piha no nā kumuwaiwai he nui?? ʻO kēia kahi i hoʻopakele ai ke kauoha 'terraform refresh'. Lawe ʻo terraform i nā kumuwaiwai āpau ma tfstate a, ma ka ID, huki i ka ʻikepili ma luna o lākou a kākau i nā mea āpau i tfstate. ʻO ia hoʻi, e hana i kahi tfstate ʻole me nā inoa a me nā ID wale nō, holo 'terraform refresh' a laila loaʻa iā mākou nā tfstates piha. Hooray!
I kēia manawa, e hana kāua i nā kiʻi kiʻi kiʻi hou o ke kākau ʻana i kahi mea hoʻololi no tfstate i tf. No ka poʻe i heluhelu ʻole i ka tfstate, ʻo JSON, akā kūikawā.
Eia kona mau ʻāpana koʻikoʻi

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

Aia:
1. id - kaula
2. metadata - he laha o ka nui 1 a i loko o ia mea he mea me nā kīhāpai i wehewehe ʻia ma lalo nei
3. spec - hash o ka nui 1 a me ke kī, waiwai i loko
I ka pōkole, he ʻano leʻaleʻa, hiki i nā mea āpau ke hohonu i nā pae he nui

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

Ma keʻano laulā, inā makemake kekahi i kahi pilikia papahana no ka ninaninau, e noi wale iā lākou e kākau i kahi parser no kēia hana :)
Ma hope o nā ho'āʻo he nui e kākau i kahi parser me ka ʻole o nā pōpoki, ua loaʻa iaʻu kahi hapa o ia mea ma ke code terraform, a ʻo ka hapa nui loa. A ua maikaʻi nā mea a pau

Hoao ekolu
ʻO nā mea hoʻolako terraform nā binaries i loaʻa nā code me nā kumuwaiwai āpau a me nā loina no ka hana ʻana me ka API kapua. Loaʻa i kēlā me kēia ao kāna mea hoʻolako ponoʻī a me ka terraform ponoʻī e kāhea iā lākou ma o kāna protocol RPC ma waena o nā kaʻina ʻelua.
I kēia manawa ua hoʻoholo wau e hoʻopili pololei i nā mea hoʻolako terraform ma o nā kelepona RPC. Ua lilo ia i mea nani a hiki ke hoʻololi i nā mea hoʻolako terraform i nā mea hou a loaʻa i nā hiʻohiʻona hou me ka hoʻololi ʻole i ke code. ʻIke ʻia ʻaʻole pono nā kahua āpau ma tfstate i tf, akā pehea ʻoe e ʻike ai? E nīnau wale i kāu mea hoʻolako e pili ana i kēia. A laila hoʻomaka kekahi kiʻi ponoʻī hou o ka hui ʻana i nā ʻōlelo maʻamau, e ʻimi ana i nā kahua i loko o ka mokuʻāina ma nā pae āpau i ka hohonu.

I ka hopena, loaʻa iā mākou kahi hāmeʻa CLI pono i loaʻa kahi ʻōnaehana maʻamau no nā mea hoʻolako terraform āpau a hiki iā ʻoe ke hoʻohui i kahi mea hou. Eia kekahi, ʻo ka hoʻohui ʻana i nā kumuwaiwai e lawe i nā code liʻiliʻi. Hoʻohui i nā ʻano mea maikaʻi a pau e like me ka pilina ma waena o nā kumuwaiwai. ʻOiaʻiʻo, ua nui nā pilikia like ʻole i hiki ʻole ke wehewehe a pau.
Ua kapa au i ka holoholona ʻo Terrafomer.

ʻO ka hope

Ke hoʻohana nei iā Terrafomer, ua hana mākou i 500-700 tausani laina o ka code tf + tfstate mai nā ao ʻelua. Ua hiki iā mākou ke lawe i nā mea hoʻoilina a hoʻomaka e hoʻopā iā lākou ma o ka terraform, e like me ka ʻoihana maikaʻi loa e like me nā manaʻo code. He mea kilokilo wale nō ke lawe ʻoe i kahi ao nui a loaʻa iā ia ma o kahi hui ma ke ʻano o nā faila terraform worker. A laila grep/replace/git a pēlā aku.

Huli au a hoʻonohonoho pono, loaʻa ka ʻae. Hoʻokuʻu ʻia ma GitHub no nā mea āpau ma ka Pōʻalima (02.05.19/XNUMX/XNUMX). github.com/GoogleCloudPlatform/terraformer
Loaʻa i nā hōkū 600, 2 huki noi no ka hoʻohui ʻana i ke kākoʻo no openstack a me nā kubernetes. Manaʻo maikaʻi. Ma keʻano laulā, pono ka papahana no nā kānaka
Aʻo wau i nā mea a pau e makemake e hoʻomaka e hana me Terraform a mai kākau hou i nā mea āpau no kēia.
E hauʻoli wau e huki i nā noi, nā pilikia, nā hōkū.

Hōʻike
Terraformer - Infrastructure To Code

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka