Terraformer - Infrastructure To Code

Terraformer - Infrastructure To Code
Emi yoo fẹ lati sọ fun ọ nipa irinṣẹ CLI tuntun ti Mo kowe lati yanju iṣoro atijọ kan.

Isoro

Terraform ti pẹ ti jẹ boṣewa ni agbegbe Devops/Awọsanma/IT. Ohun naa rọrun pupọ ati iwulo fun ṣiṣe pẹlu awọn amayederun bi koodu. Ọpọlọpọ awọn idunnu wa ni Terraform ati ọpọlọpọ awọn orita, awọn ọbẹ didasilẹ ati awọn rakes.
Pẹlu Terraform o rọrun pupọ lati ṣẹda awọn nkan tuntun lẹhinna ṣakoso, yipada tabi paarẹ wọn. Kini o yẹ ki awọn ti o ni awọn amayederun nla ninu awọsanma ati pe ko ṣẹda nipasẹ Terraform ṣe? Atunkọ ati tun-ṣẹda gbogbo awọsanma jẹ bakan gbowolori ati ailewu.
Mo pade iṣoro yii ni awọn iṣẹ 2, apẹẹrẹ ti o rọrun julọ ni nigbati o fẹ ki ohun gbogbo wa ni Git ni irisi awọn faili terraform, ṣugbọn o ni awọn buckets 250+ ati pe o jẹ pupọ lati kọ wọn ni terraform nipasẹ ọwọ.
Nibẹ ni o wa oro niwon 2014 ni terrafom eyi ti a ti ni pipade ni 2016 pẹlu ireti wipe nibẹ ni yio je agbewọle.

Ni gbogbogbo, ohun gbogbo jẹ bi ninu aworan nikan lati ọtun si osi

Awọn ikilo: Onkọwe ko gbe ni Russia fun idaji igbesi aye rẹ ati kọwe diẹ ni Russian. Ṣọra fun awọn aṣiṣe akọtọ.

Awọn ojutu

1. Nibẹ ni a setan-ṣe ati ki o atijọ ojutu fun AWS terraforming. Nigbati mo gbiyanju lati gba mi 250+ garawa nipasẹ o, Mo ti ri pe ohun gbogbo ni buburu nibẹ. AWS ti pẹ ti n ṣafihan ọpọlọpọ awọn aṣayan tuntun, ṣugbọn terraforming ko mọ nipa wọn ati ni gbogbogbo o jẹ ruby awoṣe wulẹ fọnka. Lẹhin 2 ni aṣalẹ ni mo rán Fa ìbéèrè lati ṣafikun awọn ẹya diẹ sii nibẹ ati rii pe iru ojutu ko dara rara.
Bawo ni terraforming ṣe n ṣiṣẹ: o gba data lati AWS SDK ati ṣe ipilẹṣẹ tf ati tfstate nipasẹ awoṣe kan.
Awọn iṣoro mẹta wa nibi:
1. Nibẹ ni yio ma jẹ aisun ni awọn imudojuiwọn
2. tf awọn faili ma wa jade dà
3. tfstate ti wa ni gbigba lọtọ lati tf ati ki o ko nigbagbogbo converge
Ni gbogbogbo, o ṣoro lati gba abajade ninu eyiti “ero terraform” sọ pe ko si awọn ayipada

2. `terraform gbe wọle` ni a-itumọ ti ni aṣẹ ni terraform. Bawo ni o ṣe n ṣiṣẹ?
O kọ faili TF ti o ṣofo pẹlu orukọ ati iru orisun, lẹhinna ṣiṣe `igbewọle terraform' ki o kọja ID orisun. terraform kan si olupese, gba data ati ṣe faili tfstate.
Awọn iṣoro mẹta wa nibi:
1. A gba faili tfstate nikan, ati tf jẹ ofo, o nilo lati kọ pẹlu ọwọ tabi yi pada lati tfstate
2. Le nikan ṣiṣẹ pẹlu kan awọn oluşewadi ni akoko kan ati ki o ko ni atilẹyin gbogbo oro. Ati kini MO tun ṣe pẹlu awọn buckets 250+?
3. O nilo lati mọ ID ti awọn orisun - iyẹn ni, o nilo lati fi ipari si ni koodu ti o gba atokọ awọn orisun
Ni gbogbogbo, abajade jẹ apakan ati pe ko ṣe iwọn daradara

Ipinnu mi

Awọn ibeere:
1. Agbara lati ṣẹda tf ati awọn faili tfstate fun awọn orisun. Fun apẹẹrẹ, ṣe igbasilẹ gbogbo awọn garawa / ẹgbẹ aabo / iwọntunwọnsi fifuye ati pe “ero terraform” pada pe ko si awọn ayipada
2. O nilo 2 GCP + AWS awọsanma
3. Ojutu agbaye ti o rọrun lati mu imudojuiwọn ni gbogbo igba ati pe ko padanu akoko lori orisun kọọkan fun awọn ọjọ 3 ti iṣẹ
4. Ṣe o Open Source - gbogbo eniyan ni o ni kanna isoro

Ede Go ni idi ti Mo nifẹ rẹ, ati pe o ni ile-ikawe kan fun ṣiṣẹda awọn faili HCL ti o lo ni terraform + koodu pupọ ni terraform ti o le wulo

Ọna

Igbiyanju akọkọ
Mo bẹrẹ pẹlu ẹya ti o rọrun. Kan si awọsanma nipasẹ SDK fun awọn oluşewadi ti a beere ati iyipada si awọn aaye fun terraform. Igbiyanju naa ku lẹsẹkẹsẹ lori ẹgbẹ aabo nitori Emi ko fẹran awọn ọjọ 1.5 lati ṣe iyipada ẹgbẹ aabo nikan (ati pe ọpọlọpọ awọn orisun wa). Fun igba pipẹ ati lẹhinna awọn aaye le yipada / ṣafikun

Igbiyanju keji
Da lori ero ti a ṣalaye nibi. Kan gba ati yi tfstate pada si tf. Gbogbo data wa nibẹ ati awọn aaye jẹ kanna. Bawo ni lati gba tfstate ni kikun fun ọpọlọpọ awọn orisun ?? Eyi ni ibi ti aṣẹ `terraform refresh' ti wa si igbala. terraform gba gbogbo awọn orisun ni tfstate ati, nipasẹ ID, fa data jade lori wọn ati kọ ohun gbogbo si tfstate. Iyẹn ni, ṣẹda tfstate ofo pẹlu awọn orukọ nikan ati awọn ID, ṣiṣe `terraform refresh' ati lẹhinna a gba tfstates ni kikun. Hooray!
Bayi jẹ ki a ṣe awọn aworan iwokuwo loorekoore ti kikọ oluyipada fun tfstate si tf. Fun awon ti o ti ko ka tfstate, o jẹ JSON, ṣugbọn pataki.
Eyi ni awọn abuda apakan pataki rẹ

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

