Pindah tina Terraform ka CloudFormation - sareng hanjakal

Ngawakilan infrastruktur salaku kode dina format téks anu tiasa diulang mangrupikeun prakték pangsaéna anu sederhana pikeun sistem anu henteu ngabutuhkeun rebab sareng beurit. prakték ieu boga ngaran - Infrastruktur salaku Code, sareng dugi ka ayeuna aya dua alat anu populér pikeun nerapkeun éta, khususna dina AWS: Terraform и CloudFormation.

Pindah tina Terraform ka CloudFormation - sareng hanjakal
Ngabandingkeun pangalaman sareng Terraform sareng CloudFormation

Sateuacan sumping ka kedutan (anjeunna téh Amazon Jr.) Abdi damel dina hiji ngamimitian sarta dipaké Terraform salila tilu taun. Di tempat anyar, Kuring ogé dipaké Terraform kalawan sakabeh kakuatan kuring, lajeng parusahaan kadorong transisi ka sagalana a la Amazon, kaasup CloudFormation. Kuring geus rajin ngembangkeun prakték pangalusna pikeun duanana, sarta geus dipaké duanana parabot dina pisan kompléks, workflows organisasi-lega. Engké, sanggeus thoughtfully timbangan implikasi tina migrasi ti Terraform ka CloudFormation, abdi janten yakin yén Terraform meureun pilihan pangalusna pikeun organisasi.

Terraform pikareueuseun

software béta

Terraform teu acan ngarilis versi 1.0 acan, nu mangrupakeun alesan alus teu make eta. Eta geus robah pisan saprak kuring mimiti nyobaan sorangan, tapi deui lajeng terraform apply sering rusak saatos sababaraha apdet atanapi ngan ukur saatos sababaraha taun dianggo. Kuring bakal nyebutkeun yén "sagala geus béda ayeuna," tapi ... éta naon dulur sigana ngomong, teu? Aya parobihan anu teu cocog sareng versi sateuacana, sanaos aranjeunna cocog, bahkan sigana sintaksis sareng abstraksi toko sumber ayeuna mangrupikeun anu urang peryogikeun. Alatna sigana parantos langkung saé, tapi ... :-0

Di sisi anu sanés, AWS parantos ngalaksanakeun padamelan anu saé pikeun ngajaga kasaluyuan mundur. Ieu sigana kusabab jasa-jasa na sering diuji sacara saksama dina organisasi sareng ngan lajeng, diganti ngaranna, diterbitkeun. Janten "aranjeunna usaha keras" mangrupikeun pernyataan anu ngahinakeun. Ngajaga kasaluyuan mundur sareng API pikeun sistem anu variatif sareng kompleks sapertos AWS luar biasa sesah. Saha waé anu kedah ngajaga API umum anu dianggo salega-legana kedah ngartos kumaha sesahna pikeun ngalakukeunana salami mangtaun-taun. Tapi paripolah CloudFormation, dina mémori kuring, henteu kantos robih salami mangtaun-taun.

Nepungan suku... éta pélor

Sajauh kuring terang, ngahapus sumberdaya urang luar CloudFormation tumpukan ti tumpukan cf Anjeun teu mungkin. Sami leres sareng Terraform. Eta ngidinan Anjeun pikeun ngimpor sumberdaya aya kana tumpukan Anjeun. fungsi nu bisa disebutkeun endah, tapi kalawan kakuatan hébat asalna tanggung jawab hébat. Anjeun ngan perlu nambahkeun sumberdaya ka tumpukan, sarta bari anjeun gawé bareng tumpukan Anjeun, Anjeun teu bisa mupus atawa ngarobah sumberdaya ieu. Hiji poé éta backfired. Hiji dinten di Twitch, aya anu ngahaja ngimpor grup kaamanan AWS batur kana tumpukan Terraform sorangan bari henteu dugi ka kajahatan. Kuring diasupkeun sababaraha paréntah jeung ... grup kaamanan (sareng lalulintas asup) ngiles.

Terraform Agung

Pamulihan tina kaayaan teu lengkep

