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 -
Pieredzes salÄ«dzinÄÅ”ana ar Terraform un CloudFormation
Pirms ieraÅ”anÄs pie
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.
Kods kÄ kods
Ir arÄ« infrastruktÅ«ra, uz kuras tÄ darbojas.
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?
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
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
Tas labÄk nosaka novirzi
PÄrliecinieties, ka realitÄte atbilst cerÄ«bÄm.
Ar Terraform jums ir daudz uzlaboti dzÄ«ves cikla ÄÄ·i novirzes noteikÅ”anai. PiemÄram, jÅ«s ievadÄt komandu
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Ä
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Ä,
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Ä
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
Avots: www.habr.com