Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Näib, et Terraformi arendajad pakuvad AWS-i infrastruktuuriga töötamiseks üsna mugavaid parimaid tavasid. Ainult seal on nüanss. Aja jooksul keskkondade arv suureneb, funktsioonid ilmuvad igas. Ilmub peaaegu koopia naaberpiirkonnas asuvast rakenduste virust. Ja Terraformi kood tuleb hoolikalt kopeerida ja vastavalt uutele nõuetele või lumehelbe tegemiseks redigeerida.

Minu aruanne käsitleb Terraformi mustreid, et võidelda kaose ja käsitsi rutiini vastu suurte ja pikkade projektide puhul.

Video:

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Olen 40-aastane, IT-valdkonnas töötanud 20 aastat. Olen Ixtensis töötanud 12 aastat. Tegeleme e-kaubanduse-põhise arendusega. Ja ma olen DevOpsi praktikaid praktiseerinud 5 aastat.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Minu lugu räägib mitteavaldamise lepingu taha peituvast projektist ettevõttes, mille nime ma ei ütle.

Slaidil olevad numbrid on antud selleks, et mõista projekti ulatust. Ja kõik, mida ma järgmisena ütlen, on seotud Amazoniga.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Liitusin selle projektiga 4 aastat tagasi. Ja infrastruktuuri ümberehitamine oli täies hoos, sest projekt oli kasvanud. Ja need mustrid, mida kasutati, need enam ei sobinud. Ja arvestades kogu projekti kavandatud kasvu, oli vaja midagi uut välja mõelda.

Aitäh Matveyle, kes rääkis meile eile Dodo Pizzas juhtunust. Nii juhtus meiega 4 aastat tagasi.

Arendajad tulid ja hakkasid taristu koodi tegema.

Kõige ilmsemad põhjused, miks seda nõuti, oli turustamise aeg. Tuli veenduda, et DevOpsi meeskond ei oleks väljarullimisel kitsaskohaks. Ja kõige muu hulgas kasutati kõige esimesel tasemel Terraformi ja Nukku.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Terraform on HashiCorpi avatud lähtekoodiga projekt. Ja kes üldse ei tea, mis see on, siis paar järgmist slaidi.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Infrastruktuur kui kood tähendab, et saame kirjeldada oma infrastruktuuri ja paluda mõnel robotil veenduda, et saame kirjeldatud ressursse.

Näiteks vajame virtuaalmasinat. Kirjeldame, lisame mõned nõutavad parameetrid.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Pärast seda konfigureerime konsoolis juurdepääsu Amazonile. Ja küsige Terraformi plaani. Terraformi plaan ütleb: "Ok, teie ressursi jaoks saame neid asju teha." Ja lisatakse vähemalt üks ressurss. Ja muutusi pole oodata.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Kui kõik teile sobib, võite paluda Terraformil kandideerida ja Terraform loob teie jaoks eksemplari ja teie pilve saate virtuaalse masina.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Edasi areneb meie projekt. Lisame sinna mõned muudatused. Küsime rohkem juhtumeid, lisame 53 kirjet.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Ja me kordame. Palun planeerige. Vaatame, millised muudatused on plaanis. Rakenda. Ja nii meie infrastruktuur kasvab.

Terraform kasutab sellist asja nagu olekufailid. See tähendab, et see salvestab kõik Amazonile minevad muudatused faili, kus iga teie kirjeldatud ressursi jaoks on vastavad Amazonis loodud ressursid. Seega teab Terraform ressursi kirjeldust muutes täpselt, mida Amazonis muuta tuleb.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Need olekufailid olid algselt lihtsalt failid. Ja me hoidsime neid Gitis, mis oli äärmiselt ebamugav. Pidevalt unustas keegi muudatusi teha ja tekkis palju konflikte.

Nüüd on võimalik kasutada taustaprogrammi, st Terraform on näidatud, millisesse ämbrisse, millise võtmega olekufail salvestada. Ja Terraform ise hoolitseb selle olekufaili hankimise eest, teeb kõik maagia ja paneb lõpptulemuse tagasi.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Meie infrastruktuur kasvab. Siin on meie kood. Ja nüüd ei taha me luua lihtsalt virtuaalset masinat, vaid testkeskkonda.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Terraform võimaldab teha sellist asja moodulina ehk kirjeldada sama asja mõnes kaustas.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Ja näiteks testimisel helistage sellele moodulile ja saate sama asja, nagu teeksime Terraformi rakendust moodulis endas. Siin on testimise kood.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Tootmise jaoks saame sinna saata mõned muudatused, sest testimisel pole vaja suuri eksemplare, tootmises tulevad kasuks suured eksemplarid.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Ja siis ma lähen tagasi projekti juurde. See oli raske ülesanne, infrastruktuur oli planeeritud väga suureks. Ja kogu kood oli vaja kuidagi paigutada nii, et see oleks kõigile mugav: neile, kes selle koodi hooldust teevad, ja neile, kes teevad muudatusi. Ja plaaniti, et iga arendaja võib minna oma platvormiosa tarvis infrastruktuuri korda tegema.

See on kataloogipuu, mida HashiCorp soovitab, kui teil on suur projekt ja on mõttekas jagada kogu infrastruktuur mõneks väikeseks osaks ja kirjeldada iga osa eraldi kaustas.

