Infrastruktur minangka kode: kenalan pisanan

Perusahaan kita lagi proses onboarding tim SRE. Aku teka menyang kabeh crita iki saka sisih pembangunan. Ing proses kasebut, aku teka karo pikirane lan wawasan sing aku pengin bareng karo pangembang liyane. Ing artikel refleksi iki aku ngomong babagan apa sing kedadeyan, kepiye kedadeyan, lan kepiye saben wong bisa terus urip.

Infrastruktur minangka kode: kenalan pisanan

Terusake saka seri artikel sing ditulis adhedhasar pidato ing acara internal kita DevForum:

1. Kucing Schrödinger tanpa kothak: masalah konsensus ing sistem sing disebarake.
2. Infrastruktur minangka kode. (Sampeyan kene)
3. Generasi kontrak Typescript nggunakake model C #. (Ing proses ...)
4. Pambuka algoritma konsensus Raft. (Ing proses ...)
...

Kita mutusake nggawe tim SRE, ngetrapake ide kasebut google sre. Dheweke direkrut programer saka antarane pangembang dhewe lan dikirim menyang latihan kanggo sawetara sasi.

Tim kasebut duwe tugas latihan ing ngisor iki:

  • Nerangake infrastruktur kita, sing biasane ana ing Microsoft Azure kanthi kode (Terraform lan kabeh sing ana ing sekitar).
  • Ajar pangembang cara nggarap infrastruktur.
  • Siapke pangembang kanggo tugas.

Kita ngenalake konsep Infrastruktur minangka kode

Ing model biasa ing donya (administrasi klasik), kawruh babagan infrastruktur dumunung ing rong panggonan:

  1. Utawa awujud kawruh ing pangarsaning para ahli.Infrastruktur minangka kode: kenalan pisanan
  2. Utawa informasi iki ana ing sawetara mesin tik, sawetara sing dikenal para ahli. Nanging dudu kasunyatan manawa wong njaba (yen kabeh tim tiba-tiba mati) bakal bisa ngerteni apa sing bisa ditindakake lan cara kerjane. Bisa uga ana akeh informasi babagan mesin: aksesoris, cronjob, intimidasi (pirsani. disk soyo tambah) disk lan mung dhaftar telas apa bisa kelakon. Pancen angel ngerteni apa sing kedadeyan.Infrastruktur minangka kode: kenalan pisanan

Ing kasus loro, kita nemokake awake dhewe kepepet dadi gumantung:

  • utawa saka wong sing mortal, tundhuk penyakit, tiba ing katresnan, swasana ati swings lan mung banal layoffs;
  • utawa saka mesin apa fisik, kang uga tiba, bakal dicolong, lan presents surprises lan inconveniences.

Mesthi wae, saenipun kabeh kudu diterjemahake menyang kode sing bisa diwaca manungsa, dijaga, lan ditulis kanthi apik.

Mangkono, infrastruktur minangka kode (Incfastructure minangka Kode - IaC) minangka gambaran saka kabeh infrastruktur sing ana ing wangun kode, uga alat sing gegandhengan kanggo nggarap lan ngleksanakake infrastruktur nyata saka iku.

Napa nerjemahake kabeh dadi kode?Wong dudu mesin. Dheweke ora bisa ngelingi kabeh. Reaksi wong lan mesin beda. Apa wae sing otomatis bisa luwih cepet tinimbang apa wae sing ditindakake dening manungsa. Sing paling penting yaiku siji sumber bebener.

Saka ngendi para insinyur SRE anyar?Dadi, kita mutusake kanggo nyewa insinyur SRE anyar, nanging saka ngendi? Buku kanthi jawaban sing bener (Buku SRE Google) ngandhani kita: saka pangembang. Sawise kabeh, padha bisa karo kode, lan sampeyan entuk negara becik.

Kita nggoleki akeh kanggo wektu sing suwe ing pasar personel ing njaba perusahaan kita. Nanging kita kudu ngakoni manawa kita ora nemokake sapa wae sing cocog karo panjaluk kita. Aku kudu nggoleki ing antarane bangsaku dhewe.

Masalah Infrastruktur minangka kode

Saiki ayo goleki conto carane infrastruktur bisa dikode dadi kode. Kode kasebut ditulis kanthi apik, kualitas dhuwur, kanthi komentar lan lekukan.

Tuladha kode saka Terraforma.

Infrastruktur minangka kode: kenalan pisanan

Tuladha kode saka Ansible.

Infrastruktur minangka kode: kenalan pisanan

Tuan-tuan, yen mung prasaja! We are ing donya nyata, lan iku tansah siap kanggo surprise sampeyan, menehi surprises lan masalah. Ora bisa nindakake tanpa dheweke ing kene.

1. Masalah pisanan iku ing paling kasus IaC sawetara jenis dsl.