Kadang CloudFormation gagal lengkep transisi tina hiji kaayaan ka nu sejen. Dina waktos anu sami, anjeunna bakal nyobian uih deui ka anu sateuacana. Hanjakal, ieu teu salawasna mungkin. Bisa jadi rada pikasieuneun mun debug naon anu lumangsung engké - anjeun pernah nyaho naha CloudFormation bakal senang nu keur hacked - sanajan ngan pikeun ngalereskeun eta. Naha atanapi henteu bakal tiasa uih deui ka kaayaan sateuacana, anjeunna leres-leres henteu terang kumaha nangtukeun sareng, sacara standar, ngagantung sababaraha jam ngantosan mujijat.

Terraform, di sisi anu sanés, condong pulih tina transisi anu gagal langkung anggun sareng nawiskeun alat debugging canggih.

Parobihan anu langkung jelas kana kaayaan dokumén

"Oke, load balancer, anjeun ganti. Tapi kumaha?"

-insinyur hariwang, siap pencét tombol "nampi".

Kadang-kadang kuring kedah ngalakukeun sababaraha manipulasi sareng balancer beban dina tumpukan CloudFormation, sapertos nambihan nomer port atanapi ngarobih grup kaamanan. ClouFormation mintonkeun parobahan goréng. Abdi, dina pin sareng jarum, pariksa deui file yaml sapuluh kali pikeun mastikeun yén kuring henteu ngahapus naon waé anu diperyogikeun sareng henteu nambihan nanaon anu teu perlu.

Terraform langkung transparan dina hal ieu. Kadang-kadang anjeunna malah teuing transparan (baca: bangor). Untungna, vérsi pangénggalna kalebet tampilan parobihan anu ditingkatkeun ku kituna anjeun ayeuna tiasa ningali persis naon anu robih.

Kalenturan

Tulis software ka tukang.

Terus terang, ciri anu paling penting tina parangkat lunak umur panjang nyaéta kamampuan pikeun adaptasi kana parobahan. Tulis parangkat lunak naon waé mundur. Kuring paling sering nyieun kasalahan ku cara nyokot layanan "basajan", lajeng mimiti cram sagalana kana CloudFormation tunggal atawa tumpukan Terraform. Sarta tangtu, sababaraha bulan engké ieu wangsit yén kuring geus dipikaharti sagalana salah, sarta layanan ieu sabenerna mah basajan! Tur ayeuna kuring kudu kumaha bae megatkeun tumpukan badag kana komponén leutik. Nalika anjeun damel sareng CloudFormation, ieu ngan ukur tiasa dilakukeun ku ngadamel ulang tumpukan anu tos aya, tapi kuring henteu ngalakukeun ieu sareng database kuring. Terraform, di sisi anu sanésna, ngamungkinkeun pikeun ngabedah tumpukan sareng ngarobih kana bagian-bagian anu langkung alit.

Modul dina git

Ngabagikeun kode Terraform dina sababaraha tumpukan langkung gampang tibatan ngabagi kode CloudFormation. Kalayan Terraform, anjeun tiasa nempatkeun kode anjeun dina gudang git sareng ngaksésna nganggo kontrol versi semantik. Saha waé anu gaduh aksés kana gudang ieu tiasa nganggo deui kodeu anu dibagikeun. Sarimbag CloudFormation nyaeta S3, tapi teu boga kauntungan anu sarua, tur euweuh alesan naha urang kudu abandon git dina kahadean S3 pisan.

Organisasi tumuwuh sareng kamampuan ngabagi tumpukan umum ngahontal tingkat kritis. Terraform ngajadikeun ieu sadayana gampang sareng alami, sedengkeun CloudFormation bakal ngajantenkeun anjeun ngaluncat kalang sateuacan anjeun tiasa damel sapertos kieu.

Operasi salaku kode

"Hayu urang skripsi sareng oke."

-Insinyur 3 taun sateuacan nyiptakeun sapédah Terraform.

Lamun datang ka ngembangkeun software, Go atawa program Java teu ngan kode.

Pindah tina Terraform ka CloudFormation - sareng hanjakal
Kode salaku Code

