Pārgāja no Terraform uz CloudFormation - un to nožēloja

InfrastruktÅ«ras attēloÅ”ana kā kods atkārtojama teksta formātā ir vienkārÅ”a paraugprakse sistēmām, kurām nav jāmācās ar pelēm. Å ai praksei ir nosaukums - InfrastruktÅ«ra kā kods, un lÄ«dz Å”im ir divi populāri rÄ«ki, lai to ieviestu, Ä«paÅ”i AWS: Terraform Šø Mākoņu veidoÅ”anās.

Pārgāja no Terraform uz CloudFormation - un to nožēloja
Pieredzes salīdzināŔana ar Terraform un CloudFormation

Pirms ieraÅ”anās pie Twitch (Aka Amazon Jr.) ES strādāju vienā startā un izmantoja Terraform trÄ«s gadus. Jaunajā vietā es arÄ« izmantoju Terraform no visa spēka, un tad uzņēmums virzÄ«ja pāreju uz visu a la Amazon, ieskaitot CloudFormation. Esmu rÅ«pÄ«gi izstrādājis paraugpraksi abiem un izmantojis abus rÄ«kus ļoti sarežģītās organizācijas mēroga darbplÅ«smās. Vēlāk, rÅ«pÄ«gi izvērtējot migrācijas no Terraform uz CloudFormation ietekmi, es pārliecinājos, ka Terraform, iespējams, ir labākā izvēle organizācijai.

Terraforma briesmīga

Beta programmatūra

Terraform vēl pat nav izlaidusi versiju 1.0, kas ir labs iemesls to neizmantot. KopÅ” es pats to izmēģināju, tas ir daudz mainÄ«jies, bet toreiz terraform apply bieži sabojājās pēc vairākiem atjauninājumiem vai vienkārÅ”i pēc pāris gadu lietoÅ”anas. Es teiktu, ka "tagad viss ir savādāk", bet... Ŕķiet, ka visi tā saka, vai ne? Ir izmaiņas, kas nav savienojamas ar iepriekŔējām versijām, lai gan tās ir piemērotas, un pat Ŕķiet, ka resursu krājumu sintakse un abstrakcijas tagad ir tas, kas mums ir nepiecieÅ”ams. Å Ä·iet, ka instruments patieŔām ir kļuvis labāks, bet... :-0

No otras puses, AWS ir paveicis labu darbu, saglabājot atpakaļejoÅ”u saderÄ«bu. Iespējams, tas ir tāpēc, ka viņu pakalpojumi bieži vien tiek rÅ«pÄ«gi pārbaudÄ«ti organizācijā un tikai pēc tam, pārdēvēti, tiek publicēti. Tātad ā€œviņi ļoti centāsā€ ir nepietiekams apgalvojums. Tik daudzveidÄ«gai un sarežģītai sistēmai kā AWS ir neticami grÅ«ti saglabāt atpakaļejoÅ”u saderÄ«bu ar API. Ikvienam, kuram ir nācies uzturēt publiskās API, kuras tiek izmantotas tikpat plaÅ”i, cik tās tiek izmantotas, vajadzētu saprast, cik grÅ«ti to darÄ«t tik daudzus gadus. Bet CloudFormation uzvedÄ«ba, manā atmiņā, gadu gaitā nav mainÄ«jusies.

Satiec kāju... tā ir lode

Cik es zinu, izdzēsiet resursu nepiederoÅ”s CloudFormation steka no jÅ«su CF steka nav iespējama. Tas pats attiecas uz Terraform. Tas ļauj importēt esoÅ”os resursus savā kaudzē. Var teikt, ka Ŕī funkcija ir pārsteidzoÅ”a, taču ar lielu jaudu nāk liela atbildÄ«ba. Jums vienkārÅ”i jāpievieno steksam resurss, un, kamēr strādājat ar savu steku, jÅ«s nevarat dzēst vai mainÄ«t Å”o resursu. Kādu dienu tas atspēlējās. Kādu dienu pakalpojumā Twitch kāds nejauÅ”i importēja kāda cita AWS droŔības grupu savā Terraform kaudzē, neizdarot nekādu ļaunumu. IevadÄ«ju vairākas komandas un... droŔības grupa (kopā ar ienākoÅ”o trafiku) pazuda.

Terraforma Lieliska

AtgūŔana no nepilnīgiem stāvokļiem