O wa:
1. id - okun
2. metadata - titobi ti iwọn 1 ati ninu rẹ ohun kan pẹlu awọn aaye eyiti a ṣe apejuwe rẹ ni isalẹ
3. spec - hash ti iwọn 1 ati bọtini, iye ninu rẹ
Ni kukuru, ọna kika igbadun, ohun gbogbo le jẹ awọn ipele pupọ jin

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

Ni gbogbogbo, ti ẹnikẹni ba fẹ iṣoro siseto fun ifọrọwanilẹnuwo, kan beere lọwọ wọn lati kọ parser kan fun iṣẹ yii :)
Lẹhin ọpọlọpọ awọn igbiyanju lati kọ parser laisi awọn idun, Mo rii apakan ninu koodu terraform, ati apakan pataki julọ. Ati pe ohun gbogbo dabi pe o ṣiṣẹ daradara

Igbiyanju mẹta
awọn olupese terraform jẹ awọn alakomeji ti o ni koodu pẹlu gbogbo awọn orisun ati ọgbọn fun ṣiṣẹ pẹlu API awọsanma. Awọsanma kọọkan ni olupese tirẹ ati terraform funrararẹ nikan pe wọn nipasẹ ilana RPC rẹ laarin awọn ilana meji.
Bayi Mo pinnu lati kan si awọn olupese terraform taara nipasẹ awọn ipe RPC. O wa ni ẹwa ati jẹ ki o ṣee ṣe lati yi awọn olupese terraform pada si awọn tuntun ati gba awọn ẹya tuntun laisi yiyipada koodu naa. O tun wa ni pe kii ṣe gbogbo awọn aaye ni tfstate yẹ ki o wa ni tf, ṣugbọn bawo ni o ṣe le rii? Kan beere lọwọ olupese rẹ nipa eyi. Lẹhinna awọn aworan iwokuwo atunwi miiran ti apejọ awọn ikosile deede bẹrẹ, wiwa awọn aaye inu tfstate ni gbogbo awọn ipele ni ijinle.

Ni ipari, a ni ohun elo CLI ti o wulo ti o ni awọn amayederun ti o wọpọ fun gbogbo awọn olupese terraform ati pe o le ṣafikun ọkan tuntun ni irọrun. Paapaa, fifi awọn orisun kun gba koodu kekere. Pẹlupẹlu gbogbo iru awọn ohun rere gẹgẹbi awọn asopọ laarin awọn orisun. Dajudaju, ọpọlọpọ awọn iṣoro oriṣiriṣi wa ti a ko le ṣe apejuwe gbogbo rẹ.
Mo ti a npè ni eranko Terrafomer.

Ik

Lilo Terrafomer, a ṣe ipilẹṣẹ 500-700 ẹgbẹrun awọn ila ti tf + tfstate koodu lati awọn awọsanma meji. A ni anfani lati mu awọn nkan pataki ati bẹrẹ fọwọkan wọn nikan nipasẹ terraform, bi ninu awọn amayederun ti o dara julọ bi awọn imọran koodu. O jẹ idan nikan nigbati o ba mu awọsanma nla kan ki o gba nipasẹ ẹgbẹ kan ni irisi awọn faili oṣiṣẹ terraform. Ati lẹhinna grep / rọpo / git ati bẹbẹ lọ.

Mo combed o si fi si ibere, ni igbanilaaye. Tu silẹ lori GitHub fun gbogbo eniyan ni Ọjọbọ (02.05.19/XNUMX/XNUMX). github.com/GoogleCloudPlatform/terraformer
Tẹlẹ gba awọn irawọ 600, awọn ibeere fa 2 fun fifi atilẹyin fun openstack ati kubernetes. esi ti o dara. Ni gbogbogbo, ise agbese na wulo fun eniyan
Mo ni imọran gbogbo eniyan ti o fẹ lati bẹrẹ ṣiṣẹ pẹlu Terraform ati pe ko tun kọ ohun gbogbo fun eyi.
Emi yoo dun lati fa awọn ibeere, awọn ọran, awọn irawọ.

Ririnkiri
Terraformer - Infrastructure To Code

orisun: www.habr.com

Fi ọrọìwòye kun