Makili infrastruktur minangka kode ing format teks sing bisa diulang minangka praktik paling apik kanggo sistem sing ora mbutuhake clurut. Praktek iki duwe jeneng -
Mbandhingake pengalaman karo Terraform lan CloudFormation
Sadurunge teka
Terraform Ngeri
piranti lunak beta
Terraform durung ngrilis versi 1.0, sing dadi alesan sing apik kanggo ora nggunakake. Wis akeh owah-owahan wiwit aku nyoba dhewe, nanging maneh terraform apply
asring rusak sawise sawetara nganyari utawa mung sawise sawetara taun nggunakake. Aku bakal ngomong yen "kabeh wis beda saiki," nanging ... sing kabeh wong misale jek ngomong, ora? Ana owah-owahan sing ora cocog karo versi sadurungé, sanajan padha cocok, lan malah ngrasa kaya sintaks lan abstraksi saka toko sumber saiki apa kita kudu. Alat kasebut katon luwih apik, nanging ... :-0
Ing sisih liya, AWS wis nindakake tugas sing apik kanggo njaga kompatibilitas mundur. Iki bisa uga amarga layanan kasebut asring diuji kanthi teliti ing organisasi kasebut lan mung banjur, diganti jeneng, diterbitake. Dadi "dheweke nyoba banget" minangka understatement. Njaga kompatibilitas mundur karo API kanggo sistem sing beda-beda lan rumit kaya AWS pancen angel banget. Sapa wae sing kudu njaga API umum sing digunakake kanthi wiyar, kudu ngerti sepira angel ditindakake nganti pirang-pirang taun. Nanging prilaku CloudFormation, ing memoriku, ora nate owah sajrone pirang-pirang taun.
Ketemu sikil ... iku peluru
Sa adoh aku ngerti, mbusak sumber wong njaba Tumpukan CloudFormation saka tumpukan CF sampeyan ora bisa. Padha bener karo Terraform. Ngidini sampeyan ngimpor sumber daya sing ana menyang tumpukan sampeyan. Fungsi bisa ngandika apik tenan, nanging karo daya gedhe teka tanggung jawab gedhe. Sampeyan mung kudu nambah sumber daya kanggo tumpukan, lan nalika sampeyan nggarap tumpukan, sampeyan ora bisa mbusak utawa ngganti sumber iki. Sawijining dina iku backfired. Sawijining dina ing Twitch, ana wong sing ora sengaja ngimpor klompok keamanan AWS wong liya menyang tumpukan Terraform dhewe, nanging ora ana piala. Aku ngetik sawetara printah lan ... grup keamanan (bebarengan karo lalu lintas mlebu) ilang.
Terraform Agung
Recovery saka negara pepak
Kadhangkala CloudFormation gagal rampung transisi saka siji negara menyang liyane. Ing wektu sing padha, dheweke bakal nyoba bali menyang sing sadurunge. Sayange iki ora mesthi bisa ditindakake. Bisa uga cukup medeni kanggo debug apa sing kedadeyan mengko - sampeyan ora bakal ngerti apa CloudFormation bakal seneng amarga disusupi - sanajan mung kanggo ndandani. Apa utawa ora bakal bisa bali menyang negara sadurunge, dheweke pancene ora ngerti carane nemtokake lan, minangka standar, macet nganti pirang-pirang jam ngenteni mukjijat.
Terraform, ing sisih liya, cenderung pulih saka transisi sing gagal kanthi luwih apik lan nawakake alat debugging sing luwih maju.
Owah-owahan sing luwih jelas menyang negara dokumen
"Oke, load balancer, sampeyan ganti. Nanging carane?"
-insinyur cemas, siap menet tombol "nampa".
Kadhangkala aku kudu nindakake sawetara manipulasi karo load balancer ing tumpukan CloudFormation, kayata nambah nomer port utawa ngganti grup keamanan. ClouFormation nampilake owah-owahan sing ora apik. Aku, ing pin lan jarum, mriksa file yaml kaping sepuluh kanggo mesthekake yen aku ora mbusak apa-apa sing perlu lan ora nambah apa-apa sing ora perlu.
Terraform luwih transparan babagan iki. Kadhangkala dheweke malah transparan (waca: mboseni). Untunge, versi paling anyar kalebu tampilan owah-owahan sing luwih apik supaya sampeyan bisa ndeleng persis apa sing diganti.
Keluwesan
Tulis piranti lunak mundur.
Kanggo nyelehake, karakteristik sing paling penting saka piranti lunak sing umure dawa yaiku kemampuan kanggo adaptasi kanggo owah-owahan. Tulis piranti lunak apa wae mundur. Aku paling kerep nggawe kesalahan kanthi njupuk layanan "prasaja", lan banjur miwiti kanggo cram kabeh menyang CloudFormation siji utawa tumpukan Terraform. Lan mesthi, sasi mengko dicethakaké aku wis mangertos kabeh salah, lan layanan bener ora prasaja! Lan saiki aku kudu piye wae break tumpukan gedhe menyang komponen cilik. Nalika sampeyan nggarap CloudFormation, iki mung bisa ditindakake kanthi nggawe ulang tumpukan sing wis ana, nanging aku ora nindakake iki karo databaseku. Terraform, ing tangan liyane, ndadekake iku bisa kanggo mbedakake tumpukan lan break mudhun menyang bagean cilik liyane dingerteni.
Modul ing git
Nuduhake kode Terraform ing pirang-pirang tumpukan luwih gampang tinimbang nuduhake kode CloudFormation. Kanthi Terraform, sampeyan bisa nyelehake kode sampeyan ing repositori git lan ngakses nggunakake kontrol versi semantik. Sapa wae sing nduweni akses menyang repositori iki bisa nggunakake maneh kode sing dienggo bareng. CloudFormation padha karo S3, nanging ora duwe keuntungan padha, lan ora ana alesan apa kita kudu ninggalake git ing sih saka S3 ing kabeh.
Organisasi kasebut tuwuh lan kemampuan kanggo nuduhake tumpukan umum tekan tingkat kritis. Terraform ndadekake kabeh gampang lan alami, dene CloudFormation bakal nggawe sampeyan mlumpat sadurunge sampeyan bisa nindakake kaya iki.
Operasi minangka kode
"Ayo skrip lan oke."
- insinyur 3 taun sadurunge nyipta sepeda Terraform.
Nalika nerangake pangembangan piranti lunak, Go utawa program Java ora mung kode.
Kode minangka Kode
Ana uga infrastruktur sing bisa digunakake.
Infrastruktur minangka Kode
Nanging saka ngendi dheweke? Carane ngawasi? Kode sampeyan manggon ing ngendi? Apa pangembang mbutuhake ijin akses?
Operasi minangka Kode
Dadi pangembang piranti lunak ora mung ateges nulis kode.
AWS ora mung siji: sampeyan bisa uga nggunakake panyedhiya liyane. SignalFx, PagerDuty utawa Github. Mungkin sampeyan duwe server Jenkins internal kanggo CI / CD utawa dashboard Grafana internal kanggo ngawasi. Infra minangka Kode dipilih kanggo macem-macem alasan, lan saben padha penting kanggo kabeh related kanggo piranti lunak.
Nalika aku kerja ing Twitch, kita nyepetake layanan ing sistem gabungan Amazon lan AWS. We churned metu lan ndhukung akeh microservices, nambah biaya operasional. Diskusi kasebut kaya mangkene:
- Я: Sial, iku akeh gerakan kanggo overclock siji microservice. Aku kudu nggunakake sampah iki kanggo nggawe akun AWS (kita tindak menyang 2 akun ing layanan mikro), banjur iki kanggo nyetel tandha, iki kanggo gudang kode, lan iki kanggo dhaptar email, banjur iki...
- timbal: Ayo skrip lan oke.
- Я: Oke, nanging script dhewe bakal ngganti. Kita butuh cara kanggo mriksa manawa kabeh gizmos Amazon sing dibangun iki anyar.
- timbal: Koyone apik. Lan kita bakal nulis skrip kanggo iki.
- Я: Agung! Lan script mbokmenawa isih kudu nyetel paramèter. Apa dheweke bakal nampa?
- timbal: Ayo digawa menyang ngendi!
- Я: Proses bisa diganti lan kompatibilitas mundur bakal ilang. Sawetara jinis kontrol versi semantik bakal dibutuhake.
- timbal: Ide apik!
- Я: Piranti bisa diganti kanthi manual, ing antarmuka panganggo. Kita butuh cara kanggo mriksa lan ndandani iki.
… 3 taun sabanjure:
- timbal: Lan kita entuk terraform.
Moral crita kasebut yaiku: sanajan sampeyan sirah liwat tumit ing kabeh Amazon, sampeyan isih nggunakake soko ora saka AWS, lan layanan iki duwe negara sing nggunakake basa konfigurasi supaya negara ing sink.
CloudFormation lambda vs git modul terraform
lambda minangka solusi CloudFormation kanggo masalah logika khusus. Kanthi lambda sampeyan bisa
Aku elinga yen aku pengin nggawe penyebaran kenari kanggo lingkungan Elastic Beanstalk kanthi keseimbangan beban klasik. Wangsulan: Bab ingkang paling gampang kanggo nindakake bakal nggawe penyebaran kapindho kanggo EB jejere lingkungan produksi, njupuk langkah luwih: nggabungke grup penyebaran kenari otomatis skala karo LB penyebaran prajurit menyang lingkungan produksi. Lan wiwit Terraform nggunakake
Iku ndeteksi drift luwih apik
Priksa manawa kasunyatan cocog karo pangarepan.
Kanthi Terraform sampeyan duwe pancingan siklus urip sing luwih maju kanggo deteksi drift. Contone, sampeyan ngetik printah
CDK lan masa depan CloudFormation
CloudFormation angel dikelola kanthi skala gedhe, lintas-infrastruktur. Akeh kesulitan kasebut diakoni lan alat kasebut butuh kaya
Supaya Terraform ora nguciwani
Iki "infrastruktur minangka kode", lan ora "minangka teks".
Kesan pertamaku babagan Terraform rada ala. Aku mung ora ngerti pendekatan. Meh kabeh insinyur kanthi ora sengaja nganggep minangka format teks sing kudu diowahi dadi infrastruktur sing dikarepake. OJO IKI.
Truisme pangembangan piranti lunak sing apik uga ditrapake kanggo Terraform.
Aku wis ndeleng akeh praktik sing diadopsi kanggo nggawe kode apik sing ora digatekake ing Terraform. Sampeyan wis sinau pirang-pirang taun dadi programmer sing apik. Aja nyerah pengalaman iki mung amarga sampeyan lagi nggarap Terraform. Truisme pangembangan piranti lunak sing apik ditrapake kanggo Terraform.
Kepiye kode kasebut ora bisa didokumentasikake?
Aku wis ndeleng tumpukan Terraform ageng tanpa dokumentasi. Kepiye carane bisa nulis kode ing kaca - tanpa dokumentasi? Tambah dokumentasi sing nerangake sampeyan kode Terraform (penekanan ing tembung "kode"), kok bagean iki penting banget, lan apa apa.
Kepiye carane bisa nyebarake layanan sing nate dadi fungsi utama ()?
Aku wis katon banget Komplek Terraform tumpukan presented minangka modul siji. Napa kita ora masang piranti lunak kanthi cara iki? Napa kita pamisah fungsi gedhe dadi luwih cilik? Jawaban sing padha ditrapake kanggo Terraform. Yen modul sampeyan gedhe banget, sampeyan kudu dipérang dadi modul sing luwih cilik.
Apa perusahaan sampeyan ora nggunakake perpustakaan?
Aku wis weruh carane engineers, Spinning munggah proyek anyar nggunakake Terraform, stupidly copy-paste potongan ageng saka proyèk liyane menyang dhewe, lan banjur tinkered karo wong-wong mau nganti wiwit bisa. Apa sampeyan bisa nggarap kode "pertempuran" ing perusahaan sampeyan? Kita ora mung nggunakake perpustakaan. iya,
Apa sampeyan ora nggunakake PEP8 utawa gofmt?
Umume basa duwe skema format standar sing ditampa. Ing Python iki PEP8. Ing Go - gofmt. Terraform duweni dhewe: terraform fmt
. Seneng kanggo kesehatan!
Apa sampeyan bakal nggunakake React tanpa ngerti JavaScript?
modul Terraform bisa menakake sawetara bagéan saka infrastruktur Komplek sampeyan nggawe, nanging iki ora ateges sing ora bisa tinker karo ing kabeh. Pengin nggunakake Terraform kanthi bener tanpa mangerteni sumber daya? Sampeyan wis pinasthi: wektu bakal liwat, lan sampeyan ora bakal bisa nguwasani Terraform.
Apa sampeyan coding karo singletons utawa injeksi dependensi?
Injeksi ketergantungan minangka praktik paling apik sing diakoni kanggo pangembangan piranti lunak lan luwih disenengi tinimbang wong lajang. Kepiye carane iki migunani ing Terraform? Aku wis ndeleng modul Terraform sing gumantung ing negara remot. Tinimbang nulis modul sing njupuk negara remot, nulis modul sing njupuk paramèter. Lan banjur pass paramèter iki kanggo modul.
Apa perpustakaan sampeyan nindakake sepuluh perkara kanthi apik utawa siji perkara sing apik?
Pustaka sing paling apik yaiku perpustakaan sing fokus ing siji tugas sing ditindakake kanthi apik. Tinimbang nulis modul Terraform gedhe sing nyoba kanggo nindakake kabeh bebarengan, mbangun bagean saka wong-wong mau sing nindakake siji bab uga. Banjur gabungke yen perlu.
Kepiye carane nggawe owahan ing perpustakaan tanpa kompatibilitas mundur?
A modul Terraform umum, kaya perpustakaan biasa, kudu piye wae komunikasi owah-owahan kanggo pangguna tanpa kompatibel mundur. Iku ngganggu nalika owah-owahan iki kelakon ing perpustakaan, lan iku mung ngganggu nalika owah-owahan non-mundur-kompatibel digawe ing modul Terraform. Disaranake nggunakake tag git lan semver nalika nggunakake modul Terraform.
Apa layanan produksi sampeyan mlaku ing laptop utawa ing pusat data?
Hashicorp duwe alat kaya
Apa sampeyan ora nulis tes?
Insinyur ngakoni manawa kode kasebut kudu diuji, nanging dheweke asring lali babagan uji coba nalika nggarap Terraform. Kanggo infrastruktur, iki kebak karo momen sing mbebayani. Saran kula kanggo "test" utawa "nggawe conto" tumpukan nggunakake modul sing bisa disebarake bener kanggo testing sak CI / CD.
Terraform lan microservices
Urip lan mati perusahaan microservices gumantung saka kacepetan, inovasi, lan gangguan saka workstacks microservice anyar.
Aspek negatif sing paling umum digandhengake karo arsitektur microservice, lan sing ora bisa diilangi, ana hubungane karo karya, dudu kode kasebut. Yen sampeyan nganggep Terraform mung minangka cara kanggo ngotomatisasi mung sisi infrastruktur arsitektur microservices, mula sampeyan bakal kelangan keuntungan sejatine sistem kasebut. Saiki wis
Source: www.habr.com