Omades ulatuslikku ressursiteeki, saate testimisel ja tootmisel helistada umbes samale asjale.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Meie puhul see täiesti ei sobinud, sest arendajatele või testimiseks mõeldud testpinn tuli kuidagi lihtsamalt hankida. Ja ma ei tahtnud kaustadest läbi minna ja õiges järjekorras kandideerida ning muretseda, et baas tõuseb ja siis tõuseb seda baasi kasutav eksemplar. Seetõttu käivitati kogu testimine ühest kaustast. Sinna kutsuti samu mooduleid, aga kõik käis ühe jooksuga läbi.

Terraform hoolitseb kõigi sõltuvuste eest. Ja see loob alati ressursid selles järjestuses, et saaksite näiteks värskelt loodud eksemplarilt saada IP-aadressi ja selle IP-aadressi saada marsruudi53 kirjes.

Lisaks on platvorm väga suur. Ja proovipinu juhtimine, isegi kui tund aega, isegi kui 8 tundi, on üsna kallis äri.

Ja me oleme selle äri automatiseerinud. Ja Jenkinsi töö võimaldas stäkil käia. Selles oli vaja käivitada tõmbamistaotlus koos muudatustega, mida arendaja soovib testida, täpsustada kõik vajalikud valikud, komponendid ja suurused. Kui ta soovib jõudluskontrolli, võib ta teha rohkem katseid. Kui tal on vaja lihtsalt kontrollida, et mõni ankeet avaneb, võiks ta alustada miinimumpalgast. Ja märkige ka, kas klastrit on vaja või mitte jne.

Ja siis Jenkins lükkas shelliskripti, mis muutis veidi Terraformi kaustas olevat koodi. Eemaldatud mittevajalikud failid, lisatud vajalikud failid. Ja siis ühe Terraformi rakendusega stäkk tõusis.

Ja siis olid teised sammud, millesse ma minna ei taha.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Kuna testimiseks vajasime veidi rohkem valikuvõimalusi kui tootmises, siis pidime tegema moodulitest koopiad, et nendesse koopiatesse saaksime lisada neid funktsioone, mida on vaja ainult testimisel.

Ja juhtus nii, et testimisel tundub, et soovite testida neid muudatusi, mis lõpuks tootmisse lähevad. Aga tegelikult sai testitud ühte asja ja tootmises kasutati veidi teistsugust. Ja mustris tekkis väike paus, et tootmises rakendas kõiki muudatusi operatiivmeeskond. Ja mõnikord selgus, et need muudatused, mis pidid testimisest tootmisse minema, jäid teise versiooni.

Lisaks tekkis selline probleem, et lisandus uus teenus, mis erines veidi mõnest olemasolevast. Ja olemasoleva mooduli muutmise asemel tuli teha sellest koopia ja lisada vajalikud muudatused.

Tegelikult pole Terraform päris keel. See on deklaratsioon. Kui meil on vaja midagi deklareerida, siis me deklareerime. Ja see kõik töötab.

Mingi hetk, kui arutati üht mu tõmbetaotlust, ütles üks kolleeg, et lumehelbeid pole vaja toota. Ma mõtlesin, mida ta mõtles. On olemas selline teaduslik fakt, et maailmas pole kahte identset lumehelvest, nad on kõik veidi, kuid erinevad. Ja niipea, kui ma seda kuulsin, tundsin kohe Terraformi koodi täit raskust. Sest kui oli vaja versioonilt versioonile liikuda, siis Terraform nõudis ahela katkestamist, st kood ei ühildunud enam järgmise versiooniga. Ja ma pidin tegema tõmbamistaotluse, mis hõlmas peaaegu pooled infrastruktuuri failidest, et viia infrastruktuur Terraformi järgmisse versiooni.

Ja peale sellise lumehelbe ilmumist kogu meie poolt tehtud Terraformi kood suureks-suureks lumehunnikuks.

Välise arendaja jaoks, kes on väljaspool tegevust, ei oma see suurt tähtsust, sest ta tegi tõmbetaotluse, tema ressurss läks käima. Ja kõik, see pole tema mure. Ja DevOpsi meeskond, kes tagab, et kõik on korras, peab tegema kõik need muudatused. Ja nende muudatuste maksumus kasvas iga täiendava lumehelbega väga-väga palju.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Seal on lugu sellest, kuidas tudeng seminaril joonistab tahvlile kriidiga kaks täiuslikku ringi. Ja õpetaja on üllatunud, kuidas ta ilma kompassita nii sujuvalt joonistada sai. Õpilane vastab: "See on väga lihtne, ma keerutasin kaks aastat sõjaväes hakklihamasinat."

Ja neljast aastast, mil ma olen selles projektis osalenud, olen Terraformi teinud umbes kaks aastat. Ja loomulikult on mul mõned nipid, mõned näpunäited, kuidas Terraformi koodi lihtsustada, töötada sellega nagu programmeerimiskeelega ja vähendada arendajate koormust, kes peavad seda koodi ajakohasena hoidma.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Esimene asi, millest tahaksin alustada, on Symlinks. Terraformil on palju korduvat koodi. Näiteks teenusepakkujale helistamine peaaegu igas punktis, kus me infrastruktuuri loome, on sama. Ja see on loogiline panna see eraldi issi. Ja kõikjal, kus teenusepakkuja peab sellele failile sümboolseid linke looma.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Näiteks kasutate tootmises oletatavat rolli, mis võimaldab teil saada juurdepääsuõigusi mõnele välisele Amazoni kontole. Ja üht faili muutes saavad kõik ülejäänud ressursipuus olevad vajalikud õigused, et Terraform teaks, millisele Amazoni segmendile juurde pääseda.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Kus Symlinks ei tööta? Nagu ma ütlesin, on Terraformil olekufailid. Ja nad on väga-väga lahedad. Kuid tõsiasi on see, et Terraform lähtestab taustaprogrammi kõige esimeses. Ja ta ei saa neis parameetrites mingeid muutujaid kasutada, need tuleb alati tekstis kirjutada.

