Daudzi cilvÄki zina un izmanto Terraform savÄ ikdienas darbÄ, bet labÄkÄ prakse tam vÄl nav izveidota. Katrai komandai ir jÄizgudro savas pieejas un metodes.
JÅ«su infrastruktÅ«ra gandrÄ«z noteikti sÄkas vienkÄrÅ”i: daži resursi + daži izstrÄdÄtÄji. Laika gaitÄ tas aug visos virzienos. Vai atrodat veidus, kÄ grupÄt resursus Terraform moduļos, sakÄrtot kodu mapÄs un kas vÄl var noiet greizi? (slaveni pÄdÄjie vÄrdi)
Laiks iet, un jums liekas, ka jÅ«su infrastruktÅ«ra ir jÅ«su jaunais mÄjdzÄ«vnieks, bet kÄpÄc? JÅ«s uztraucas par neizskaidrojamÄm izmaiÅÄm infrastruktÅ«rÄ, jÅ«s baidÄties pieskarties infrastruktÅ«rai un kodam - rezultÄtÄ jÅ«s aizkavÄjat jaunu funkcionalitÄti vai samazina kvalitÄti...
PÄc trÄ«s gadu ilgas Terraform kopienas moduļu kolekcijas pÄrvaldÄ«Å”anas AWS platformÄ Github un ilgstoÅ”as āāTerraform uzturÄÅ”anas ražoÅ”anÄ, Antons Babenko ir gatavs dalÄ«ties savÄ pieredzÄ: kÄ uzrakstÄ«t TF moduļus tÄ, lai tas nekaitÄtu nÄkotnÄ.
Sarunas beigÄs dalÄ«bnieki bÅ«s labÄk iepazinuÅ”ies ar Terraform resursu pÄrvaldÄ«bas principiem, paraugpraksi, kas saistÄ«ta ar Terraform moduļiem, un dažiem nepÄrtrauktas integrÄcijas principiem, kas saistÄ«ti ar infrastruktÅ«ras pÄrvaldÄ«bu.
Atruna:Es atzÄ«mÄju, ka Å”is ziÅojums ir datÄts ar 2018. gada novembri ā ir pagÄjuÅ”i jau 2 gadi. ZiÅojumÄ apspriestÄ Terraform 0.11 versija vairs netiek atbalstÄ«ta. PÄdÄjo 2 gadu laikÄ ir izdoti 2 jauni izdevumi, kuros ir daudz jauninÄjumu, uzlabojumu un izmaiÅu. LÅ«dzu, pievÄrsiet tam uzmanÄ«bu un pÄrbaudiet dokumentÄciju.
@antonbabenko - Twitter, un kaudzis dažÄdu bikses
Mani sauc Antons Babenko. Daži no jums droÅ”i vien izmantoja manis rakstÄ«to kodu. Tagad es par to runÄÅ”u ar lielÄku pÄrliecÄ«bu nekÄ jebkad agrÄk, jo man ir pieejama statistika.
Es strÄdÄju pie Terraform un kopÅ” 2015. gada esmu bijis aktÄ«vs dalÄ«bnieks un lÄ«dzstrÄdnieks daudzos atklÄtÄ pirmkoda projektos, kas saistÄ«ti ar Terraform un Amazon.
KopÅ” tÄ laika esmu uzrakstÄ«jis pietiekami daudz koda, lai to ievietotu interesantÄ veidÄ. Un es mÄÄ£inÄÅ”u jums par to pastÄstÄ«t tagad.
Es runÄÅ”u par darba ar Terraform smalkumiem un specifiku. Bet tas Ä«sti nav HighLoad tÄma. Un tagad jÅ«s sapratÄ«sit, kÄpÄc.
Laika gaitÄ es sÄku rakstÄ«t Terraform moduļus. LietotÄji rakstÄ«ja jautÄjumus, es tos pÄrrakstÄ«ju. Tad es uzrakstÄ«ju dažÄdus utilÄ«tus, lai formatÄtu kodu, izmantojot pirmsapstiprinÄÅ”anas ÄÄ·i utt.
Bija daudz interesantu projektu. Man patÄ«k kodu Ä£enerÄÅ”ana, jo man patÄ«k, ka dators dara arvien vairÄk darba manÄ un programmÄtÄja vietÄ, tÄpÄc Å”obrÄ«d strÄdÄju pie Terraform kodu Ä£eneratora no vizuÄlÄm diagrammÄm. VarbÅ«t daži no jums tos ir redzÄjuÅ”i. Å Ä«s ir skaistas kastes ar bultÄm. Un es domÄju, ka ir lieliski, ja varat noklikŔķinÄt uz pogas āEksportÄtā un iegÅ«t to visu kÄ kodu.
Es esmu no Ukrainas. Daudzus gadus dzÄ«voju NorvÄÄ£ijÄ.
TÄpat informÄcija Å”im ziÅojumam tika ievÄkta no cilvÄkiem, kuri zina manu vÄrdu un atrod mani sociÄlajos tÄ«klos. Man gandrÄ«z vienmÄr ir viens un tas pats segvÄrds.
KÄ jau minÄju, es esmu galvenais Terraform AWS moduļu uzturÄtÄjs, kas ir viena no lielÄkajÄm GitHub krÄtuvÄm, kurÄ mÄs mitinÄm moduļus visbiežÄk sastopamajiem uzdevumiem: VPC, Autoscaling, RDS.
Un tas, ko jÅ«s tagad dzirdÄjÄt, ir visvienkÄrÅ”Äkais. Ja Å”aubÄties, ka saprotat, kas ir Terraform, tad labÄk pavadÄ«t laiku kaut kur citur. Å eit bÅ«s daudz tehnisku terminu. Un es nekavÄjos paziÅot ziÅojuma lÄ«meni par augstÄko. Tas nozÄ«mÄ, ka es varu runÄt, izmantojot visus iespÄjamos terminus bez Ä«paÅ”iem paskaidrojumiem.
Terraform parÄdÄ«jÄs 2014. gadÄ kÄ utilÄ«ta, kas ļÄva rakstÄ«t, plÄnot un pÄrvaldÄ«t infrastruktÅ«ru kÄ kodu. Galvenais jÄdziens Å”eit ir "infrastruktÅ«ra kÄ kods".
Visa dokumentÄcija, kÄ jau teicu, ir ierakstÄ«ta terraform.io. Es ceru, ka lielÄkÄ daļa cilvÄku zina par Å”o vietni un ir izlasÄ«juÅ”i dokumentÄciju. Ja tÄ, tad jÅ«s esat Ä«stajÄ vietÄ.
Å Ädi izskatÄs parastais Terraform konfigurÄcijas fails, kurÄ vispirms definÄjam dažus mainÄ«gos.
Å ajÄ gadÄ«jumÄ mÄs definÄjam "aws_region".
PÄc tam mÄs aprakstam, kÄdus resursus mÄs vÄlamies izveidot.
MÄs palaižam dažas komandas, jo Ä«paÅ”i āterraform initā, lai ielÄdÄtu atkarÄ«bas un nodroÅ”inÄtÄjus.
Un mÄs palaižam komandu āterraform applyā, lai pÄrbaudÄ«tu, vai norÄdÄ«tÄ konfigurÄcija atbilst mÅ«su izveidotajiem resursiem. TÄ kÄ mÄs iepriekÅ” neko neesam izveidojuÅ”i, Terraform aicina mÅ«s izveidot Å”os resursus.
MÄs to apstiprinÄm. TÄdÄjÄdi mÄs izveidojam spaini, ko sauc par jÅ«ras gliemezi.
Ir arÄ« vairÄkas lÄ«dzÄ«gas utilÄ«tas. Daudzi no jums, kas izmanto Amazon, zina AWS CloudFormation vai Google Cloud Deployment Manager vai Azure Resource Manager. Katram no tiem ir sava veida ievieÅ”ana resursu pÄrvaldÄ«bai katrÄ no Å”iem publiskajiem mÄkoÅdatoÅ”anas pakalpojumu sniedzÄjiem. Terraform ir Ä«paÅ”i noderÄ«ga, jo tÄ Ä¼auj pÄrvaldÄ«t vairÄk nekÄ 100 pakalpojumu sniedzÄju. (SkatÄ«t vairÄk Å”eit)
MÄrÄ·i, uz kuriem Terraform ir tiecÄs jau no paÅ”a sÄkuma:
Terraform nodroŔina vienotu skatījumu uz resursiem.
Ļauj atbalstīt visas mūsdienu platformas.
Un Terraform jau no paÅ”a sÄkuma tika izstrÄdÄts kÄ utilÄ«ta, kas ļauj droÅ”i un paredzami mainÄ«t infrastruktÅ«ru.
Terraform ir universÄla utilÄ«ta. Ja jums ir API, varat kontrolÄt pilnÄ«gi visu:
Varat izmantot vairÄk nekÄ 120 pakalpojumu sniedzÄjus, lai pÄrvaldÄ«tu visu, ko vÄlaties.
PiemÄram, varat izmantot Terraform, lai aprakstÄ«tu piekļuvi GitHub krÄtuvÄm.
JÅ«s pat varat izveidot un aizvÄrt kļūdas pakalpojumÄ Jira.
Varat pÄrvaldÄ«t jauno relikviju metriku.
Ja patieÅ”Äm vÄlaties, varat pat izveidot failus dropbox.
Tas viss tiek panÄkts, izmantojot Terraform nodroÅ”inÄtÄjus, kuriem ir atvÄrta API, ko var aprakstÄ«t Go.
PieÅemsim, ka mÄs sÄkÄm lietot Terraform, izlasÄ«jÄm vietnes dokumentÄciju, noskatÄ«jÄmies videoklipu un sÄkÄm rakstÄ«t main.tf, kÄ es parÄdÄ«ju iepriekÅ”Äjos slaidos.
Un viss ir lieliski, jums ir fails, kas izveido VPC.
Ja vÄlaties izveidot VPC, tad norÄdiet aptuveni Ŕīs 12 rindas. Aprakstiet, kurÄ reÄ£ionÄ vÄlaties izveidot, kuru IP adreÅ”u cidr_block izmantot. Tas ir viss.
Protams, projekts pakÄpeniski pieaugs.
Un jÅ«s tur pievienosit daudz jaunu lietu: resursus, datu avotus, integrÄsit jaunus pakalpojumu sniedzÄjus, pÄkÅ”Åi vÄlÄsities izmantot Terraform, lai pÄrvaldÄ«tu lietotÄjus savÄ GitHub kontÄ utt. IespÄjams, vÄlÄsities izmantot dažÄdi DNS pakalpojumu sniedzÄji, ŔķÄrso visu. Terraform to atvieglo.
ApskatÄ«sim Å”Ädu piemÄru.
JÅ«s pakÄpeniski pievienojat internet_gateway, jo vÄlaties, lai jÅ«su VPC resursiem bÅ«tu piekļuve internetam. Å Ä« ir laba ideja.
RezultÄts ir Å”is main.tf:
Å Ä« ir vietnes main.tf augÅ”ÄjÄ daļa.
Å Ä« ir galvenÄ.tf apakÅ”ÄjÄ daļa.
PÄc tam jÅ«s pievienojat apakÅ”tÄ«klu. LÄ«dz brÄ«dim, kad vÄlaties pievienot NAT vÄrtejas, marÅ”rutus, marÅ”rutÄÅ”anas tabulas un virkni citu apakÅ”tÄ«klu, jums bÅ«s nevis 38 rindas, bet aptuveni 200ā300 rindas.
Tas nozÄ«mÄ, ka jÅ«su main.tf fails pakÄpeniski aug. Un diezgan bieži cilvÄki visu liek vienÄ failÄ. 10-20 Kb parÄdÄs main.tf. IedomÄjieties, ka 10ā20 Kb ir teksta saturs. Un viss ir saistÄ«ts ar visu. Ar to pamazÄm kļūst grÅ«ti strÄdÄt. 10-20 Kb ir labs lietotÄja gadÄ«jums, dažreiz vairÄk. Un cilvÄki ne vienmÄr domÄ, ka tas ir slikti.
TÄpat kÄ parastajÄ programmÄÅ”anÄ, t.i., nevis infrastruktÅ«ru kÄ kodu, mÄs esam pieraduÅ”i izmantot dažÄdas klases, pakotnes, moduļus, grupÄjumus. Terraform ļauj jums darÄ«t to paÅ”u.
Kods aug.
Pieaug arī atkarība starp resursiem.
Un mums ir liela, liela vajadzÄ«ba. MÄs saprotam, ka mÄs vairs nevaram tÄ dzÄ«vot. MÅ«su kods kļūst milzÄ«gs. 10-20 Kb, protams, nav ļoti liels, bet mÄs runÄjam tikai par tÄ«kla steku, t.i., jÅ«s esat pievienojis tikai tÄ«kla resursus. MÄs nerunÄjam par Application Load Balancer, izvietoÅ”anas ES klasteru, Kubernetes utt., Kur var viegli iepÄ«t 100 Kb. Ja to visu pierakstÄ«sit, ļoti drÄ«z uzzinÄsiet, ka Terraform nodroÅ”ina Terraform moduļus.
Terraform moduļi ir autonoma Terraform konfigurÄcija, kas tiek pÄrvaldÄ«ta kÄ grupa. Tas ir viss, kas jums jÄzina par Terraform moduļiem. Tie nemaz nav gudri, neļauj veidot sarežģītus savienojumus atkarÄ«bÄ no kaut kÄ. Tas viss gulstas uz izstrÄdÄtÄju pleciem. Tas ir, Ŕī ir tikai sava veida Terraform konfigurÄcija, kuru jÅ«s jau esat uzrakstÄ«jis. Un jÅ«s to varat vienkÄrÅ”i saukt par grupu.
TÄpÄc mÄs cenÅ”amies saprast, kÄ optimizÄsim savu 10-20-30 Kb kodu. MÄs pamazÄm saprotam, ka mums ir jÄizmanto daži moduļi.
PirmÄ veida moduļi, ar kuriem jÅ«s saskaraties, ir resursu moduļi. ViÅi nesaprot, kas ir jÅ«su infrastruktÅ«ra, kas ir jÅ«su bizness, kur un kÄdi ir nosacÄ«jumi. Å ie ir tieÅ”i tie moduļi, kurus es kopÄ ar atvÄrtÄ pirmkoda kopienu administrÄju un kurus mÄs izvirzÄ«jÄm kÄ jÅ«su infrastruktÅ«ras sÄkotnÄjos blokus.
Resursu moduļa piemÄrs.
Izsaucot resursu moduli, mÄs norÄdÄm, no kura ceļa mums jÄielÄdÄ tÄ saturs.
MÄs norÄdÄm, kuru versiju vÄlamies lejupielÄdÄt.
MÄs tur nododam virkni argumentu. Tas ir viss. Tas ir viss, kas mums jÄzina, kad mÄs izmantojam Å”o moduli.
Daudzi cilvÄki domÄ, ka, ja viÅi izmantos jaunÄko versiju, viss bÅ«s stabils. Bet nÄ. InfrastruktÅ«rai ir jÄbÅ«t versijai, mums ir skaidri jÄatbild, kurÄ versijÄ Å”is vai cits komponents tika izvietots.
Å eit ir kods, kas atrodas Å”ajÄ modulÄ«. DroŔības grupas modulis. Å eit ritinÄjums iet uz 640. lÄ«niju. DroŔības krupas resursa izveide pakalpojumÄ Amazon visÄs iespÄjamÄs konfigurÄcijÄs ir ļoti nenozÄ«mÄ«gs uzdevums. Nepietiek vienkÄrÅ”i izveidot droŔības grupu un pateikt tai, kÄdus noteikumus tai nodot. Tas bÅ«tu ļoti vienkÄrÅ”i. Amazon iekÅ”ienÄ ir miljons dažÄdu ierobežojumu. PiemÄram, ja lietojat VPC galapunkts, prefiksu saraksts, dažÄdas API un mÄÄ£ina to visu apvienot ar visu pÄrÄjo, tad Terraform neļauj to darÄ«t. Un arÄ« Amazon API to neatļauj. TÄpÄc mums ir jÄslÄpj visa Ŕī briesmÄ«gÄ loÄ£ika modulÄ« un jÄiesniedz lietotÄja kods, kas izskatÄs tieÅ”i Å”Ädi.
LietotÄjam nav jÄzina, kÄ tas ir izgatavots iekÅ”pusÄ.
Otra veida moduļi, kas sastÄv no resursu moduļiem, jau atrisina problÄmas, kas vairÄk attiecas uz jÅ«su biznesu. Bieži vien Ŕī ir vieta, kas ir Terraform paplaÅ”inÄjums un nosaka dažas stingras tagu vÄrtÄ«bas uzÅÄmuma standartiem. Tur varat arÄ« pievienot funkcionalitÄti, ko Terraform paÅ”laik neļauj izmantot. Tas ir tieÅ”i tagad. Tagad versija 0.11, kas drÄ«z kļūs par pagÄtni. Bet tomÄr priekÅ”procesori, jsonnet, cookiecutter un vÄl virkne citu lietu ir palÄ«gmehÄnisms, kas jÄizmanto pilnvÄrtÄ«gam darbam.
TÄlÄk es parÄdÄ«Å”u dažus piemÄrus.
InfrastruktÅ«ras modulis tiek izsaukts tieÅ”i tÄdÄ paÅ”Ä veidÄ.
Ir norÄdÄ«ts avots, no kurienes lejupielÄdÄt saturu.
Å ajÄ modulÄ« tiek nodota un nodota virkne vÄrtÄ«bu.
TÄlÄk Å”ajÄ modulÄ« tiek izsaukta virkne resursu moduļu, lai izveidotu VPC vai lietojumprogrammu slodzes lÄ«dzsvarotÄju, vai lai izveidotu droŔības grupu vai elastÄ«go konteineru pakalpojumu klasteru.
Ir divu veidu moduļi. Tas ir svarÄ«gi saprast, jo lielÄkÄ daļa informÄcijas, ko esmu sagrupÄjusi Å”ajÄ ziÅojumÄ, nav ierakstÄ«ta dokumentÄcijÄ.
Un Terraform dokumentÄcija Å”obrÄ«d ir diezgan problemÄtiska, jo tajÄ tikai teikts, ka ir Ŕīs funkcijas, jÅ«s varat tÄs izmantot. Bet viÅa nesaka, kÄ Å”Ä«s funkcijas izmantot, kÄpÄc tÄs ir labÄk izmantot. TÄpÄc ļoti liels skaits cilvÄku raksta kaut ko tÄdu, ar ko nevar sadzÄ«vot.
TÄlÄk apskatÄ«sim, kÄ rakstÄ«t Å”os moduļus. Tad redzÄsim, kÄ tos izsaukt un kÄ strÄdÄt ar kodu.
Padoms #0 ir nerakstÄ«t resursu moduļus. LielÄkÄ daļa Å”o moduļu jau ir rakstÄ«ti jums. KÄ jau teicu, tie ir atvÄrtÄ koda, tie nesatur nekÄdu jÅ«su biznesa loÄ£iku, tiem nav kodÄtu vÄrtÄ«bu IP adresÄm, parolÄm utt. Modulis ir ļoti elastÄ«gs. Un tas, visticamÄk, jau ir uzrakstÄ«ts. Ir daudz moduļu resursiem no Amazon. ApmÄram 650. Un lielÄkÄ daļa ir labas kvalitÄtes.
Å ajÄ piemÄrÄ kÄds atnÄca pie jums un teica: āEs vÄlos pÄrvaldÄ«t datu bÄzi. Izveidojiet moduli, lai es varÄtu izveidot datu bÄzi." Persona nezina ne Amazon, ne Terraform ievieÅ”anas informÄciju. ViÅÅ” vienkÄrÅ”i saka: "Es gribu pÄrvaldÄ«t MSSQL." Tas ir, mÄs domÄjam, ka tas izsauks mÅ«su moduli, nodos tur dzinÄja tipu un norÄdÄ«s laika joslu.
Un cilvÄkam nevajadzÄtu zinÄt, ka mÄs Å”ajÄ modulÄ« izveidosim divus dažÄdus resursus: vienu MSSQL, otru visam pÄrÄjam, jo āāTerraform 0.11 nevar norÄdÄ«t laika joslu vÄrtÄ«bas kÄ neobligÄtus.
Un, izejot no Ŕī moduļa, cilvÄks varÄs vienkÄrÅ”i saÅemt adresi. ViÅÅ” nezinÄs, no kuras datu bÄzes, no kÄda resursa mÄs to visu iekÅ”Äji veidojam. Tas ir ļoti svarÄ«gs slÄpÅ”anas elements. Un tas attiecas ne tikai uz tiem moduļiem, kas ir publiski atvÄrtÄ pirmkoda ietvaros, bet arÄ« uz tiem moduļiem, kurus rakstÄ«sit savos projektos un komandÄs.
Å is ir otrais arguments, kas ir diezgan svarÄ«gs, ja kÄdu laiku esat lietojis Terraform. Jums ir repozitorijs, kurÄ ievietojat visus uzÅÄmuma Terraform moduļus. Un tas ir pilnÄ«gi normÄli, ka ar laiku Å”is projekts izaugs lÄ«dz viena vai diviem megabaitiem. Tas ir labi.
Bet problÄma ir tÄ, kÄ Terraform sauc Å”os moduļus. PiemÄram, ja izsaucat moduli, lai izveidotu katru atseviŔķu lietotÄju, Terraform vispirms ielÄdÄs visu repozitoriju un pÄc tam pÄriet uz mapi, kurÄ atrodas konkrÄtais modulis. TÄdÄ veidÄ jÅ«s katru reizi lejupielÄdÄsit vienu megabaitu. Ja pÄrvaldÄt 100 vai 200 lietotÄjus, lejupielÄdÄsiet 100 vai 200 megabaitus un pÄc tam pÄrejiet uz Å”o mapi. TÄpÄc, protams, jÅ«s nevÄlaties lejupielÄdÄt daudz satura katru reizi, kad noklikŔķinÄt uz "Terraform init".
Å ai problÄmai ir divi risinÄjumi. Pirmais ir izmantot relatÄ«vos ceļus. TÄdÄ veidÄ jÅ«s norÄdÄt kodÄ, ka mape ir lokÄla (./). Un pirms kaut ko palaižat, lokÄli izveidojiet Ŕīs krÄtuves Git klonu. TÄdÄ veidÄ jÅ«s to darÄt vienreiz.
Protams, ir daudz mÄ«nusu. PiemÄram, jÅ«s nevarat izmantot versiju noteikÅ”anu. Un ar to dažreiz ir grÅ«ti sadzÄ«vot.
Otrais risinÄjums. Ja jums ir daudz apakÅ”moduļu un jums jau ir izveidots konveijera veids, tad ir MBT projekts, kas ļauj savÄkt daudz dažÄdu pakotÅu no monorepozitorija un augÅ”upielÄdÄt tos S3. Tas ir ļoti labs veids. TÄdÄjÄdi iam-user-1.0.0.zip fails svÄrs tikai 1 Kb, jo kods Ŕī resursa izveidoÅ”anai ir ļoti mazs. Un tas darbosies daudz ÄtrÄk.
ParunÄsim par to, ko nevar izmantot moduļos.
KÄpÄc tas ir ļaunums moduļos? SliktÄkais ir pieÅemt lietotÄju. PieÅemsim, ka lietotÄjs ir nodroÅ”inÄtÄja autentifikÄcijas opcija, ko var izmantot dažÄdi cilvÄki. PiemÄram, mÄs visi asimilÄsim lomu. Tas nozÄ«mÄ, ka Terraform uzÅemsies Å”o lomu. Un tad ar Å”o lomu tas veiks citas darbÄ«bas.
Un ļaunums ir tas, ka, ja Vasjam patÄ«k izveidot savienojumu ar Amazon vienÄ veidÄ, piemÄram, izmantojot noklusÄjuma vides mainÄ«go, un Petjam patÄ«k izmantot savu koplietoto atslÄgu, kas viÅam ir slepenÄ vietÄ, tad jÅ«s nevarat norÄdÄ«t abus Terraforma. Un, lai viÅi nepiedzÄ«votu cieÅ”anas, modulÄ« nav jÄnorÄda Å”is bloks. Tas ir jÄnorÄda augstÄkÄ lÄ«menÄ«. Tas ir, mums ir resursu modulis, infrastruktÅ«ras modulis un kompozÄ«cija augÅ”pusÄ. Un tas bÅ«tu jÄnorÄda kaut kur augstÄk.
Otrs ļaunums ir nodroÅ”inÄtÄjs. Å eit ļaunums nav tik niecÄ«gs, jo ja tu raksti kodu un tas tev der, tad tu vari domÄt, ka ja strÄdÄ, tad kÄpÄc to mainÄ«t.
Ä»aunums ir tas, ka jÅ«s, pirmkÄrt, ne vienmÄr kontrolÄjat, kad Å”is nodroÅ”inÄtÄjs tiks palaists. Un, otrkÄrt, jÅ«s nekontrolÄjat, ko nozÄ«mÄ aws ec2, t.i., vai mÄs tagad runÄjam par Linux vai Windows. TÄtad jÅ«s nevarat uzrakstÄ«t kaut ko tÄdu, kas darbotos vienÄdi dažÄdÄs operÄtÄjsistÄmÄs vai dažÄdos lietotÄju gadÄ«jumos.
VisizplatÄ«tÄkais piemÄrs, kas ir norÄdÄ«ts arÄ« oficiÄlajÄ dokumentÄcijÄ, ir tÄds, ka, ja rakstÄt aws_instance un norÄdÄt virkni argumentu, tad nav nekÄ slikta, ja tur norÄdÄt nodroÅ”inÄtÄju ālocal-execā un palaižat savu ansible- rotaļu grÄmata.
PatiesÄ«bÄ, jÄ, tur nav nekÄ slikta. Bet burtiski drÄ«z jÅ«s sapratÄ«sit, ka Ŕī vietÄja-exec lieta nepastÄv, piemÄram, launch_configuration.
Un, ja izmantojat launch_configuration un vÄlaties izveidot automÄtiskÄs mÄrogoÅ”anas grupu no viena gadÄ«juma, tad palaiÅ”anas_konfigurÄcijÄ nav jÄdziena ānodroÅ”inÄtÄjsā. PastÄv jÄdziens ālietotÄja datiā.
TÄpÄc universÄlÄks risinÄjums ir izmantot lietotÄja datus. Un tas tiks palaists vai nu paÅ”Ä instancÄ, kad instance ir ieslÄgta, vai tajos paÅ”os lietotÄja datos, kad automÄtiskÄs mÄrogoÅ”anas grupa izmanto Å”o launch_configuration.
Ja jÅ«s joprojÄm vÄlaties palaist nodroÅ”inÄtÄju, jo tas ir lÄ«mÄÅ”anas komponents, kad tiek izveidots viens resurss, tajÄ brÄ«dÄ« jums ir jÄpalaiž savs nodroÅ”inÄtÄjs, jÅ«su komanda. TÄdu situÄciju ir ļoti daudz.
Un vispareizÄkais resurss tam tiek saukts par null_resource. Null_resource ir fiktÄ«vs resurss, kas faktiski nekad netiek izveidots. Tas neko neskar, nav API, nav automÄtiskÄs mÄrogoÅ”anas. Bet tas ļauj jums kontrolÄt, kad jÄpalaiž komanda. Å ajÄ gadÄ«jumÄ komanda tiek izpildÄ«ta izveides laikÄ.
Ir vairÄkas pazÄ«mes. Es neiedziļinÄÅ”os visÄs zÄ«mÄs ļoti detalizÄti. Par to ir raksts. Bet, ja esat strÄdÄjis ar Terraform vai izmantojis citu cilvÄku moduļus, tad bieži esat pamanÄ«jis, ka daudzus moduļus, tÄpat kÄ lielÄko daļu atvÄrtÄ koda koda, raksta cilvÄki savÄm vajadzÄ«bÄm. KÄds vÄ«rietis to uzrakstÄ«ja un atrisinÄja savu problÄmu. Es to ievietoju GitHub un ļaujiet tai dzÄ«vot. Tas dzÄ«vos, bet ja tur nebÅ«s dokumentÄcijas un piemÄru, tad neviens to neizmantos. Un, ja nav funkcionalitÄtes, kas ļauj atrisinÄt nedaudz vairÄk par savu konkrÄto uzdevumu, tad arÄ« to neviens neizmantos. Ir tik daudz veidu, kÄ zaudÄt lietotÄjus.
Ja vÄlaties kaut ko uzrakstÄ«t, lai cilvÄki to izmantotu, tad iesaku ievÄrot Ŕīs zÄ«mes.
Tie ir:
DokumentÄcija un piemÄri.
Pilna funkcionalitÄte.
SaprÄtÄ«gi noklusÄjuma iestatÄ«jumi.
TÄ«rs kods.
Testi.
PÄrbaudÄ«jumi ir atŔķirÄ«ga situÄcija, jo tos ir diezgan grÅ«ti uzrakstÄ«t. Es vairÄk ticu dokumentÄcijai un piemÄriem.
TÄtad, mÄs apskatÄ«jÄm, kÄ rakstÄ«t moduļus. Ir divi argumenti. Pirmais, kas ir vissvarÄ«gÄkais, ir nerakstÄ«t, ja varat, jo daudzi cilvÄki jau ir paveikuÅ”i Å”os uzdevumus pirms jums. Un, otrkÄrt, ja jÅ«s joprojÄm izlemjat, mÄÄ£iniet neizmantot pakalpojumu sniedzÄjus moduļos un nodroÅ”inÄtÄjos.
Å Ä« ir dokumentÄcijas pelÄkÄ daļa. IespÄjams, tagad jÅ«s domÄjat: "Kaut kas nav skaidrs. Nav pÄrliecinÄts." Bet redzÄsim pÄc seÅ”iem mÄneÅ”iem.
Tagad parunÄsim par to, kÄ izsaukt Å”os moduļus.
MÄs saprotam, ka mÅ«su kods laika gaitÄ pieaug. Mums vairs nav viena faila, mums jau ir 20 faili. Tie visi ir vienÄ mapÄ. Vai varbÅ«t piecÄs mapÄs. VarbÅ«t mÄs sÄkam tos kaut kÄ sadalÄ«t pa reÄ£ioniem, pÄc dažÄm sastÄvdaļÄm. Tad mÄs saprotam, ka tagad mums ir daži sinhronizÄcijas un orÄ·estrÄcijas elementi. Tas ir, mums ir jÄsaprot, kas mums jÄdara, ja mÄs mainÄm tÄ«kla resursus, kas mums jÄdara ar pÄrÄjiem resursiem, kÄ radÄ«t Ŕīs atkarÄ«bas utt.
Ir divas galÄjÄ«bas. PirmÄ galÄjÄ«ba ir viss vienÄ. Mums ir viens pamatfails. PagaidÄm tÄ bija oficiÄlÄ labÄkÄ prakse Terraform vietnÄ.
Bet tagad tas ir rakstÄ«ts kÄ novecojis un noÅemts. Laika gaitÄ Terraform kopiena saprata, ka tÄ ir tÄlu no labÄkÄs prakses, jo cilvÄki sÄka izmantot projektu dažÄdos veidos. Un ir problÄmas. PiemÄram, kad mÄs uzskaitÄm visas atkarÄ«bas vienuviet. Ir situÄcijas, kad noklikŔķinÄm uz āTerraform plÄnsā un lÄ«dz Terraform atjauninÄs visu resursu stÄvokļus, var paiet daudz laika.
Daudz laika ir, piemÄram, 5 minÅ«tes. Dažiem tas ir daudz laika. Esmu redzÄjis gadÄ«jumus, kad pagÄja 15 minÅ«tes. AWS API pavadÄ«ja 15 minÅ«tes, mÄÄ£inot noskaidrot, kas notiek ar katra resursa stÄvokli. Å Ä« ir ļoti liela teritorija.
Un, protams, radÄ«sies saistÄ«ta problÄma, kad vÄlaties kaut ko mainÄ«t vienÄ vietÄ, pÄc tam nogaidÄ«sit 15 minÅ«tes, un tas dod jums priekÅ”statu par dažÄm izmaiÅÄm. JÅ«s izspļÄvÄt, uzrakstÄ«jÄt āJÄā, un kaut kas nogÄja greizi. Å is ir ļoti reÄls piemÄrs. Terraform nemÄÄ£ina jÅ«s pasargÄt no problÄmÄm. Tas ir, rakstiet, ko vÄlaties. BÅ«s problÄmas ā jÅ«su problÄmas. KamÄr Terraform 0.11 nekÄdÄ veidÄ nemÄÄ£ina jums palÄ«dzÄt. 0.12 ir dažas interesantas vietas, kas ļauj pateikt: āVasja, tu tieÅ”Äm to vÄlies, vai vari atjÄgties?ā
Otrs veids ir samazinÄt Å”o apgabalu, tas ir, zvanus no vienas vietas var mazÄk savienot no citas vietas.
VienÄ«gÄ problÄma ir tÄ, ka jums ir jÄraksta vairÄk koda, t.i., jums ir jÄapraksta mainÄ«gie lielumi daudzos failos un jÄatjaunina. Dažiem cilvÄkiem tas nepatÄ«k. Man tas ir normÄli. Un daži cilvÄki domÄ: "KÄpÄc to rakstÄ«t dažÄdÄs vietÄs, es to visu salikÅ”u vienuviet." Tas ir iespÄjams, bet Ŕī ir otrÄ galÄjÄ«ba.
Kam tas viss dzÄ«vo vienuviet? Viens, divi, trÄ«s cilvÄki, tas ir, kÄds to izmanto.
Un kurÅ” izsauc vienu konkrÄtu komponentu, vienu bloku vai vienu infrastruktÅ«ras moduli? Pieci lÄ«dz septiÅi cilvÄki. Tas ir forÅ”i.
VisizplatÄ«tÄkÄ atbilde ir kaut kur pa vidu. Ja projekts ir liels, tad bieži vien bÅ«s situÄcija, ka neviens risinÄjums nav piemÄrots un ne viss izdodas, tÄpÄc jÅ«s nonÄkat pie maisÄ«juma. Tam nav nekÄ slikta, ja vien saprotat, ka abiem ir priekÅ”rocÄ«bas.
Ja kaut kas mainÄ«jÄs steka VPC un jÅ«s vÄlÄjÄties lietot Ŕīs izmaiÅas EC2, t.i., jÅ«s vÄlÄjÄties atjauninÄt automÄtiskÄs mÄrogoÅ”anas grupu, jo jums bija jauns apakÅ”tÄ«kls, tad es saucu Å”Äda veida atkarÄ«bas orÄ·estrÄÅ”anu. Ir daži risinÄjumi: kurÅ” ko izmanto?
Es varu ieteikt, kÄdi ir risinÄjumi. Varat izmantot Terraform, lai veiktu burvju darbÄ«bu, vai varat izmantot makefailus, lai izmantotu Terraform. Un redzÄt, vai tur kaut kas ir mainÄ«jies, varat to palaist Å”eit.
KÄ jums patÄ«k Å”is lÄmums? Vai kÄds uzskata, ka tas ir forÅ”s risinÄjums? Es redzu smaidu, acÄ«mredzot ir iezaguÅ”Äs Å”aubas.
Protams, nemÄÄ£iniet to mÄjÄs. Terraform nekad nebija paredzÄts palaiÅ”anai no Terraform.
VienÄ ziÅojumÄ viÅi man teica: "NÄ, tas nedarbosies." Lieta ir tÄda, ka tam nevajadzÄtu darboties. Lai gan tas izskatÄs tik iespaidÄ«gi, kad varat palaist Terraform no Terraform un pÄc tam Terraform, jums to nevajadzÄtu darÄ«t. Terraform vienmÄr jÄsÄk ļoti viegli.
JÅ«s norÄdÄt, kuru konkrÄto moduli vÄlaties izsaukt.
KÄdas atkarÄ«bas ir modulim?
Un kÄdus argumentus Å”is modulis pieÅem. Tas ir viss, kas jÄzina par Terragruntu.
DokumentÄcija ir tur, un vietnÄ GitHub ir 1 zvaigznes. Bet vairumÄ gadÄ«jumu tas ir tas, kas jums jÄzina. Un to ir ļoti viegli ieviest uzÅÄmumos, kas tikai sÄk strÄdÄt ar Terraform.
TÄtad orÄ·estrÄÅ”ana ir Terragrunt. Ir arÄ« citi varianti.
Tagad parunÄsim par to, kÄ strÄdÄt ar kodu.
Ja kodam jÄpievieno jaunas funkcijas, vairumÄ gadÄ«jumu tas ir vienkÄrÅ”i. JÅ«s rakstÄt jaunu resursu, viss ir vienkÄrÅ”i.
Ja jums ir kÄds resurss, ko izveidojÄt iepriekÅ”, piemÄram, uzzinÄjÄt par Terraform pÄc AWS konta atvÄrÅ”anas un vÄlaties izmantot jau esoÅ”os resursus, tad bÅ«tu pareizi paplaÅ”inÄt savu moduli Å”ÄdÄ veidÄ, lai tas atbalsta esoÅ”o resursu izmantoÅ”anu.
Un atbalstīja jaunu resursu izveidi, izmantojot bloka resursu.
IzvadÄ mÄs vienmÄr atgriežam izvades ID atkarÄ«bÄ no tÄ, kas tika izmantots.
Otra ļoti nozÄ«mÄ«ga problÄma Terraform 0.11 ir darbs ar sarakstiem.
GrÅ«tÄ«bas ir tÄdas, ka, ja mums ir Å”Äds lietotÄju saraksts.
Un, kad mÄs izveidojam Å”os lietotÄjus, izmantojot bloku resursus, viss notiek labi. MÄs izejam cauri visam sarakstam, katram izveidojot failu. Viss ir kÄrtÄ«bÄ. Un tad, piemÄram, lietotÄjs3, kurÅ” atrodas pa vidu, no Å”ejienes jÄizÅem, tad tiks no jauna izveidoti visi resursi, kas tika izveidoti pÄc viÅa, jo indekss mainÄ«sies.
Darbs ar sarakstiem statusa vidÄ. Kas ir valstiska vide? Å Ä« ir situÄcija, kad, veidojot Å”o resursu, tiek radÄ«ta jauna vÄrtÄ«ba. PiemÄram, AWS piekļuves atslÄga vai AWS slepenÄ atslÄga, t.i., kad mÄs izveidojam lietotÄju, mÄs saÅemam jaunu piekļuves vai slepeno atslÄgu. Un katru reizi, kad mÄs izdzÄÅ”am lietotÄju, Å”im lietotÄjam bÅ«s jauna atslÄga. Bet tas nav fen Å”ui, jo lietotÄjs nevÄlÄsies ar mums draudzÄties, ja mÄs viÅam izveidosim jaunu lietotÄju katru reizi, kad kÄds pamet komandu.
Å is ir risinÄjums. Å is ir kods, kas rakstÄ«ts Jsonnet. Jsonnet ir Google veidÅu valoda.
Å Ä« komanda ļauj pieÅemt Å”o veidni un kÄ izvadi atgriež json failu, kas ir izveidots atbilstoÅ”i jÅ«su veidnei.
Veidne izskatÄs Å”Ädi.
Terraform ļauj strÄdÄt gan ar HCL, gan ar Json vienÄdi, tÄdÄļ, ja jums ir iespÄja Ä£enerÄt Json, varat to ievietot Terraform. Fails ar paplaÅ”inÄjumu .tf.json tiks veiksmÄ«gi lejupielÄdÄts.
Un tad mÄs strÄdÄjam ar to kÄ parasti: terraform init, terramorm piemÄro. Un mÄs izveidojam divus lietotÄjus.
Tagad mÄs nebaidÄmies, ja kÄds pamet komandu. MÄs vienkÄrÅ”i rediÄ£Äsim json failu. Vasja Pupkins aizgÄja, Petja PjatoÄkins palika. Petja PjatoÄkins nesaÅems jaunu atslÄgu.
Terraform integrÄÅ”ana ar citiem rÄ«kiem patiesÄ«bÄ nav Terraform darbs. Terraform tika izveidota kÄ platforma resursu veidoÅ”anai un viss. Un viss, kas parÄdÄs vÄlÄk, nav Terraform rÅ«pes. Un nav vajadzÄ«bas to tur aust. Ir Ansible, kas dara visu nepiecieÅ”amo.
Bet rodas situÄcijas, kad mÄs vÄlamies paplaÅ”inÄt Terraform un izsaukt kÄdu komandu pÄc tam, kad kaut kas ir pabeigts.
Pirmais veids. MÄs izveidojam izvadi, kurÄ rakstÄm Å”o komandu.
Un tad mÄs izsaucam Å”o komandu no Äaulas terraform izvades un norÄdÄm vÄlamo vÄrtÄ«bu. TÄdÄjÄdi komanda tiek izpildÄ«ta ar visÄm aizstÄtajÄm vÄrtÄ«bÄm. Tas ir ļoti Ärti.
Otrais veids. Tas ir null_resource izmantoÅ”ana atkarÄ«bÄ no izmaiÅÄm mÅ«su infrastruktÅ«rÄ. MÄs varam izsaukt to paÅ”u lokÄlo exe, tiklÄ«dz mainÄs kÄda resursa ID.
Protams, tas viss ir gluds uz papÄ«ra, jo Amazon, tÄpat kÄ visiem citiem publiskajiem pakalpojumu sniedzÄjiem, ir virkne savu malas gadÄ«jumu.
VisizplatÄ«tÄkais gadÄ«jums ir tÄds, ka, atverot AWS kontu, ir svarÄ«gi, kurus reÄ£ionus izmantojat; vai Ŕī funkcija tur ir iespÄjota; varbÅ«t jÅ«s to atvÄrÄt pÄc 2013. gada decembra; varbÅ«t jÅ«s izmantojat noklusÄjuma VPC utt Ir daudz ierobežojumu. Un Amazon tos izkaisÄ«ja visÄ dokumentÄcijÄ.
Ir dažas lietas, no kurÄm iesaku izvairÄ«ties.
Lai sÄktu, izvairieties no visiem neslepenajiem argumentiem Terraform plÄnÄ vai Terraform CLI. To visu var ievietot tfvars failÄ vai vides mainÄ«gajÄ.
Bet jums nav jÄiegaumÄ visa Ŕī burvju komanda. Terraform plÄns ā var un dodamies ceļÄ. Pirmais mainÄ«gais ir var, otrais ir var, treÅ”ais, ceturtais. VissvarÄ«gÄkais infrastruktÅ«ras kÄ koda princips, ko izmantoju visbiežÄk, ir tas, ka, skatoties uz kodu, man ir jÄbÅ«t skaidrai izpratnei par to, kas tur ir izvietots, kÄdÄ stÄvoklÄ« un ar kÄdÄm vÄrtÄ«bÄm. Un tÄpÄc man nav jÄlasa dokumentÄcija vai jÄjautÄ Vasjam, kÄdus parametrus viÅÅ” izmantoja, lai izveidotu mÅ«su klasteru. Man vienkÄrÅ”i jÄatver fails ar paplaÅ”inÄjumu tfvars, kas bieži vien atbilst videi, un jÄpaskatÄs tur viss.
TÄpat neizmantojiet mÄrÄ·a argumentus, lai samazinÄtu tvÄrumu. Å im nolÅ«kam ir daudz vieglÄk izmantot mazus infrastruktÅ«ras moduļus.
TÄpat nav nepiecieÅ”ams ierobežot un palielinÄt paralÄlismu. Ja man ir 150 resursi un es vÄlos palielinÄt Amazon paralÄlismu no noklusÄjuma 10 uz 100, tad visticamÄk kaut kas noies greizi. Vai arÄ« tagad varÄtu iet labi, bet, kad Amazon saka, ka veicat pÄrÄk daudz zvanu, jums bÅ«s problÄmas.
Terraform mÄÄ£inÄs restartÄt lielÄko daļu Å”o problÄmu, taÄu jÅ«s gandrÄ«z neko nesasniegsit. Parallelism=1 ir svarÄ«ga lieta, ko izmantot, ja AWS API vai Terraform nodroÅ”inÄtÄja iekÅ”ienÄ atklÄjat kÄdu kļūdu. Un tad jums jÄnorÄda: parallelism=1 un jÄgaida, lÄ«dz Terraform pabeidz vienu zvanu, tad otro, tad treÅ”o. ViÅÅ” tos palaidÄ«s pa vienam.
CilvÄki man bieži jautÄ: "KÄpÄc es domÄju, ka Terraform darbvietas ir ļaunas?" Es uzskatu, ka infrastruktÅ«ras kÄ koda princips ir redzÄt, kÄda infrastruktÅ«ra ir izveidota un ar kÄdÄm vÄrtÄ«bÄm.
Darbvietas nav izveidojuÅ”i lietotÄji. Tas nenozÄ«mÄ, ka lietotÄji GitHub problÄmÄs rakstÄ«ja, ka mÄs nevaram dzÄ«vot bez Terraform darbvietÄm. NÄ, ne Å”Ädi. Terraform Enterprise ir komerciÄls risinÄjums. Terraform no HashiCorp nolÄma, ka mums ir vajadzÄ«gas darbvietas, tÄpÄc mÄs to iesniedzÄm. Man Ŕķiet daudz vieglÄk to ievietot atseviÅ”Ä·Ä mapÄ. Tad bÅ«s nedaudz vairÄk failu, bet tas bÅ«s skaidrÄks.
KÄ strÄdÄt ar kodu? PatiesÄ«bÄ darbs ar sarakstiem ir vienÄ«gÄ sÄpe. Un Åemiet Terraform vieglÄk. Å Ä« nav tÄ lieta, kas visu darÄ«s lieliski jÅ«su labÄ. Nevajag tur bÄzt visu, kas rakstÄ«ts dokumentÄcijÄ.
ZiÅojuma tÄma tika uzrakstÄ«ta "nÄkotnei". Es par to runÄÅ”u ļoti Ä«si. NÄkotnÄ tas nozÄ«mÄ, ka drÄ«zumÄ tiks izlaista 0.12.
0.12 ir daudz jaunu lietu. Ja nÄk no parastÄs programmÄÅ”anas, tad pietrÅ«kst visÄdi dinamiskie bloki, cilpas, pareizas un nosacÄ«tas salÄ«dzinÄÅ”anas darbÄ«bas, kur kreiso un labo pusi nerÄÄ·ina vienlaicÄ«gi, bet atkarÄ«bÄ no situÄcijas. Jums tas ļoti pietrÅ«kst, tÄpÄc 0.12 to atrisinÄs jÅ«su vietÄ.
Bet! Ja rakstÄ«sit arvien vienkÄrÅ”Äk, izmantojot gatavus moduļus un treÅ”o puÅ”u risinÄjumus, tad nebÅ«s jÄgaida un jÄcer, ka atnÄks 0.12 un visu sakÄrtos.
Paldies par ziÅojumu! JÅ«s runÄjÄt par infrastruktÅ«ru kÄ kodu un burtiski teicÄt vienu vÄrdu par testiem. Vai moduļos ir nepiecieÅ”ami testi? Kam tÄ ir atbildÄ«ba? Vai man tas ir jÄraksta paÅ”am, vai arÄ« par to ir atbildÄ«gi moduļi?
NÄkamais gads bÅ«s piepildÄ«ts ar ziÅojumiem, ka esam nolÄmuÅ”i visu pÄrbaudÄ«t. Ko pÄrbaudÄ«t, ir lielÄkais jautÄjums. Ir daudz atkarÄ«bu, daudz ierobežojumu no dažÄdiem pakalpojumu sniedzÄjiem. Kad mÄs ar jums runÄjam un sakÄt: "Man vajag pÄrbaudes", tad es jautÄju: "Ko jÅ«s pÄrbaudÄ«sit?" JÅ«s sakÄt, ka testÄsiet savÄ reÄ£ionÄ. Tad es saku, ka manÄ reÄ£ionÄ tas nedarbojas. Tas ir, mÄs pat nevarÄsim par to vienoties. Nemaz nerunÄjot par to, ka ir daudz tehnisku problÄmu. Tas ir, kÄ uzrakstÄ«t Å”os testus, lai tie bÅ«tu adekvÄti.
Es aktÄ«vi pÄtu Å”o tÄmu, t.i., kÄ automÄtiski Ä£enerÄt testus, pamatojoties uz jÅ«su rakstÄ«to infrastruktÅ«ru. Tas ir, ja jÅ«s uzrakstÄ«jÄt Å”o kodu, tad man tas ir jÄpalaiž, pamatojoties uz to, es varu izveidot testus.
Terratest ir viena no visbiežÄk pieminÄtajÄm bibliotÄkÄm, kas ļauj rakstÄ«t Terraform integrÄcijas testus. Å Ä« ir viena no utilÄ«tprogrammÄm. Es dodu priekÅ”roku DSL tipam, piemÄram, rspec.
Anton, paldies par ziÅojumu! Mani sauc ValÄrijs. Ä»aujiet man uzdot nedaudz filozofisku jautÄjumu. NosacÄ«ti ir nodroÅ”inÄjums, ir izvietoÅ”ana. NodroÅ”inÄÅ”ana rada manu infrastruktÅ«ru, izvietoÅ”anÄ mÄs to piepildÄm ar kaut ko noderÄ«gu, piemÄram, serveriem, lietojumprogrammÄm utt. Un manÄ galvÄ ir tas, ka Terraform ir vairÄk paredzÄts nodroÅ”inÄÅ”anai, bet Ansible ir vairÄk paredzÄts izvietoÅ”anai, jo Ansible ir arÄ« fiziskai infrastruktÅ«rai. ļauj instalÄt nginx, Postgres. Bet tajÄ paÅ”Ä laikÄ Å”Ä·iet, ka Ansible ļauj nodroÅ”inÄt, piemÄram, Amazon vai Google resursus. Bet Terraform arÄ« ļauj izvietot kÄdu programmatÅ«ru, izmantojot tÄ moduļus. No jÅ«su viedokļa, vai starp Terraform un Ansible ir kaut kÄda robeža, kur un ko labÄk izmantot? Vai, piemÄram, tu domÄ, ka Ansible jau ir miskaste, jÄmÄÄ£ina visam izmantot Terraform?
Labs jautÄjums, ValÄrijs. Uzskatu, ka Terraform mÄrÄ·is nav mainÄ«jies kopÅ” 2014. gada. Tas tika izveidots infrastruktÅ«rai un nomira infrastruktÅ«ras dÄļ. Mums joprojÄm bija un bÅ«s vajadzÄ«ba pÄc konfigurÄcijas pÄrvaldÄ«bas Ansible. IzaicinÄjums ir tÄds, ka iekÅ” launch_configuration ir lietotÄja dati. Un tur jÅ«s velciet Ansible utt. Å Ä« ir standarta atŔķirÄ«ba, kas man patÄ«k vislabÄk.
Ja mÄs runÄjam par skaistu infrastruktÅ«ru, tad ir tÄdi komunÄlie pakalpojumi kÄ Packer, kas apkopo Å”o attÄlu. Un tad Terraform izmanto datu avotu, lai atrastu Å”o attÄlu un atjauninÄtu tÄ launch_configuration. Tas ir, Å”ÄdÄ veidÄ cauruļvads ir tÄds, ka mÄs vispirms velkam Tracker, pÄc tam velkam Terraform. Un, ja notiek uzbÅ«ve, notiek jaunas izmaiÅas.
Sveiki! Paldies par ziÅojumu! Mani sauc MiÅ”a, RBS uzÅÄmums. Veidojot resursu, varat izsaukt Ansible, izmantojot nodroÅ”inÄtÄju. Ansible ir arÄ« tÄma, ko sauc par dinamisko inventarizÄciju. Un jÅ«s varat vispirms piezvanÄ«t Terraform un pÄc tam zvanÄ«t Ansible, kas paÅems resursus no valsts un izpildÄ«s to. Kas ir labÄks?
CilvÄki izmanto abus ar vienÄdiem panÄkumiem. Man Ŕķiet, ka Ansible dinamiskais inventÄrs ir Ärta lieta, ja nerunÄjam par autoscaling grupu. Jo automÄtiskÄs mÄrogoÅ”anas grupÄ mums jau ir savs rÄ«ku komplekts, ko sauc par launch_configuration. LaukÄ launch_configuration mÄs ierakstÄm visu, kas ir jÄpalaiž, kad veidojam jaunu resursu. TÄpÄc ar Amazon dinamiskÄ inventÄra izmantoÅ”ana un Terraform ts faila lasÄ«Å”ana, manuprÄt, ir pÄrspÄ«lÄta. Un, ja izmantojat citus rÄ«kus, kur nav jÄdziena āautomÄrogoÅ”anas grupaā, piemÄram, izmantojat DigitalOcean vai kÄdu citu pakalpojumu sniedzÄju, kur nav automÄtiskÄs mÄrogoÅ”anas grupas, tad tur jums bÅ«s manuÄli jÄvelk API, jÄatrod IP adreses, jÄizveido dinamisks inventarizÄcijas fails , un Ansible jau klÄ«st pa to. Tas ir, Amazon ir launch_configuration, bet visam pÄrÄjam ir dinamisks inventÄrs.