Dažreiz CloudFormation neizdodas pilnÄ«bā pāriet no viena stāvokļa uz otru. Tajā paŔā laikā viņŔ mēģinās atgriezties pie iepriekŔējā. Žēl, ka tas ne vienmēr ir iespējams. Var bÅ«t diezgan biedējoÅ”i vēlāk atkļūdot notikuÅ”o ā€” jÅ«s nekad nezināt, vai CloudFormation priecāsies, ka tas tiek uzlauzts ā€” ā€‹ā€‹pat tikai tāpēc, lai to labotu. NeatkarÄ«gi no tā, vai bÅ«s iespējams atgriezties iepriekŔējā stāvoklÄ«, viņŔ patieŔām nezina, kā noteikt, un pēc noklusējuma stundām ilgi karājas, gaidot brÄ«numu.

No otras puses, Terraform mēdz daudz graciozāk atgÅ«ties no neveiksmÄ«gām pārejām un piedāvā uzlabotus atkļūdoÅ”anas rÄ«kus.

Skaidrākas izmaiņas dokumenta stāvoklī

ā€œLabi, slodzes balansētājs, tu mainies. Bet kā?"

ā€” satraukts inženieris, gatavs nospiest pogu ā€œpieņemtā€.

Dažreiz man ir jāveic dažas manipulācijas ar slodzes balansētāju CloudFormation kaudzē, piemēram, jāpievieno porta numurs vai jāmaina droŔības grupa. ClouFormation slikti parāda izmaiņas. Es, izmantojot adatas un adatas, vēlreiz pārbaudu yaml failu desmit reizes, lai pārliecinātos, ka neesmu izdzēsis neko nepiecieÅ”amo un neesmu pievienojis neko nevajadzÄ«gu.

Terraform Å”ajā ziņā ir daudz caurspÄ«dÄ«gāka. Dažreiz viņŔ ir pat pārāk caurspÄ«dÄ«gs (lasi: kaitinoÅ”s). Par laimi, jaunākajā versijā ir iekļauts uzlabots izmaiņu attēlojums, lai tagad varētu precÄ«zi redzēt, kas mainās.

Elastīgums

Rakstiet programmatūru atpakaļgaitā.

Atklāti sakot, vissvarÄ«gākā ilgstoÅ”as ā€‹ā€‹ā€‹ā€‹programmatÅ«ras Ä«paŔība ir spēja pielāgoties pārmaiņām. Ierakstiet jebkuru programmatÅ«ru atpakaļgaitā. Visbiežāk es pieļāvu kļūdas, izmantojot ā€œvienkārÅ”uā€ pakalpojumu un pēc tam visu sabāzot vienā CloudFormation vai Terraform kaudzē. Un, protams, pēc mēneÅ”iem atklājās, ka visu esmu sapratis nepareizi, un pakalpojums patiesÄ«bā nebija vienkārÅ”s! Un tagad man kaut kā jāsadala liela kaudze mazos komponentos. Kad strādājat ar CloudFormation, to var izdarÄ«t, tikai vispirms atkārtoti izveidojot esoÅ”o steku, un es to nedaru ar savām datu bāzēm. Savukārt Terraforma ļāva sadalÄ«t kaudzi un sadalÄ«t to saprotamāk mazākās daļās.

Moduļi git

Terraform koda kopÄ«goÅ”ana vairākos skursteņos ir daudz vienkārŔāka nekā CloudFormation koda koplietoÅ”ana. Izmantojot Terraform, varat ievietot savu kodu git repozitorijā un piekļūt tam, izmantojot semantisko versiju kontroli. Ikviens, kam ir piekļuve Å”im repozitorijam, var atkārtoti izmantot koplietoto kodu. CloudFormation ekvivalents ir S3, taču tam nav tādas paÅ”as priekÅ”rocÄ«bas, un nav iemesla, kāpēc mums vispār vajadzētu atteikties no git par labu S3.

Organizācija pieauga, un spēja koplietot kopÄ«gus stekus sasniedza kritisko lÄ«meni. Terraform padara to visu vienkārÅ”u un dabisku, savukārt CloudFormation liks jums izlēkt cauri stÄ«pām, pirms kaut kas lÄ«dzÄ«gs Å”im darbosies.

Darbības kā kods

"Skriptēsim to un labi."

ā€” inženieris 3 gadus pirms Terraform velosipēda izgudroÅ”anas.

Runājot par programmatūras izstrādi, Go vai Java programma nav tikai kods.

Pārgāja no Terraform uz CloudFormation - un to nožēloja
Kods kā kods

Ir arī infrastruktūra, uz kuras tā darbojas.

Pārgāja no Terraform uz CloudFormation - un to nožēloja
Infrastruktūra kā kods

Bet no kurienes viņa ir? Kā to uzraudzÄ«t? Kur atrodas jÅ«su kods? Vai izstrādātājiem ir nepiecieÅ”ama piekļuves atļauja?