Selle tulemusena kopeerib keegi uue ressursi loomisel osa koodist teistest kaustadest. Ja ta võib võtme või ämbriga eksida. Näiteks teeb ta liivakastist liivakastiasja ja teeb selle siis tootmises. Ja nii võibki selguda, et tootmises olevat ämbrit hakatakse kasutama liivakastist. Muidugi leiavad nad selle kiiresti üles. Seda on võimalik kuidagi parandada, kuid sellegipoolest on see aja ja teatud määral ressursside raiskamine.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Mida me saame edasi teha? Enne Terraformiga töötamist peate selle lähtestama. Initsialiseerimise ajal laadib Terraform alla kõik pistikprogrammid. Mingil hetkel murdusid nad monoliidist mikroteenuselisemaks arhitektuuriks. Ja alati peate tegema Terraformi initi, et see tõmbaks üles kõik moodulid, kõik pistikprogrammid.

Ja saate kasutada shelliskripti, mis esiteks saab kõik muutujad. Shelli skript on piiramatu. Ja teiseks viis. Kui kasutame olekufaili võtmena alati hoidlas olevat teed, siis vastavalt sellele jäetakse viga siin välja.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Kust saada andmeid? JSON-fail. Terraform võimaldab teil kirjutada infrastruktuuri mitte ainult hcl-is (HashiCorp Configuration Language), vaid ka JSON-is.

JSON-i on kestaskriptist lihtne lugeda. Sellest lähtuvalt saab mõnesse kohta panna konfiguratsioonifaili koos ämbriga. Ja kasutage seda ämbrit nii Terraformi koodis kui ka shelliskriptis initsialiseerimiseks.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Miks on Terraformi ämbri olemasolu oluline? Sest on olemas selline asi nagu kaugolekufailid. See tähendab, et kui ma tõstan mõnda ressurssi, et öelda Amazonile: "Palun tõsta eksemplar", pean määrama palju nõutavaid parameetreid.

Ja need identifikaatorid on salvestatud mõnda teise kausta. Ja ma võin võtta selle ja öelda: "Terraform, palun käivitage selle ressursi olekufail ja hankige mulle need identifikaatorid." Ja seega toimub eri piirkondade või keskkondade vahel mingi unifitseerimine.

Kaugolekufaili pole alati võimalik kasutada. Näiteks lõite käsitsi VPC. Ja Terraformi kood, mis VPC-d loob, loob nii erineva VPC, et see võtab väga kaua aega ja peate üht teist kohandama, nii et saate kasutada järgmist nippi.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

See tähendab, et teha moodul, mis justkui loob VPC ja annab teile identifikaatorid, kuid tegelikult on olemas lihtsalt kõvakodeeritud väärtustega fail, mida saab kasutada sama eksemplari loomiseks.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Alati pole vaja olekufaili pilve salvestada. Näiteks moodulite testimisel saate kasutada taustainitsialiseerimist, kui fail salvestatakse testimise ajal lihtsalt kettale.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Nüüd natuke testimisest. Mida saab Terraformis testida? Tõenäoliselt on palju võimalik, kuid ma räägin neist neljast asjast.

HashiCorpil on arusaam Terraformi koodi vormindamisest. Ja Terraform fmt võimaldab teil redigeeritava koodi vormindada vastavalt sellele veendumusele. Sellest lähtuvalt peavad testid tingimata kontrollima, kas vorming vastab HashiCorpi pärandatud vormingule, et te ei peaks muutma sulgude asukohta jne.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Järgmine on Terraformi valideerimine. See teeb natuke rohkem kui süntaksikontroll – para, kas kõik sulud on paaris. Mis on siin oluline? Meil on väga õhuke infrastruktuur. Sellel on palju erinevaid kaustu. Ja igaühes peate käivitama Terraformi valideerimise.

Seetõttu käivitame testimise kiirendamiseks mitu protsessi paralleelselt, kasutades paralleelselt.

Paralleel on väga lahe asi, kasutage seda.

Kuid iga kord, kui Terraform initsialiseeritakse, läheb see HashiCorpi juurde ja küsib: „Millised on uusimad pistikprogrammid? Ja pistikprogramm, mis mul vahemälus on – kas see on see või mitte? Ja see aeglustus igal sammul.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Kui Terraform ütleb teile, kus pistikprogrammid asuvad, ütleb Terraform: "OK, see on ilmselt kõige värskem asi. Ma ei lähe kuhugi, hakkan kohe teie Terraformi koodi valideerima."

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Kausta täitmiseks vajalike pluginatega on meil olemas väga lihtne Terraformi kood, mis tuleb lihtsalt lähtestada. Siin peate muidugi määrama kõik pakkujad, kes mingil moel teie koodis osalevad, vastasel juhul ütleb Terraform: "Ma ei tea ühtegi pakkujat, kuna seda pole vahemälus."

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Järgmine on Terraformi plaan. Nagu ma ütlesin, on areng tsükliline. Teeme koodi koos muudatustega. Ja siis tuleb uurida, mis muudatusi taristu osas plaanitakse.