Aya ogé infrastruktur anu dianggo.

Pindah tina Terraform ka CloudFormation - sareng hanjakal
Infrastruktur salaku Code

Tapi ti mana manéhna? Kumaha ngawaskeunana? Dimana kode anjeun cicing? Naha pamekar peryogi idin aksés?

Pindah tina Terraform ka CloudFormation - sareng hanjakal
Operasi sakumaha Code

Janten pamekar parangkat lunak sanés hartosna nyerat kode.

AWS sanes ngan hiji: Anjeun meureun make panyadia séjén. SignalFx, PagerDuty atanapi Github. Panginten anjeun gaduh server Jenkins internal pikeun CI / CD atanapi dasbor Grafana internal pikeun ngawaskeun. Infra salaku Code dipilih pikeun alesan béda, sarta masing-masing sarua pentingna pikeun sagalana patali software.

Nalika kuring damel di Twitch, kami ngagancangkeun jasa di jero sistem campuran Amazon sareng AWS. Urang churned kaluar sarta ngarojong loba microservices, ngaronjatkeun biaya operasional. Diskusi lumangsung sapertos kieu:

  • Я: sial, éta loba sikep pikeun overclock hiji microservice. Kuring kedah nganggo sampah ieu pikeun nyiptakeun akun AWS (urang angkat ka 2 akun dina microservice), teras ieu kanggo nyetél panggeuing, ieu kanggo gudang kode, sareng ieu kanggo daptar email, teras ieu...
  • Timbel: Hayu urang skrip na oke.
  • Я: Oké, tapi naskah sorangan bakal robah. Perlu aya cara pikeun mariksa yén sadaya gizmos Amazon anu diwangun ieu parantos diropéa.
  • Timbel: Sigana saé. Sarta kami bakal nulis naskah pikeun ieu.
  • Я: Hebat! Sareng naskah sigana masih kedah nyetél parameter. Naha anjeunna bakal nampi aranjeunna?
  • Timbel: Hayu anjeunna nyandak mana anjeunna indit!
  • Я: Prosésna tiasa robih sareng kasaluyuan mundur bakal leungit. Sababaraha jenis kontrol versi semantis bakal diperlukeun.
  • Timbel: Gagasan anu saé!
  • Я: Parabot bisa dirobah sacara manual, di jero panganteur pamaké. Kami peryogi cara pikeun mariksa sareng ngalereskeun ieu.

…3 taun ti harita:

  • Timbel: Sareng urang ngagaduhan terraform.

Moral carita nyaéta: sanajan anjeun sirah leuwih heels dina sagalana Amazon, Anjeun masih ngagunakeun hiji hal teu ti AWS, sarta jasa ieu boga kaayaan anu ngagunakeun basa konfigurasi pikeun ngajaga eta kaayaan singkronisasi.

CloudFormation lambda vs modul git terraform

lambda mangrupikeun solusi CloudFormation pikeun masalah logika khusus. Kalayan lambda anjeun tiasa nyieun makro atawa sumberdaya pamaké. Pendekatan ieu ngenalkeun pajeulitna tambahan anu henteu aya dina versi semantis modul git Terraform. Pikeun kuring, masalah anu paling mendesak nyaéta ngatur idin pikeun sadaya lambdas pangguna ieu (sareng ieu mangrupikeun puluhan akun AWS). Masalah penting séjén nyaéta "naon anu mimiti, hayam atanapi endog?" Masalah: éta aya hubunganana sareng kode lambda. Pungsi ieu sorangan infrastruktur jeung kode, sarta eta sorangan perlu monitoring sarta apdet. Paku ahir dina peti éta kasusah dina semantically ngamutahirkeun parobahan kode lambda; urang ogé kedah pastikeun yén lampah tumpukan tanpa paréntah langsung teu robah antara ngajalankeun.