Pārgāja no Terraform uz CloudFormation - un to nožēloja
Darbības kā kods

Būt programmatūras izstrādātājam nenozīmē tikai rakstīt kodu.

AWS nav vienÄ«gais: jÅ«s, iespējams, izmantojat citus pakalpojumu sniedzējus. SignalFx, PagerDuty vai Github. VarbÅ«t jums ir iekŔējs Jenkins serveris CI/CD vai iekŔējs Grafana informācijas panelis uzraudzÄ«bai. Infra kā kods tiek izvēlēts dažādu iemeslu dēļ, un katrs no tiem ir vienlÄ«dz svarÄ«gs visam, kas saistÄ«ts ar programmatÅ«ru.

Kad es strādāju Twitch, mēs paātrinājām pakalpojumus Amazon jauktajās iegultajās un AWS sistēmās. Mēs izlaidām un atbalstÄ«jām daudzus mikropakalpojumus, palielinot darbÄ«bas izmaksas. Diskusijas noritēja apmēram Ŕādi:

  • ŠÆ: SasodÄ«ts, tas ir daudz žestu, lai pārtaktu vienu mikropakalpojumu. Man bÅ«s jāizmanto Å”ie atkritumi, lai izveidotu AWS kontu (mēs izmantojām 2 kontus mikropakalpojums), tad Å”is brÄ«dinājumu iestatÄ«Å”anai, Å”is kodu krātuvei un Å”is e-pasta sarakstam, un tad Å”is...
  • Svins: UzrakstÄ«sim to un labi.
  • ŠÆ: Labi, bet pats skripts mainÄ«sies. Mums bÅ«s nepiecieÅ”ams veids, kā pārbaudÄ«t, vai visi Å”ie iebÅ«vētie Amazon rÄ«ki ir atjaunināti.
  • Svins: Izklausās labi. Un mēs tam uzrakstÄ«sim skriptu.
  • ŠÆ: Lieliski! Un skriptam, iespējams, joprojām bÅ«s jāiestata parametri. Vai viņŔ tos pieņems?
  • Svins: Lai viņŔ ņem, kur viņŔ iet!
  • ŠÆ: process var mainÄ«ties un tiks zaudēta atgriezeniskā saderÄ«ba. BÅ«s nepiecieÅ”ama sava veida semantiskā versijas kontrole.
  • Svins: Lieliska ideja!
  • ŠÆ: rÄ«kus var mainÄ«t manuāli lietotāja interfeisa iekÅ”pusē. Mums bÅ«s nepiecieÅ”ams veids, kā to pārbaudÄ«t un novērst.

ā€¦ pēc 3 gadiem:

  • Svins: Un mēs saņēmām terraformu.

Stāsta morāle ir: pat ja jÅ«s pāri papēžiem visā Amazon, jÅ«s joprojām izmantojat kaut ko, kas nav no AWS, un Å”iem pakalpojumiem ir statuss, kurā tiek izmantota konfigurācijas valoda, lai Å”o stāvokli sinhronizētu.

CloudFormation lambda vs git moduļi terraform

lambda ir CloudFormation risinājums pielāgotās loÄ£ikas problēmai. Ar lambda var izveidot makro vai lietotāja resurss. Å Ä« pieeja rada papildu sarežģījumus, kas nav sastopami Terraform git moduļu semantiskajā versijā. Man vissteidzamākā problēma bija visu Å”o lietotāju lambdas (un tie ir desmitiem AWS kontu) atļauju pārvaldÄ«ba. Vēl viena svarÄ«ga problēma bija problēma ā€œkas bija pirmais, vista vai ola?ā€: tā bija saistÄ«ta ar lambda kodu. Å Ä« funkcija pati par sevi ir infrastruktÅ«ra un kods, un tai ir nepiecieÅ”ama uzraudzÄ«ba un atjauninājumi. Pēdējā nagla zārkā bija grÅ«tÄ«bas semantiski atjaunināt lambda koda izmaiņas; mums arÄ« bija jāpārliecinās, ka steka darbÄ«bas bez tieÅ”as komandas nemainās starp izpildēm.