Ja kui infrastruktuur on väga-väga suur, saate muuta ühte moodulit, parandada mõnda testkeskkonda või mõnda konkreetset piirkonda ja lõhkuda mõne naaberpiirkonna. Seetõttu tuleks teha Terraformi plaan kogu taristu kohta ja näidata, millised muudatused on plaanis.

Saate seda teha nutikalt. Näiteks kirjutasime Pythoni skripti, mis lahendab sõltuvused. Ja olenevalt sellest, mida on muudetud: Terraformi moodul või lihtsalt konkreetne komponent, teeb see plaane kõigi sõltuvate kaustade jaoks.

Terraformi plaan tuleb teha nõudmisel. Vähemalt nii me teeme.

Teste on muidugi hea teha iga muudatuse, iga kohustuse puhul, aga plaanid on üsna kallis asi. Ja me ütleme tõmbetaotluses: "Palun andke mulle plaanid." Robot käivitub. Ja saadab kommentaaridesse või lisama kõik plaanid, mida teie muudatustest oodatakse.

Plaan on üsna kallis asi. See võtab aega, sest Terraform läheb Amazoni ja küsib: "Kas see eksemplar on ikka olemas? Kas sellel automaatsel skaalal on täpselt samad parameetrid?”. Ja selle kiirendamiseks võite kasutada parameetrit nagu refresh=false. See tähendab, et Terraform tühjendab S3 oleku. Ja usub, et osariik vastab täpselt Amazonases olevale.

Selline Terraformi plaan on palju kiirem, aga riik peab sobima sinu taristuga, st kuskil, millalgi peab alustama Terraform refresh. Terraform refresh teeb täpselt seda, et olek vastaks sellele, mis on reaalses taristus.

Ja ma pean ütlema ohutuse kohta. Siit oleks pidanud alustama. Kui kasutate Terraformi ja Terraform töötab teie infrastruktuuriga, on haavatavus. See tähendab, et sisuliselt täidate koodi. Ja kui tõmbamistaotlus sisaldab mingit pahatahtlikku koodi, saab seda käivitada infrastruktuuris, millel on liiga palju juurdepääsu. Seetõttu olge Terraformi plaani käivitamisel ettevaatlik.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Järgmine asi, millest tahaksin rääkida, on kasutajaandmete testimine.

Mis on kasutajaandmed? Amazonis saame eksemplari loomisel saata eksemplarilt mingisuguse kirja – metaandmed. Eksemplari käivitamisel on tavaliselt nendel eksemplaridel alati pilve init. Cloud init loeb seda kirja ja ütleb: "OK, täna olen koormuse tasakaalustaja." Ja nende ettekirjutuste kohaselt teeb ta mõningaid toiminguid.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Kui aga Terraformi plaan ja Terraform rakenduvad, siis kahjuks näevad kasutajaandmed välja nagu see numbrite segu. See tähendab, et ta saadab teile lihtsalt räsi. Ja plaanis on näha vaid see, kas tuleb mingeid muudatusi või jääb räsi samaks.

Ja kui te sellele tähelepanu ei pööra, võib mõni pekstud tekstifail minna Amazoni, tegelikku infrastruktuuri.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Teise võimalusena saate täitmise ajal määrata mitte kogu infrastruktuuri, vaid ainult malli. Ja koodis öelge: "Palun kuvage see mall minu jaoks." Selle tulemusena saate väljatrüki sellest, kuidas teie andmed Amazonis välja näevad.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Teine võimalus on kasutada kasutajaandmete genereerimiseks moodulit. Rakendate seda moodulit. Hankige fail kettale. Võrrelge seda viitega. Ja seega, kui mõni juuni otsustab natukene kasutajaandmeid parandada, ütlevad teie testid: "OK, siin ja seal on muudatusi - see on normaalne."

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Järgmine asi, millest tahaksin rääkida, on Terraformi automatiseerimine.

Muidugi on Terraformi automaatrežiimis rakendamine piisavalt hirmutav, sest kes teab, millised muutused seal on toimunud ja kui kahjulikud need elavale infrastruktuurile võivad olla.

Testkeskkonna jaoks on see kõik korras. See tähendab, et töö, mis loob testkeskkonna, on see, mida kõik arendajad vajavad. Ja selline väljend nagu "minu jaoks kõik töötas" ei ole naljakas meem, vaid tõend selle kohta, et inimene läks segadusse, tõstis stäkki, käivitas sellel virnal mõned testid. Ja ta veendus, et seal on kõik korras, ja ütles: "OK, kood, mille ma välja andsin, on testitud."

Tootmises, liivakastis ja muudes ärikriitilisemates keskkondades on teatud ressursside osaline kasutamine ohutu, sest see ei põhjusta kellegi surma. Need on: autoscale group, turvagrupid, rollid, route53 ja seal võib nimekiri päris suur olla. Kuid hoidke toimuval silm peal, lugege automatiseeritud rakenduste aruandeid.

Kui see on ohtlik või hirmutav kasutada, näiteks kui need on püsivad ressursid, siis andmebaasist saada teateid, et mõnes infrastruktuuriosas on rakendamata muudatusi. Ja insener on juba juhendanud töid, mida saab taotleda või teeb seda oma konsoolilt.