Abdi émut sakali kuring hoyong nyiptakeun panyebaran kanari pikeun lingkungan Elastis Beanstalk kalayan kasaimbangan beban klasik. Hal panggampangna pikeun ngalakukeun bakal nyieun hiji deployment kadua pikeun EB gigireun lingkungan produksi, nyandak eta undak salajengna: ngagabungkeun grup deployment kanaria skala otomatis jeung LB deployment kana lingkungan produksi. Sarta saprak Terraform ngagunakeun ASG beantalk salaku kacindekan, ieu bakal merlukeun 4 garis tambahan kode dina Terraform. Nalika kuring naros upami aya solusi anu tiasa dibandingkeun dina CloudFormation, aranjeunna nunjuk kuring kana gudang git sadayana kalayan pipa penyebaran sareng sadayana, sadayana demi naon anu tiasa dilakukeun ku 4 garis kode Terraform.

Éta ngadeteksi drift langkung saé

Pastikeun kanyataanana cocog ekspektasi.

Deteksi drift nyaéta operasi anu pohara kuat salaku fitur kode sabab mantuan mastikeun yén kanyataanana cocog ekspektasi. Éta sayogi sareng CloudFormation sareng Terraform. Tapi nalika tumpukan produksina ningkat, milarian drift di CloudFormation ngahasilkeun langkung seueur deteksi palsu.

Kalayan Terraform anjeun gaduh kait siklus hirup anu langkung maju pikeun deteksi drift. Contona, anjeun ngasupkeun paréntah ignore_changes langsung dina harti tugas ECS lamun rék malire parobahan harti tugas husus tanpa malire parobahan sakabéh deployment ECS Anjeun.

CDK sareng masa depan CloudFormation

CloudFormation sesah pikeun ngatur skala ageung, cross-infrastruktur. Loba kasusah ieu dipikawanoh tur alat nu peryogi hal kawas aws-cdk, kerangka pikeun nangtukeun infrastruktur awan dina kode jeung ngajalankeun eta ngaliwatan AWS CloudFormation. Bakal jadi istiméwa ningali naon hareup nahan pikeun aws-cdk, tapi bakal boga waktu teuas competing kalawan kaunggulan séjén Terraform urang; pikeun mawa CloudFormation up to date, parobahan global bakal diperlukeun.

Sangkan Terraform teu nguciwakeun

Ieu "infrastruktur sakumaha kode a", sarta lain "salaku téks a".

kesan munggaran kuring ngeunaan Terraform éta rada goréng. Jigana mah ngan teu ngarti pendekatan. Ampir kabéh insinyur involuntarily nganggap éta salaku format téks nu kudu dirobah jadi infrastruktur nu dipikahoyong. ULAH KITU.

The truisms ngembangkeun software alus ogé dilarapkeun ka Terraform.

Kuring geus katempo loba prakték diadopsi nyieun kode alus keur dipaliré di Terraform. Anjeun parantos diajar mangtaun-taun janten programer anu saé. Entong nyerah pangalaman ieu kusabab anjeun damel sareng Terraform. The truisms ngembangkeun software alus dilarapkeun ka Terraform.

Kumaha kodeu teu tiasa didokumentasikeun?

Kuring parantos ningali tumpukan Terraform ageung kalayan henteu aya dokuméntasi. Kumaha anjeun tiasa nyerat kode dina halaman - henteu aya dokuméntasi? Tambahkeun dokuméntasi anu ngajelaskeun anjeun di Terraform (tekenan dina kecap "kode"), naha bagian ieu kacida pentingna, sarta naon eusina.

Kumaha urang tiasa nyebarkeun jasa éta sakali hiji utama badag () fungsi?

Kuring geus katempo pisan kompléks Terraform tumpukan dibere salaku modul tunggal. Naha urang henteu nyebarkeun parangkat lunak ku cara kieu? Naha urang ngabagi fungsi ageung kana anu langkung alit? Jawaban anu sami dilarapkeun ka Terraform. Upami modul anjeun ageung teuing, anjeun kedah ngarobih kana modul anu langkung alit.

Naha perusahaan anjeun henteu nganggo perpustakaan?