Atceros, reiz gribēju izveidot kanārijputnu izvietoÅ”anu Elastic Beanstalk videi ar klasisko slodzes balansētāju. Visvieglāk bÅ«tu veikt otro izvietoÅ”anu EB blakus ražoÅ”anas videi, sperot to soli tālāk: ražoÅ”anas vidē apvienojot automātiskās mērogoÅ”anas kanāriju izvietoÅ”anas grupu ar izvietoÅ”anas LB. Un tā kā Terraform izmanto ASG beantalk kā secinājums, tam bÅ«s nepiecieÅ”amas 4 papildu koda rindiņas Terraform. Kad jautāju, vai pakalpojumā CloudFormation ir kāds salÄ«dzināms risinājums, viņi norādÄ«ja uz veselu git repozitoriju ar izvietoÅ”anas konveijeru un visu, lai kaut ko varētu darÄ«t, ko varētu darÄ«t nabadzÄ«gās 4 Terraform koda rindas.

Tas labāk nosaka novirzi

Pārliecinieties, ka realitāte atbilst cerībām.

Dreifa noteikÅ”ana ir ļoti jaudÄ«ga operāciju kā koda funkcija, jo tā palÄ«dz nodroÅ”ināt, ka realitāte atbilst cerÄ«bām. Tas ir pieejams gan ar CloudFormation, gan ar Terraform. Taču, palielinoties ražoÅ”anas apjomam, CloudFormation novirzÄ«Å”anās meklÄ“Å”ana radÄ«ja arvien vairāk nepatiesu atklāŔanu.

Ar Terraform jums ir daudz uzlaboti dzÄ«ves cikla āķi novirzes noteikÅ”anai. Piemēram, jÅ«s ievadāt komandu ignorēt_izmaiņas tieÅ”i ECS uzdevuma definÄ«cijā, ja vēlaties ignorēt izmaiņas konkrēta uzdevuma definÄ«cijā, neignorējot izmaiņas visā jÅ«su ECS izvietoÅ”anā.

CDK un CloudFormation nākotne

CloudFormation ir grÅ«ti pārvaldÄ«t lielos, vairāku infrastruktÅ«ru mērogos. Daudzas no Ŕīm grÅ«tÄ«bām ir atzÄ«tas, un rÄ«kam ir vajadzÄ«gas tādas lietas kā aws-cdkietvars mākoņa infrastruktÅ«ras definÄ“Å”anai kodā un tās palaiÅ”anai, izmantojot AWS CloudFormation. BÅ«s interesanti redzēt, kāda bÅ«s aws-cdk nākotne, taču tam bÅ«s grÅ«ti konkurēt ar citām Terraform stiprajām pusēm; lai atjauninātu CloudFormation, bÅ«s jāveic globālas izmaiņas.

Lai Terraform nepieviļ

Tā ir ā€œinfrastruktÅ«ra kā kodsā€, nevis ā€œkā tekstsā€.

Mans pirmais iespaids par Terraform bija diezgan slikts. Man Ŕķiet, ka es vienkārÅ”i nesapratu pieeju. GandrÄ«z visi inženieri to neviļus uztver kā teksta formātu, kas jāpārvērÅ” vēlamajā infrastruktÅ«rā. NEDARIET TO ŠĀDI.

Labas programmatūras izstrādes patiesības attiecas arī uz Terraform.

Esmu redzējis daudzas laba koda izveides prakses, kas tiek ignorētas Terraform. JÅ«s jau gadiem ilgi esat mācÄ«jies, lai kļūtu par labu programmētāju. Neatsakieties no Ŕīs pieredzes tikai tāpēc, ka strādājat ar Terraform. Labas programmatÅ«ras izstrādes patiesÄ«bas attiecas uz Terraform.

Kā kodu var nedokumentēt?

Esmu redzējis milzÄ«gas Terraform kaudzes bez absolÅ«ti nekādas dokumentācijas. Kā var ierakstÄ«t kodu lapās ā€“ bez jebkādas dokumentācijas? Pievienojiet dokumentāciju, kas izskaidro jÅ«su kods Terraforma (uzsvars uz vārdu "kods"), kāpēc Ŕī sadaļa ir tik svarÄ«ga un ko jÅ«s darāt.

Kā mēs varam izvietot pakalpojumus, kas kādreiz bija viena liela galvenā () funkcija?

Esmu redzējis ļoti sarežģītas Terraform skursteņus, kas tiek prezentēti kā viens modulis. Kāpēc mēs neizvietojam programmatÅ«ru Ŕādā veidā? Kāpēc mēs sadalām lielas funkcijas mazākās? Tās paÅ”as atbildes attiecas uz Terraform. Ja jÅ«su modulis ir pārāk liels, tas ir jāsadala mazākos moduļos.

Vai jūsu uzņēmums neizmanto bibliotēkas?

