Ngalih saka Terraform menyang CloudFormation - lan getun

Makili infrastruktur minangka kode ing format teks sing bisa diulang minangka praktik paling apik kanggo sistem sing ora mbutuhake clurut. Praktek iki duwe jeneng - Infrastruktur minangka Kode, lan nganti saiki ana rong alat populer kanggo ngetrapake, utamane ing AWS: Terraform и CloudFormation.

Ngalih saka Terraform menyang CloudFormation - lan getun
Mbandhingake pengalaman karo Terraform lan CloudFormation

Sadurunge teka twitch (dheweke iku Amazon Jr.) Aku nyambut gawe ing siji wiwitan lan digunakake Terraform telung taun. Ing panggonan anyar, Aku uga digunakake Terraform karo kabeh kekuatan, lan banjur perusahaan di-push transisi kanggo kabeh a la Amazon, kalebu CloudFormation. Aku sregep ngembangake praktik paling apik kanggo loro-lorone, lan nggunakake alat loro kasebut ing alur kerja sing rumit banget ing organisasi. Mengko, sawise mikir babagan implikasi saka migrasi saka Terraform menyang CloudFormation, aku dadi yakin yen Terraform bisa uga dadi pilihan sing paling apik kanggo organisasi kasebut.

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.

Ngalih saka Terraform menyang CloudFormation - lan getun
Kode minangka Kode

Ana uga infrastruktur sing bisa digunakake.

Ngalih saka Terraform menyang CloudFormation - lan getun
Infrastruktur minangka Kode

Nanging saka ngendi dheweke? Carane ngawasi? Kode sampeyan manggon ing ngendi? Apa pangembang mbutuhake ijin akses?

Ngalih saka Terraform menyang CloudFormation - lan getun
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 nggawe makro utawa sumber daya panganggo. Pendekatan iki ngenalake kerumitan tambahan sing ora ana ing versi semantik modul git Terraform. Kanggo kula, masalah sing paling penting yaiku ngatur ijin kanggo kabeh lambdas pangguna iki (lan iki puluhan akun AWS). Masalah penting liyane yaiku "apa sing luwih dhisik, pitik utawa endhog?" Masalah: ana hubungane karo kode lambda. Fungsi iki dhewe minangka infrastruktur lan kode, lan mbutuhake pemantauan lan nganyari. Pucuk pungkasan ing peti mati yaiku kesulitan nganyari kode lambda kanthi semantik; kita uga kudu nggawe manawa tumindak tumpukan tanpa printah langsung ora ngganti antarane mlaku.

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 ASG beantalk minangka kesimpulan, iki bakal mbutuhake 4 baris ekstra kode ing Terraform. Nalika aku takon apa ana solusi iso dibandhingke ing CloudFormation, padha nuding kula kanggo kabèh git gudang karo pipeline penyebaran lan kabeh, kabeh kanggo soko sing miskin 4 baris kode Terraform bisa nindakake.

Iku ndeteksi drift luwih apik

Priksa manawa kasunyatan cocog karo pangarepan.

Deteksi drift minangka operasi sing kuat banget minangka fitur kode amarga mbantu mesthekake yen kasunyatan cocog karo pangarepan. Kasedhiya karo CloudFormation lan Terraform. Nanging nalika tumpukan produksi saya tambah akeh, nggoleki drift ing CloudFormation ngasilake deteksi palsu liyane.

Kanthi Terraform sampeyan duwe pancingan siklus urip sing luwih maju kanggo deteksi drift. Contone, sampeyan ngetik printah ignore_changes langsung ing definisi tugas ECS yen sampeyan pengin nglirwakake owah-owahan ing definisi tugas tartamtu tanpa nglirwakake owah-owahan kanggo kabeh penyebaran prajurit ECS Panjenengan.

CDK lan masa depan CloudFormation

CloudFormation angel dikelola kanthi skala gedhe, lintas-infrastruktur. Akeh kesulitan kasebut diakoni lan alat kasebut butuh kaya aws-cdk, kerangka kanggo nemtokake infrastruktur maya ing kode lan mbukak liwat AWS CloudFormation. Iku bakal menarik kanggo ndeleng apa mangsa terus kanggo aws-cdk, nanging bakal duwe wektu hard saingan karo kekuatan liyane Terraform; kanggo nganyari CloudFormation, owah-owahan global bakal dibutuhake.

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, ora kabeh kudu dadi perpustakaan, nanging ing ngendi kita tanpa perpustakaan bareng ing prinsip?!

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 awan terraform kanggo mbukak terraform Panjenengan. Layanan terpusat iki nggampangake kanggo ngatur, audit, lan nyetujoni owah-owahan terraform.

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 kabeh kaya kode.

Source: www.habr.com

Add a comment