Amazonil on selline asi nagu Katkesta kaitse. Ja see võib mõnel juhul kaitsta teie jaoks mittevajalike muudatuste eest. Nii läks Terraform Amazoni ja ütleb: "Ma pean selle eksemplari tapma, et teha uus". Ja Amazon ütleb: "Vabandust, mitte täna. Meil on kaitse lõpetamine.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Ja kirsiks tordil on koodi optimeerimine. Terraformi koodiga töötades peame moodulile edastama väga suure hulga parameetreid. Need on parameetrid, mis on vajalikud mingi ressursi loomiseks. Ja kood muutub suurteks parameetrite loenditeks, mida tuleb moodulilt moodulile, moodulilt moodulile edastada, eriti kui moodulid on pesastatud.

Ja seda on väga raske lugeda. Seda on väga raske üle vaadata. Ja väga sageli selgub, et mingid parameetrid vaadatakse üle ja need pole päris need, mida vaja on. Ja selle hilisem parandamine nõuab aega ja raha.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Seetõttu soovitan teil sellist asja kasutada kompleksparameetrina, mis sisaldab teatud väärtuste puud. See tähendab, et teil on vaja mingit kausta, kus teil on kõik väärtused, mida soovite mingis keskkonnas.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Ja seda moodulit kutsudes saate puu, mis genereeritakse ühes ühises moodulis, see tähendab ühises moodulis, mis töötab samamoodi kogu infrastruktuuri jaoks.

Selles moodulis saate teha mõningaid arvutusi, kasutades Terraformi värsket funktsiooni nagu kohalikud. Ja siis ühes väljundis väljasta mingi kompleksne parameeter, mis võib sisaldada räsi, massiive jne.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Sellega kõik parimad leiud, mille olen lõpetanud. Ja ma tahaksin rääkida loo Kolumbusest. Kui ta otsis raha oma India avastamise ekspeditsiooni jaoks (nagu ta siis arvas), ei uskunud keegi teda ja uskus, et see on võimatu. Siis ta ütles: "Vaadake, et muna ei kukuks." Kõik pankurid, väga rikkad ja ilmselt targad inimesed, üritasid kuidagi muna panna ja see kukkus kogu aeg. Siis võttis Kolumbus muna, vajutas seda veidi. Koor krimpsus ja muna jäi liikumatuks. Nad ütlesid: "Oh, see on liiga lihtne!" Ja Columbus vastas: "Jah, see on liiga lihtne. Ja kui ma India avan, kasutavad kõik seda kaubateed.

Ja see, mida ma teile just rääkisin, on ilmselt üsna lihtsad ja triviaalsed asjad. Ja kui neid tundma õppida ja neid kasutama hakata, on see asjade järjekorras. Nii et kasutage seda. Ja kui need on teie jaoks üsna tavalised asjad, siis vähemalt teate, kuidas muna panna nii, et see ei kukuks.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

Kokkuvõtteks:

  • Püüdke vältida lumehelbeid. Ja mida vähem lumehelbeid, seda vähem ressursse vajate kogu oma suures infrastruktuuris muudatuste tegemiseks.
  • Pidev muutus. See tähendab, et kui koodis on toimunud muudatusi, peate oma infrastruktuuri võimalikult kiiresti nende muudatustega kooskõlla viima. Ei tohiks tekkida olukorda, kui keegi tuleb kahe-kolme kuu pärast Elasticsearchi vaatama, teeb Terraformi plaani ja seal on palju muudatusi, mida ta ei oodanud. Ja selle taastamiseks kulub palju aega.
  • Testid ja automatiseerimine. Mida rohkem on teie kood testide ja kiipidega kaetud, seda rohkem on teil kindlustunnet, et teete kõike õigesti. Ja automaatne kohaletoimetamine suurendab teie enesekindlust mitu korda.
  • Testimis- ja tootmiskeskkonna kood peaks olema peaaegu sama. Praktiliselt, sest lõppude lõpuks on tootmine veidi teistsugune ja mingid nüansid jäävad ikka alles, mis testkeskkonnast kaugemale ulatuvad. Kuid sellegipoolest saab seda pakkuda pluss-miinus.
  • Ja kui teil on palju Terraformi koodi ja selle ajakohasena hoidmine võtab palju aega, siis pole kunagi liiga hilja seda ümber kujundada ja heasse vormi viia.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

  • muutumatu infrastruktuur. AMI kohaletoimetamine graafiku alusel.
  • Marsruudi 53 struktuur, kui teil on palju kirjeid ja soovite, et need oleksid ühtses järjekorras.
  • Võitlus API määrade piirangute vastu. See on siis, kui Amazon ütleb: "See on kõik, ma ei saa enam taotlusi vastu võtta, palun oodake." Ja pool kontorist ootab, kuni saab oma infrastruktuuri käivitada.
  • kohapealsed juhtumid. Amazon pole odav üritus ja spotid võimaldavad säästa päris palju. Ja seal saate sellest terve aruande rääkida.
  • Turvalisuse ja IAM-i rollid.
  • Otsige kadunud ressursse, kui teil on Amazones tundmatu päritoluga juhtumeid, söövad nad raha. Isegi kui eksemplarid maksavad 100–150 dollarit kuus, on see rohkem kui 1 dollarit aastas. Selliste ressursside leidmine on tulus äri.
  • Ja reserveeritud juhtumid.

Terraformi mustrid kaose ja käsitsi rutiini vastu võitlemiseks. Maxim Kostrikin (Ixtens)

