Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Saites:

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

https://github.com/terraform-aws-modules
https://registry.terraform.io/namespaces/terraform-aws-modules

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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 infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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ā.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Šādi izskatās parastais Terraform konfigurācijas fails, kurā vispirms definējam dažus mainīgos.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Šajā gadījumā mēs definējam "aws_region".

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Pēc tam mēs aprakstam, kādus resursus mēs vēlamies izveidot.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Mēs palaižam dažas komandas, jo Ä«paÅ”i ā€œterraform initā€, lai ielādētu atkarÄ«bas un nodroÅ”inātājus.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Mēs to apstiprinām. Tādējādi mēs izveidojam spaini, ko sauc par jūras gliemezi.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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)

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

2014. gadā vārds ā€œparedzamsā€ Å”ajā kontekstā izklausÄ«jās ļoti neparasti.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Protams, projekts pakāpeniski pieaugs.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

ApskatÄ«sim Ŕādu piemēru.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Jūs pakāpeniski pievienojat internet_gateway, jo vēlaties, lai jūsu VPC resursiem būtu piekļuve internetam. Šī ir laba ideja.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Rezultāts ir Ŕis main.tf:

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Å Ä« ir vietnes main.tf augŔējā daļa.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Å Ä« 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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

  • Kods aug.
  • Pieaug arÄ« atkarÄ«ba starp resursiem.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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 infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Resursu moduļa piemērs.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Izsaucot resursu moduli, mēs norādām, no kura ceļa mums jāielādē tā saturs.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Mēs norādām, kuru versiju vēlamies lejupielādēt.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Mēs tur nododam virkni argumentu. Tas ir viss. Tas ir viss, kas mums jāzina, kad mēs izmantojam Å”o moduli.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Å 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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Lietotājam nav jāzina, kā tas ir izgatavots iekÅ”pusē.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Infrastruktūras modulis tiek izsaukts tieŔi tādā paŔā veidā.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Ir norādīts avots, no kurienes lejupielādēt saturu.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Šajā modulī tiek nodota un nodota virkne vērtību.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Tālāk apskatÄ«sim, kā rakstÄ«t Å”os moduļus. Tad redzēsim, kā tos izsaukt un kā strādāt ar kodu.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Terraformu reģistrs - https://registry.terraform.io/

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Å 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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Å 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".

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

https://github.com/mbtproject/mbt

Å 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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Parunāsim par to, ko nevar izmantot moduļos.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Ä»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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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ā€.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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ā.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Saite http://bit.ly/common-traits-in-terraform-modules

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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?ā€

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

https://github.com/gruntwork-io/terragrunt/

Ja vajag zvanu orÄ·estrÄ“Å”anu, kad kaut kas ir mainÄ«jies vienā vietā, tad ir Terragrunt.

Terragrunt ir utilīta, Terraform papildinājums, kas ļauj koordinēt un organizēt zvanus uz infrastruktūras moduļiem.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Tipisks Terraform konfigurācijas fails izskatās Ŕādi.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Jūs norādāt, kuru konkrēto moduli vēlaties izsaukt.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Kādas atkarības ir modulim?

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Tātad orÄ·estrÄ“Å”ana ir Terragrunt. Ir arÄ« citi varianti.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Un atbalstīja jaunu resursu izveidi, izmantojot bloka resursu.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Izvadē mēs vienmēr atgriežam izvades ID atkarībā no tā, kas tika izmantots.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Otra ļoti nozīmīga problēma Terraform 0.11 ir darbs ar sarakstiem.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Grūtības ir tādas, ka, ja mums ir Ŕāds lietotāju saraksts.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Šis ir risinājums. Šis ir kods, kas rakstīts Jsonnet. Jsonnet ir Google veidņu valoda.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

Å Ä« komanda ļauj pieņemt Å”o veidni un kā izvadi atgriež json failu, kas ir izveidots atbilstoÅ”i jÅ«su veidnei.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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 infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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ā.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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ā.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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ā.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Terraform infrastruktūras apraksts nākotnei. Antons Babenko (2018)

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.

Avots: www.habr.com

Pievieno komentāru