Terraformer - Infrastruktur Kanggo Kode

Terraformer - Infrastruktur Kanggo Kode
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 Jeksa Agung bisa ngetokake wiwit 2014 ing terrafom kang ditutup ing 2016 karo pangarep-arep sing bakal ana impor.

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 terraforming. Nalika aku nyoba kanggo njaluk sandi 250+ buckets liwat, Aku temen maujud sing kabeh ana ala ana. AWS wis suwe ngenalake akeh pilihan anyar, nanging terraforming ora ngerti babagan iki lan umume ruby ​​​​ cithakan katon arang. Sawise jam 2 sore aku ngirim Panjaluk tarik kanggo nambah fitur liyane ana lan temen maujud sing solusi kuwi ora cocok ing kabeh.
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 kene. Mung njupuk lan Ngonversi tfstate kanggo tf. Kabeh data ana lan lapangan padha. Kepiye carane entuk tfstate lengkap kanggo akeh sumber daya ?? Iki ngendi printah `terraform refresh` teka kanggo ngluwari. terraform njupuk kabeh sumber daya ing tfstate lan, dening ID, narik metu data lan nulis kabeh kanggo tfstate. Yaiku, nggawe tfstate kosong kanthi mung jeneng lan ID, mbukak `terraform refresh` banjur entuk tfstates lengkap. Hore!
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). github.com/GoogleCloudPlatform/terraformer
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
Terraformer - Infrastruktur Kanggo Kode

Source: www.habr.com

Add a comment