See on minu jaoks kõik. Terraform on väga lahe, kasutage seda. Aitäh!

küsimused

Täname raporti eest! Teil on S3-s olekufail, kuid kuidas lahendada probleem, et mitu inimest saavad selle olekufaili võtta ja proovida juurutada?

Esiteks ei ole meil kiiret. Teiseks on lipud, milles teatame, et töötame mingi koodijupi kallal. See tähendab, et hoolimata sellest, et infrastruktuur on väga suur, ei tähenda see, et keegi midagi pidevalt kasutab. Ja kui oli aktiivne faas, oli see probleem, hoidsime olekufaile Gitis. See oli oluline, muidu tegi keegi olekufaili ja edasi jätkamiseks pidime need käsitsi hunnikusse koguma. Nüüd enam sellist probleemi pole. Üldiselt lahendas Terraform selle probleemi. Ja kui midagi pidevalt muutub, siis võite kasutada lukke, mis takistavad teie öeldut.

Kas kasutate avatud lähtekoodiga või ettevõtet?

Ei mingit ettevõtet, see tähendab kõike, mida saate tasuta alla laadida.

Minu nimi on Stanislav. Tahtsin teha väikese täienduse. Rääkisite Amazoni funktsioonist, mis võimaldab teil muuta eksemplari tapmatuks. See on ka Terraformis endas, Life Second plokis saab ette kirjutada muutmise keelu või hävitamise keelu.

Oli ajaliselt piiratud. Hea tähelepanek.

Tahtsin ka kahte asja küsida. Esiteks rääkisite testimisest. Kas olete testimisvahendeid kasutanud? Kuulsin pistikprogrammist Test Kitchen. Võib-olla on midagi muud. Ja ma tahaksin küsida kohalike väärtuste kohta. Kuidas need põhimõtteliselt erinevad sisendmuutujatest? Ja miks ma ei saa midagi parametriseerida ainult kohalike väärtuste kaudu? Üritasin selle teemaga tegeleda, aga millegipärast ei tulnud see ise ka välja.

Selle saali taga saame täpsemalt rääkida. Testimisvahendid on täielikult meie enda valmistatud. Seal pole midagi testida. Üldiselt on valikud, kui automaattestid tõstavad taristu kuhugi üles, kontrollivad, kas see on korras, ja siis hävitab kõik koos raportiga, et teie infrastruktuur on endiselt korras. Meil seda ei ole, sest testvirnad töötavad iga päev. Ja sellest piisab. Ja kui miski hakkab katki minema, siis see hakkab ka purunema, ilma et me seda kuskil mujal kontrolliks.

Kohalike väärtuste kohta jätkame vestlust väljaspool publikut.

Tere! Täname raporti eest! Väga informatiivne. Ütlesite, et teil on infrastruktuuri kirjeldamiseks palju sama tüüpi koodi. Kas olete mõelnud selle koodi genereerimisele?

Suurepärane küsimus, aitäh! Asi on selles, et kui kasutame infrastruktuuri koodina, eeldame, et vaatame koodi ja mõistame, milline infrastruktuur selle koodi taga peitub. Kui kood genereeritakse, siis peame ette kujutama, milline kood genereeritakse, et mõista, milline infrastruktuur seal on. Või genereerime koodi, sisestame selle ja tegelikult saame sama asja. Seetõttu läksime nii, nagu kirjutasime, saime. Lisaks tekkisid generaatorid veidi hiljem, kui hakkasime tegema. Ja muutusteks oli juba hilja.

Kas olete kuulnud jsonnetist?

Ei.

Vaata, see on tõesti lahe värk. Näen konkreetset juhtumit, kus saate seda rakendada ja andmestruktuuri genereerida.

Generaatorid on head, kui need on olemas, nagu habemeajamismasinateemalises naljas. See tähendab, et esimene kord on nägu erinev, aga siis on kõigil sama nägu. Generaatorid on väga lahedad. Kuid kahjuks on meie näod veidi erinevad. See on probleem.

Lihtsalt vaata. Aitäh!

Minu nimi on Maxim, ma olen Sberbankist. Ütlesite veidi, et proovisite Terraformi tuua programmeerimiskeele analoogiks. Kas pole Ansible'i lihtsam kasutada?

Need on väga erinevad asjad. Ansible saab luua ressursse ja Puppet saab luua ressursse Amazonis. Kuid Terraform on otse teritatud.

Kas teil on ainult Amazon?

Asi pole selles, et meil on ainult Amazon. Meil on peaaegu ainult Amazon. Kuid peamine omadus on see, et Terraform mäletab. Kui Ansible'is ütlete: "Pick me up 5 instances", siis see tõstab ja siis ütlete: "Ja nüüd on mul vaja 3". Ja Terraform ütleb: "Ok, ma tapan 2" ja Ansible ütleb: "Ok, siin on teile 3." Kokku 8.

Tere! Täname aruande eest! Väga huvitav oli kuulda Terraformist. Ma tahan lihtsalt teha väikese kommentaari selle kohta, et Terraformil pole endiselt stabiilset väljalaset, seega olge Terraformiga väga ettevaatlik.

Hea lusikas õhtusöögiks. Ehk kui vajad lahendust, siis lükkad vahel ebastabiilset vms edasi, aga see toimib ja aitas meid.

Küsimus on selles. Kasutate kaugtaustaprogrammi, kasutate S 3. Miks te ei kasuta ametlikku taustaprogrammi?