Lan DSL, minangka gambaran saka struktur. Luwih tepate, sampeyan kudu duwe: Json, Yaml, modifikasi saka sawetara perusahaan gedhe sing teka karo dsl dhewe (HCL digunakake ing terraform).

Masalahe yaiku bisa uga ora ngemot barang-barang sing akrab kaya:

  • variabel;
  • kahanan;
  • nang endi wae ora ana komentar, contone, ing Json, minangka standar ora kasedhiya;
  • fungsi;
  • lan aku ora malah ngomong bab kuwi tingkat dhuwur minangka kelas, pusaka lan kabeh sing.

2. Masalah nomer loro karo kode kasebut yaiku sing paling kerep dadi lingkungan sing heterogen. Biasane sampeyan njagong lan nggarap C #, i.e. kanthi siji basa, siji tumpukan, siji ekosistem. Lan ing kene sampeyan duwe macem-macem teknologi.

Iki minangka kahanan sing nyata nalika bash karo python ngluncurake sawetara proses sing dilebokake Json. Sampeyan nganalisa, banjur sawetara generator liyane ngasilake 30 file liyane. Kanggo kabeh iki, variabel input ditampa saka Azure Key Vault, sing ditarik bebarengan dening plugin kanggo drone.io sing ditulis ing Go, lan variabel kasebut ngliwati yaml, sing digawe minangka asil saka mesin cithakan jsonnet. Pancen angel duwe kode sing diterangake kanthi apik nalika sampeyan duwe lingkungan sing beda-beda.

Pangembangan tradisional ing kerangka siji tugas teka karo siji basa. Ing kene kita nggarap akeh basa.

3. Masalah kaping telu yaiku nyetel. Kita digunakake kanggo kelangan editor (Ms Visual Studio, Jetbrains Rider) sing nindakake kabeh kanggo kita. Lan sanajan kita bodho, dheweke bakal ujar manawa kita salah. Iku misale jek normal lan alam.

Nanging ing endi wae ana VSCode, sing ana sawetara plugin sing diinstal, didhukung utawa ora didhukung. Versi anyar metu lan ora didhukung. A transisi banal kanggo ngleksanakake fungsi (sanajan ana) dadi masalah Komplek lan non-trivial. Ganti jeneng variabel sing gampang yaiku muter maneh ing proyek saka puluhan file. Sampeyan bakal begja yen dheweke nyedhiyakake apa sing sampeyan butuhake. Mesthi, ana backlighting ing kene, ana otomatis completion, nang endi wae ana format (sanajan ora bisa kanggo kula ing terraform ing Windows).

Ing wektu iki nulis plugin vscode-terraform durung dirilis kanggo ndhukung versi 0.12, sanajan wis dirilis kanggo 3 sasi.

Wis wayahe lali...

  1. Debugging
  2. Alat refactoring.
  3. Rampung otomatis.
  4. Ndeteksi kesalahan sajrone kompilasi.

Iku lucu, nanging iki uga nambah wektu pembangunan lan nambah nomer kasalahan sing pesti kelakon.

Sing paling awon yaiku yen kita kepeksa ora mikir babagan carane ngrancang, ngatur file menyang folder, ngurai, nggawe kode sing bisa dijaga, bisa diwaca, lan liya-liyane, nanging kepiye carane nulis perintah iki kanthi bener, amarga aku salah nulis. .

Minangka pamula, sampeyan nyoba sinau terraforms, lan IDE ora mbantu sampeyan. Nalika ana dokumentasi, mlebu lan deleng. Nanging yen sampeyan ngetik basa program anyar, IDE bakal pitutur marang kowe sing ana jinis kuwi, nanging ora ana bab kuwi. Paling ora ing tingkat int utawa senar. Iki asring migunani.

Apa bab tes?

Sampeyan takon: "Apa babagan tes, programer tuan-tuan?" Wong lanang serius nyoba kabeh babagan produksi, lan angel. Iki minangka conto tes unit kanggo modul terraform saka situs web Microsoft.

Infrastruktur minangka kode: kenalan pisanan

Dheweke duwe dokumentasi sing apik. Aku tansah seneng karo Microsoft kanggo pendekatan dokumentasi lan latihan. Nanging sampeyan ora perlu dadi Pakdhe Bob kanggo ngerti yen iki dudu kode sing sampurna. Wigati validasi ing sisih tengen.

Masalah karo test unit iku sampeyan lan aku bisa mriksa bener saka output Json. Aku mbuwang ing 5 paramèter lan diwenehi footcloth Json karo 2000 garis. Aku bisa nganalisa apa sing kedadeyan ing kene, validasi asil tes ...

Iku angel kanggo parse Json ing Go. Lan sampeyan kudu nulis ing Go, amarga terraform ing Go minangka praktik sing apik kanggo nyoba ing basa sing sampeyan tulis. Organisasi kode kasebut dhewe banget. Ing wektu sing padha, iki minangka perpustakaan paling apik kanggo tes.

