Aku arep menehi pitutur marang kowe babagan alat CLI anyar sing aku tulis kanggo ngatasi masalah lawas.
masalah
Terraform wis suwe dadi standar ing komunitas Devops/Cloud/IT. Bab kasebut trep banget lan migunani kanggo ngatasi infrastruktur minangka kode. Ana akeh kasenengan ing Terraform uga akeh garpu, lading landhep lan garu.
Kanthi Terraform, trep banget kanggo nggawe barang anyar banjur ngatur, ngganti utawa mbusak. Apa sing kudu ditindakake dening wong sing duwe infrastruktur gedhe ing awan lan ora digawe liwat Terraform? Nulis maneh lan nggawe maneh kabeh awan iku larang lan ora aman.
Aku nemoni masalah iki ing 2 proyek, conto paling gampang yaiku yen sampeyan pengin kabeh ing Git ing bentuk file terraform, nanging sampeyan duwe 250+ ember lan akeh sing nulis ing terraform kanthi tangan.
Ana
Umumé, kabeh kaya ing gambar mung saka tengen ngiwa
Pènget: Penulis ora manggon ing Rusia kanggo setengah urip lan nulis sethithik ing basa Rusia. Ati-ati saka kesalahan ejaan.
Solusi
1. Ana solusi siap-digawe lan lawas kanggo AWS
Cara kerja terraforming: njupuk data saka AWS SDK lan ngasilake tf lan tfstate liwat cithakan.
Ana 3 masalah ing kene:
1. Bakal tansah ana lag ing nganyari
2. file tf kadhangkala metu rusak
3. tfstate diklumpukake kapisah saka tf lan ora tansah converge
Umumé, angel entuk asil sing `rencana terraform` ujar manawa ora ana owah-owahan
2. `terraform import` minangka perintah sing dibangun ing terraform. Piye cara kerjane?
Sampeyan nulis file TF kosong kanthi jeneng lan jinis sumber daya, banjur mbukak `terraform import` lan pass ID sumber. terraform kontak panyedhiya, nampa data lan nggawe file tfstate.
Ana 3 masalah ing kene:
1. Kita mung entuk file tfstate, lan tf kosong, sampeyan kudu nulis kanthi manual utawa ngowahi saka tfstate
2. Mung bisa nggarap siji sumber sekaligus lan ora ndhukung kabeh sumber daya. Lan apa aku kudu maneh karo 250+ ember?
3. Sampeyan kudu ngerti ID sumber daya - yaiku, sampeyan kudu mbungkus ing kode sing entuk dhaptar sumber daya
Umumé, asile parsial lan ora ukuran sing apik
keputusanku
Syarat:
1. Kemampuan kanggo nggawe file tf lan tfstate kanggo sumber daya. Contone, download kabeh buckets/grup keamanan/load balancer lan `rencana terraform` bali yen ora ana owah-owahan.
2. Sampeyan kudu 2 GCP + AWS maya
3. Solusi global sing gampang dianyari saben wektu lan ora mbuwang wektu ing saben sumber daya sajrone 3 dina kerja
4. Nggawe Open Source - saben wong duwe masalah sing padha
Basa Go kok aku seneng, lan duwe perpustakaan kanggo nggawe file HCL sing digunakake ing terraform + akeh kode ing terraform sing bisa migunani.
path
nyoba pisanan
Aku miwiti karo versi prasaja. Hubungi awan liwat SDK kanggo sumber daya sing dibutuhake lan ngowahi dadi lapangan kanggo terraform. Nyoba mati langsung ing grup keamanan amarga aku ora kaya 1.5 dina Ngonversi mung grup keamanan (lan ana akèh sumber). Kanggo dangu banjur lapangan bisa diganti / ditambahake
nyoba kaping pindho
Adhedhasar pamanggih ingkang dipunandharaken
Saiki ayo nindakake pornografi rekursif kanggo nulis konverter kanggo tfstate dadi tf. Kanggo sing durung nate maca tfstate, iku JSON, nanging khusus.
Punika atribut bagean penting
"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",
Ana:
1. id - string
2. metadata - Uploaded ukuran 1 lan ing obyek karo lapangan kang diterangake ing ngisor iki
3. spec - hash ukuran 1 lan tombol, Nilai ing
Ing cendhak, format sing nyenengake, kabeh bisa dadi sawetara tingkat jero
"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",
Umumé, yen ana sing pengin masalah pemrograman kanggo wawancara, mung takon dheweke nulis parser kanggo tugas iki :)
Sawise akeh usaha kanggo nulis parser tanpa kewan omo, aku nemokake bagean kasebut ing kode terraform, lan sing paling penting. Lan kabeh katon apik
Coba telu
panyedhiya terraform minangka binari sing ngemot kode kanthi kabeh sumber daya lan logika kanggo nggarap API awan. Saben awan duwe panyedhiya lan terraform dhewe mung nelpon liwat protokol RPC ing antarane rong proses.
Saiki aku mutusake kanggo hubungi panyedhiya terraform langsung liwat telpon RPC. Ternyata apik banget lan bisa ngganti panyedhiya terraform menyang sing luwih anyar lan entuk fitur anyar tanpa ngganti kode kasebut. Pranyata uga ora kabeh lapangan ing tfstate kudu ana ing tf, nanging kepiye sampeyan bisa ngerteni? Cukup takon panyedhiya babagan iki. Banjur pornografi rekursif liyane kanggo ngrakit ekspresi reguler diwiwiti, nggoleki lapangan ing tfstate ing kabeh tingkat kanthi jero.
Pungkasane, kita entuk alat CLI sing migunani sing duwe infrastruktur umum kanggo kabeh panyedhiya terraform lan sampeyan bisa kanthi gampang nambah sing anyar. Uga, nambah sumber daya mbutuhake kode cilik. Plus kabeh jinis barang kayata sambungan antarane sumber daya. Mesthi, ana macem-macem masalah sing ora bisa diterangake kabeh.
Aku jenenge Terrafomer kewan.
Rampung
Nggunakake Terrafomer, kita ngasilake 500-700 ewu baris kode tf + tfstate saka rong awan. Kita bisa njupuk barang-barang warisan lan wiwit ndemek mung liwat terraform, kaya ing infrastruktur paling apik minangka ide kode. Iku mung sihir nalika sampeyan njupuk awan gedhe lan nampa liwat tim ing wangun file buruh terraform. Banjur grep / ngganti / git lan liya-liyane.
Aku nyisir lan ditata, entuk ijin. Dirilis ing GitHub kanggo kabeh wong ing Kamis (02.05.19/XNUMX/XNUMX).
Wis ditampa 600 lintang, 2 narik panjalukan kanggo nambah support kanggo openstack lan kubernetes. Umpan balik apik. Umumé, proyek kasebut migunani kanggo wong
Aku menehi saran kabeh sing pengin miwiti nggarap Terraform lan ora nulis ulang kabeh babagan iki.
Aku bakal bungah kanggo narik panjalukan, masalah, lintang.
Demo
Source: www.habr.com