Ametlik?

Terraformi pilv.

Millal ta ilmus?

4 kuud tagasi.

Kui see oleks ilmunud 4 aastat tagasi, oleksin tõenäoliselt teie küsimusele vastanud.

Seal on juba sisseehitatud funktsioon ja lukud ning saate salvestada olekufaili. Proovi seda. Aga ma pole ka testinud.

Oleme suures rongis, mis liigub suurel kiirusel. Ja te ei saa lihtsalt võtta ja välja visata mõnda autot.

Sa rääkisid lumehelvestest, miks sa oksa ei kasutanud? Miks see nii ei läinud?

Meil on selline lähenemine, et kogu infrastruktuur on ühes hoidlas. Terraform, Puppet, kõik skriptid, mis sellega kuidagi seotud on, on kõik ühes hoidlas. Nii saame tagada, et järkjärgulisi muudatusi testitakse ükshaaval. Kui see oleks hunnik oksi, oleks sellist projekti peaaegu võimatu ülal pidada. Möödub kuus kuud ja need lähevad nii palju lahku, et see on lihtsalt mingisugune karistus. See on see, mille eest tahtsin enne ümberkujundamist põgeneda.

st see ei tööta?

See ei tööta üldse.

Harus lõikasin kausta slaidi välja. See tähendab, et kui teete iga testpinu jaoks, näiteks meeskonnal A on oma issi, meeskonnal B on oma issi, siis ka see ei tööta. Tegime ühtse testkeskkonna koodi, mis oli piisavalt paindlik, et sobida kõigile. See tähendab, et me edastasime ühe koodi.

Tere! Minu nimi on Yura! Täname raporti eest! Küsimus moodulite kohta. Ütlete, et kasutate mooduleid. Kuidas lahendate probleemi, kui ühes moodulis tehti muudatusi, mis ei ühildu teise inimese vahetusega? Kuidas moodulite versioonimine või katse tuua imelaps kahele nõudele vastama?

See on suure lumehunniku probleem. Seda me kannatame, kui mõni kahjutu muudatus võib mõne infrastruktuuri osa lõhkuda. Ja see on märgatav alles mõne aja pärast.

See tähendab, et seda pole veel otsustatud?

Teete universaalseid mooduleid. Vältige lumehelbeid. Ja kõik saab korda. Aruande teine ​​pool räägib sellest, kuidas seda vältida.

Tere! Täname raporti eest! Tahaksin täpsustada. Kulisside taga oli suur hunnik, mille pärast ma tulin. Kuidas on Nukk ja rollijaotus integreeritud?

kasutaja andmed.

See tähendab, kas te sülitate faili lihtsalt välja ja käivitate selle kuidagi?

User-data on märkus, st kui teeme pildi klooni, siis Daemon tõuseb sinna ja üritab aru saada, kes ta on, loeb märkuse, et ta on koormuse tasakaalustaja.

See tähendab, kas see on mingi eraldiseisev protsess, mis antakse ära?

Me ei mõelnud seda välja. Me kasutame seda.

Tere! Mul on lihtsalt küsimus kasutaja andmete kohta. Ütlesid, et seal on probleeme, et keegi võib midagi valesse kohta saata. Kas on mingi võimalus salvestada kasutajaandmeid samasse Giti, et oleks alati selge, millele kasutajaandmed viitavad?

Loome mallist kasutajaandmeid. See tähendab, et seal kasutab teatud arv muutujaid. Ja Terraform genereerib lõpptulemuse. Seetõttu ei saa te lihtsalt malli vaadata ja öelda, mis juhtub, sest kõik probleemid on seotud sellega, et arendaja arvab, et ta edastab selles muutujas stringi ja seejärel kasutatakse massiivi. Ja tema – pauk ja mina – nii ja naa, nii ja naa, järgmine rida ja kõik läks katki. Kui see on uus ressurss ja inimene tõstab selle üles, näeb, et midagi ei tööta, siis on see kiiresti lahendatud. Ja kui seda automaatskaala gruppi on uuendatud, siis mingil hetkel hakatakse automaatskaala rühma eksemplare asendama. Ja plaksutage, midagi ei tööta. See valutab.

Selgub, et ainus lahendus on testida?

Jah, näete probleemi, lisate sinna testietapid. See tähendab, et väljundit saab ka testida. Võib-olla mitte nii mugav, kuid võite ka märgistada - kontrollige, kas kasutajaandmed on siia löödud.

Minu nimi on Timur. Väga lahe, et on aruandeid selle kohta, kuidas Terraformi õigesti korraldada.

Ma isegi ei hakanud.

Arvan, et järgmisel konverentsil ehk tuleb. Mul on lihtne küsimus. Miks te kõvasti kodeerite väärtuse eraldi moodulis, mitte ei kasuta tfvarsi, st kas moodul, mille väärtused on paremad kui tfvars?

See tähendab, et ma peaksin siia kirjutama (slaid: Production/environment/settings.tf): domeen = muutuja, domeen vpcnetwork, vpcnetwork muutuja ja stvars – kas saate sama asja?

Me teeme täpselt seda. Viitame näiteks seadistusallika moodulile.

Tegelikult on see selline tfvars. Tfvars on testimiskeskkonnas väga mugav. Mul on tfvarid suurte eksemplaride jaoks, väikeste jaoks. Ja ühe faili viskasin kausta. Ja sain, mida tahtsin. Kui nägime infrastruktuuri, tahame kõike näha ja kohe aru saada. Ja nii selgub, et peate vaatama siit, seejärel vaadake tfvarsi.