Esmu redzējis, kā inženieri, veidojot jaunu projektu, izmantojot Terraform, muļķīgi iekopēja milzÄ«gus gabalus no citiem projektiem savos un pēc tam čaloja ar tiem, lÄ«dz tas sāka darboties. Vai jÅ«s strādātu Ŕādi ar ā€œkaujasā€ kodu savā uzņēmumā? Mēs neizmantojam tikai bibliotēkas. Jā, ne visam ir jābÅ«t bibliotēkai, bet kur mēs bez koplietojamām bibliotēkām principā?!

Vai jūs neizmantojat PEP8 vai gofmt?

Lielākajai daļai valodu ir standarta, pieņemta formatÄ“Å”anas shēma. Python tas ir PEP8. In Go - gofmt. Terraform ir savs: terraform fmt. Izbaudiet to savai veselÄ«bai!

Vai izmantosit React, nezinot JavaScript?

Terraform moduļi var vienkārÅ”ot kādu daļu no jÅ«su izveidotās sarežģītās infrastruktÅ«ras, taču tas nenozÄ«mē, ka jÅ«s ar to vispār nevarat lāpÄ«t. Vai vēlaties pareizi lietot Terraform, neizprotot resursus? JÅ«s esat nolemts: laiks paies, un jÅ«s nekad neapgÅ«sit Terraformu.

Vai jūs kodējat ar singletons vai atkarības injekciju?

AtkarÄ«bas ievadÄ«Å”ana ir atzÄ«ta paraugprakse programmatÅ«ras izstrādei, un tai ir priekÅ”roka, nevis vienreizējiem. Kā tas ir noderÄ«gi Terraform? Esmu redzējis Terraform moduļus, kas ir atkarÄ«gi no attālā stāvokļa. Tā vietā, lai rakstÄ«tu moduļus, kas izgÅ«st attālo stāvokli, rakstiet moduli, kas ņem parametrus. Un pēc tam nododiet Å”os parametrus modulim.

Vai jūsu bibliotēkās ir desmit lietas labi vai viena lieta lieliski?

Vislabāk darbojas tās bibliotēkas, kuras koncentrējas uz vienu uzdevumu, ko tās veic ļoti labi. Tā vietā, lai rakstÄ«tu lielus Terraform moduļus, kas cenÅ”as visu darÄ«t uzreiz, izveidojiet to daļas, kas labi veic vienu lietu. Un pēc tam apvienojiet tos pēc vajadzÄ«bas.

Kā veikt izmaiņas bibliotēkās bez atpakaļsaderības?

Parastajam Terraform modulim, tāpat kā parastai bibliotēkai, lietotājiem ir kaut kādā veidā jāpaziņo par izmaiņām, nesavietojoties ar atpakaļejoÅ”u spēku. Tas ir kaitinoÅ”i, kad Ŕīs izmaiņas notiek bibliotēkās, un tas ir tikpat kaitinoÅ”i, ja Terraform moduļos tiek veiktas ar atpakaļejoÅ”u spēku nesaderÄ«gas izmaiņas. Lietojot Terraform moduļus, ieteicams lietot git tagus un semver.

Vai jÅ«su ražoÅ”anas pakalpojums darbojas jÅ«su klēpjdatorā vai datu centrā?

Hashicorp ir tādi rīki kā terraformas mākonis lai palaistu savu terraformu. Šie centralizētie pakalpojumi ļauj ērti pārvaldīt, pārbaudīt un apstiprināt terraformas izmaiņas.

Vai tu neraksti testus?

Inženieri atzÄ«st, ka kods ir jāpārbauda, ā€‹ā€‹taču viņi paÅ”i bieži aizmirst par testÄ“Å”anu, strādājot ar Terraform. AttiecÄ«bā uz infrastruktÅ«ru tas ir pilns ar nodevÄ«giem brīžiem. Mans padoms ir "pārbaudÄ«t" vai "izveidot piemēru" stekus, izmantojot moduļus, kurus var pareizi izvietot testÄ“Å”anai CI/CD laikā.

Terraform un mikropakalpojumi

Mikropakalpojumu uzņēmumu dzīvība un nāve ir atkarīga no jaunu mikropakalpojumu darbvietu ātruma, inovācijas un darbības traucējumiem.

VisizplatÄ«tākais negatÄ«vais aspekts, kas saistÄ«ts ar mikropakalpojumu arhitektÅ«ru un ko nevar novērst, ir saistÄ«ts ar darbu, nevis kodu. Ja jÅ«s domājat, ka Terraform ir tikai veids, kā automatizēt tikai mikropakalpojumu arhitektÅ«ras infrastruktÅ«ras pusi, jÅ«s zaudējat sistēmas patiesās priekÅ”rocÄ«bas. Tagad tas jau ir viss ir kā kods.

Avots: www.habr.com

Pievieno komentāru