Microsoft dhewe nulis modul kasebut, nguji kanthi cara iki. Mesthi iku Open Source. Kabeh sing dakkandhakake, sampeyan bisa teka lan ndandani. Aku bisa njagong mudhun lan ndandani kabeh ing minggu, mbukak plugin kode VS open source, terraforms, nggawe plugin kanggo penunggang. Mungkin nulis sawetara analisa, nambah linters, nyumbang perpustakaan kanggo testing. Aku bisa nindakake kabeh. Nanging dudu sing kudu daklakoni.

Praktek paling apik Infrastruktur minangka kode

Ayo nerusake. Yen ora ana tes ing IaC, IDE lan tuning ala, mula paling ora ana praktik paling apik. Aku mung pindhah menyang Google Analytics lan mbandhingake rong pitakon panelusuran: Praktik paling apik Terraform lan praktik paling apik c #.

Infrastruktur minangka kode: kenalan pisanan

Apa sing kita deleng? Statistik kejam ora cocog karo kita. Jumlah materi padha. Ing pangembangan C #, kita mung kebanjiran ing materi, kita duwe praktik paling apik, ana buku sing ditulis dening para ahli, lan uga buku sing ditulis ing buku dening ahli liyane sing ngritik buku kasebut. Segara dokumentasi resmi, artikel, kursus pelatihan, lan saiki uga pangembangan sumber terbuka.

Kanggo panyuwunan IaC: ing kene sampeyan nyoba ngumpulake informasi bit-bit saka laporan highload utawa HashiConf, saka dokumentasi resmi lan akeh masalah ing Github. Kepiye cara nyebarake modul kasebut ing umum, apa sing kudu ditindakake? Iku misale jek sing iki masalah nyata ... Ana komunitas, purun, ngendi kanggo pitakonan sampeyan bakal diwenehi 10 komentar ing Github. Nanging ora persis.

Sayange, ing wektu iki, para ahli wiwit muncul. Ana sawetara banget nganti saiki. Lan masyarakat dhewe nongkrong ing tingkat dhasar.

Ngendi kabeh iki arep lan apa apa

Sampeyan bisa nyelehake kabeh lan bali menyang C #, menyang donya penunggang. Nanging ora. Apa sampeyan malah repot nindakake iki yen sampeyan ora bisa nemokake solusi. Ing ngisor iki aku menehi kesimpulan subyektif. Sampeyan bisa mbantah karo aku ing komentar, bakal menarik.

Secara pribadi, aku taruhan ing sawetara perkara:

  1. Pangembangan ing wilayah iki kedadeyan kanthi cepet. Mangkene jadwal panjalukan kanggo DevOps.

    Infrastruktur minangka kode: kenalan pisanan

    Topik kasebut bisa uga dadi hype, nanging kasunyatan manawa bal kasebut tuwuh menehi pangarep-arep.

    Yen ana sing tuwuh kanthi cepet, mula bakal muncul wong sing pinter sing bakal ngandhani apa sing kudu ditindakake lan apa sing ora kudu ditindakake. Tambah ing popularitas ndadékaké kanggo kasunyatan sing Mungkin wong bakal duwe wektu kanggo pungkasanipun nambah plugin kanggo jsonnet kanggo vscode, kang bakal ngidini sampeyan nerusake kanggo ngleksanakake fungsi, tinimbang nelusuri liwat ctrl+shift+f. Nalika samubarang berkembang, luwih akeh bahan katon. Rilis buku saka Google babagan SRE minangka conto sing apik banget.

  2. Ana teknik lan praktik sing dikembangake ing pangembangan konvensional sing bisa ditindakake kanthi sukses ing kene. Ya, ana nuansa karo tes lan lingkungan heterogen, alat sing ora cukup, nanging akeh praktik wis diklumpukake sing bisa migunani lan mbiyantu.

    Conto sing ora pati penting: kolaborasi liwat pemrograman pasangan. Iku mbantu akeh kanggo mangerteni. Yen sampeyan duwe tangga teparo sing uga nyoba ngerteni apa wae, sampeyan bakal luwih ngerti.

    Ngerteni carane refactoring wis rampung mbantu kanggo nindakake malah ing kahanan kuwi. Yaiku, sampeyan ora bisa ngganti kabeh bebarengan, nanging ngganti jeneng, banjur ngganti lokasi, banjur sampeyan bisa nyorot sawetara bagean, oh, nanging ora cukup komentar ing kene.

kesimpulan

Senadyan kasunyatan manawa pemikiranku katon pesimis, aku ngarepake masa depan kanthi pangarep-arep lan kanthi tulus ngarep-arep kabeh bakal bisa ditindakake kanggo kita (lan sampeyan).

Bagian kapindho artikel lagi disiapake sabanjure. Ing kono, aku bakal ngomong babagan cara nyoba nggunakake praktik pangembangan tangkas kanggo nambah proses sinau lan nggarap infrastruktur.

Source: www.habr.com

Add a comment