Tuleb välja, et kõik oli ühes kohas?

Jah, tfvars on siis, kui teil on üks kood. Ja seda kasutatakse mitmes erinevas kohas erinevate nüanssidega. Siis viskaksid tfvarid ja saaksid oma nüansid kätte. Ja me oleme infrastruktuur kui kood selle puhtaimal kujul. Vaatas ja sai aru.

Tere! Kas olete kohanud olukordi, kus pilveteenuse pakkuja sekkub teie Terraformiga tehtusse? Oletame, et muudame metaandmeid. Seal on ssh võtmed. Ja Google libistab pidevalt oma metaandmeid, võtmeid sinna. Ja Terraform kirjutab alati, et tal on muudatusi. Pärast iga jooksu, isegi kui midagi ei muutu, ütleb ta alati, et uuendab seda välja nüüd.

Võtmetega, aga - jah, osa infrastruktuurist on sellisest asjast mõjutatud ehk Terraform ei saa midagi muuta. Ka kätega ei saa me midagi muuta. Kuni me sellega elame.

See tähendab, et puutusite sellega kokku, kuid ei tulnud midagi välja, kuidas ta seda teeb ja teeb seda ise?

Kahjuks jah.

Tere! Minu nimi on Stanislav Starkov. Mail. et Rühm. Kuidas lahendate sildi loomise probleemi saidil ..., kuidas seda sees edasi anda? Nagu ma aru saan, siis kasutaja andmete kaudu hostinime täpsustamiseks õhutada Nukk? Ja küsimuse teine ​​osa. Kuidas seda probleemi SG-s lahendada, st kui genereerite SG-d, sada sama tüüpi eksemplari, kuidas neid õigesti nimetada?

Need juhtumid, mis on meile väga olulised, nimetame need ilusasti. Need, mida pole vaja, on järelsõna, et see on automaatskaala rühm. Ja teoreetiliselt saab selle naelutada ja uue hankida.

Mis puudutab sildi probleemi, siis seda probleemi pole, küll aga on selline ülesanne. Ja me kasutame silte väga-väga palju, sest infrastruktuur on suur ja kallis. Ja me peame vaatama, millele raha kulutatakse, nii et sildid võimaldavad meil välja selgitada, mis ja kuhu see läks. Ja vastavalt sellele kulutatakse siin millegi otsimiseks palju raha.

Millest veel küsimus oli?

Kui SG loob sada eksemplari, siis kas neid tuleb kuidagi eristada?

Ei, ära tee. Igal juhtumil on agent, kes ütleb mulle, et mul on probleem. Kui agent teatab, siis agent teab temast ja vähemalt tema IP-aadress on olemas. Joosta saab juba. Teiseks kasutame Consul for Discovery, kus pole Kubernetes. Ja Consul näitab ka eksemplari IP-aadressi.

See tähendab, et sihite täpselt IP-d, mitte hostinime?

Hostinime järgi on võimatu navigeerida, st neid on palju. Seal on eksemplari identifikaatorid - AE jne. Kuskilt leiate selle, võite selle otsingusse visata.

Tere! Sain aru, et Terraform on hea asi, mis on kohandatud pilvedele.

Mitte ainult.

See on küsimus, mis mind huvitab. Kui otsustate kolida näiteks massiliselt kõigi oma instantsidega Bare Metalli? Kas tekib probleeme? Või peab ikka kasutama muid tooteid, näiteks sedasama Ansiblet, millest siin juttu oli?

Ansible räägib natuke millestki muust. See tähendab, et Ansible juba töötab, kui eksemplar on käivitunud. Ja Terraform töötab enne eksemplari käivitamist. Bare Metalile üleminek ei ole.

Mitte praegu, aga äri tuleb ja ütleb: "Tule nüüd."

Teisele pilvele üleminek - jah, kuid siin on veidi erinev funktsioon. Peate kirjutama Terraformi koodi nii, et saaksite lülituda mõnele teisele pilvedele, kus on vähem verd.

Esialgu oli ülesanne, et kogu meie infrastruktuur on agnostiline ehk iga pilv peaks korras olema, aga mingil hetkel äri andis alla ja ütles: “OK, järgmise N aasta jooksul ei lähe me kuhugi, teenuseid saab kasutada alates Amazon".

Terraform võimaldab teil luua esiotsa töid, konfigureerida PagerDuty, andmedokumente jne. Sellel on palju sabasid. Ta suudab praktiliselt kontrollida kogu maailma.

Täname raporti eest! Terraformi olen ka ketranud juba 4 aastat. Sujuva ülemineku etapil Terraformile, infrastruktuurile, deklaratiivsele kirjeldusele seisime silmitsi olukorraga, kus keegi tegi midagi käsitsi ja sina üritasid plaani teha. Ja mul on seal mingi viga. Kuidas te selliste probleemidega toime tulete? Kuidas leiate märgitud kadunud ressursid?

Enamasti käte ja silmadega, kui raportis midagi imelikku näeme, siis analüüsime seal toimuvat või tapame lihtsalt ära. Üldiselt on tõmbamistaotlused tavaline asi.

Kui on viga, kas tagasiteed? Kas olete proovinud seda teha?

Ei, see on inimese otsus hetkel, kui ta probleemi näeb.

Allikas: www.habr.com