Kuring geus katempo kumaha insinyur, spinning up a proyék anyar ngagunakeun Terraform, stupidly nyalin-paste sapotong badag tina proyék séjén kana sorangan, lajeng tinkered kalawan aranjeunna nepi ka dimimitian gawé. Naha anjeun badé damel sapertos kieu kalayan kode "tempur" di perusahaan anjeun? Kami henteu ngan ukur nganggo perpustakaan. Sumuhun, Henteu sadayana kedah janten perpustakaan, tapi dimana urang tanpa perpustakaan dibagikeun prinsipna?!

Naha anjeun henteu nganggo PEP8 atanapi gofmt?

Kaseueuran basa gaduh skéma pormat standar anu ditarima. Dina Python ieu PEP8. Dina Go - gofmt. Terraform gaduh sorangan: terraform fmt. Ngarasakeun éta pikeun kaséhatan anjeun!

Naha anjeun badé nganggo React tanpa terang JavaScript?

modul Terraform tiasa simplify sababaraha bagian tina infrastruktur kompléks nu Anjeun jieun, tapi ieu lain hartosna yén anjeun moal bisa tinker kalawan eta pisan. Hoyong ngagunakeun Terraform leres tanpa ngartos sumber? Anjeun doomed: waktos bakal kaliwat, sarta anjeun moal pernah ngawasaan Terraform.

Naha anjeun coding sareng singleton atanapi suntikan dependensi?

Injeksi dependensi mangrupikeun prakték pangsaéna pikeun pamekaran parangkat lunak sareng langkung dipikaresep tibatan singleton. Kumaha ieu mangpaat dina Terraform? Kuring geus katempo modul Terraform nu gumantung kana kaayaan jauh. Gantina nulis modul nu nimba kaayaan jauh, nulis modul nu nyandak parameter. Lajeng lulus parameter ieu modul.

Naha perpustakaan anjeun ngalakukeun sapuluh hal anu saé atanapi hiji hal anu saé?

Perpustakaan anu paling saé dianggo nyaéta anu museurkeun kana hiji tugas anu aranjeunna lakukeun kalayan saé. Gantina nulis modul Terraform badag nu nyoba ngalakukeun sagalana sakaligus, ngawangun bagian tina aranjeunna anu ngalakukeun hiji hal ogé. Lajeng ngagabungkeun aranjeunna sakumaha diperlukeun.

Kumaha anjeun ngalakukeun parobahan perpustakaan tanpa kasaluyuan mundur?

A modul Terraform umum, kawas perpustakaan biasa, perlu kumaha bae komunikasi parobahan ka pamaké tanpa jadi mundur cocog. Éta ngaganggu nalika parobihan ieu kajantenan di perpustakaan, sareng éta ogé ngaganggu nalika parobihan anu teu cocog sareng mundur dilakukeun dina modul Terraform. Disarankeun ngagunakeun tag git sareng semver nalika nganggo modul Terraform.

Naha jasa produksi anjeun dijalankeun dina laptop anjeun atanapi di pusat data?

Hashicorp gaduh alat sapertos awan terraform pikeun ngajalankeun terraform Anjeun. Ladenan terpusat ieu ngagampangkeun pikeun ngatur, ngaudit, sareng nyatujuan parobahan terraform.

Naha anjeun henteu nyerat tés?

Insinyur ngakuan yén kodeu kedah diuji, tapi aranjeunna nyalira sering hilap uji nalika damel sareng Terraform. Pikeun infrastruktur, ieu téh pinuh ku moments khianat. Saran abdi "nguji" atawa "nyieun conto" tumpukan ngagunakeun modul nu bisa deployed neuleu pikeun nguji salila CI / CD.

Terraform sareng microservices

Kahirupan sareng pupusna perusahaan jasa mikro gumantung kana kagancangan, inovasi, sareng gangguan tina workstacks microservice énggal.

Aspék négatip paling umum pakait sareng arsitéktur microservice, jeung nu teu bisa ngaleungitkeun, patali jeung karya, teu kode. Upami anjeun nganggap Terraform ngan ukur cara pikeun ngajadikeun otomatis ngan sisi infrastruktur tina arsitéktur microservices, maka anjeun leungiteun kauntungan anu leres tina sistem éta. Ayeuna parantos sagalana geus kawas kode.

sumber: www.habr.com

Tambahkeun komentar