{"id":98123,"date":"2020-10-24T14:42:52","date_gmt":"2020-10-24T12:42:52","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/patterny-v-terraform-dlya-borby-s-haosom-i-ruchnoj-rutinoj-maksim-kostrikin-ixtens"},"modified":"2020-11-18T00:58:49","modified_gmt":"2020-11-17T22:58:49","slug":"patterny-v-terraform-dlya-borby-s-haosom-i-ruchnoj-rutinoj-maksim-kostrikin-ixtens","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/patterny-v-terraform-dlya-borby-s-haosom-i-ruchnoj-rutinoj-maksim-kostrikin-ixtens","title":{"rendered":"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/ec13125c702f42863bbe774cd805442b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tundub, et Terraformi arendajad pakuvad piisavalt mugavaid parimaid praktikaid AWS-infrastruktuuriga t\u00f6\u00f6tamiseks. Ainult et on n\u00fcanss. Aja jooksul suureneb keskkondade arv, igas neist on omad erip\u00e4rad. Peaaegu koopia rakenduste virnast naaberriigis. Ja Terraformi kood tuleb ettevaatlikult kopeerida ja muuta vastavalt uutele n\u00f5udmistele v\u00f5i luua lumehelves.<\/p>\n<p><\/p>\n<p>Minu ettekande teema on mustrid Terraformis, et v\u00f5idelda kaose ja k\u00e4sitsi rutiiniga suurtes ja pikaajalistes projektides.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Video:<\/p>\n<p>\n<center><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/5f92845c017bf613f0899d88\" frameborder=\"0\" allowfullscreen><\/iframe><\/center><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/8c67c45e486d6c03793dd08c33a16313.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mul on 40 aastat, olen IT-s olnud 20 aastat. 12 aastat t\u00f6\u00f6tan ettev\u00f5ttes Ixtens. Me tegeleme ecommerce-driven-development'iga. Ja 5 aastat praktiseerin DevOps-praktikaid.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/8b14b3adaa45d69278d76580baa99042.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Minu jutt tuleb olema kogemusest projektis ettev\u00f5ttes, mille nime ma ei nimeta, kuna olen allkirjastanud mitteavaldamise kokkuleppe. <\/p>\n<p><\/p>\n<p>Numbrid slaidil on esitatud selleks, et m\u00f5ista projekti ulatust. Ja k\u00f5ik, mida ma edaspidi r\u00e4\u00e4gin, on seotud Amazoniga.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/3742217a2abaf1fcf2163979d82eac14.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Liitusin selle projektiga 4 aastat tagasi. Ja sama ajal toimus infrastruktuuri refaktoreerimine, kuna projekt oli kasvanud. Ja need mustrid, mida kasutati, polnud enam sobivad. Arvestades kogu projekti planeeritud kasvu, pidi midagi uut v\u00e4lja m\u00f5tlema. <\/p>\n<p><\/p>\n<p>Ait\u00e4h Matveile, kes r\u00e4\u00e4kis eile, mis Dodo Pitsas toimus. See on see, mis meil 4 aastat tagasi juhtus. <\/p>\n<p><\/p>\n<p>Tulid arendajad ja hakkasid kirjutama infrastruktuuri koodi. <\/p>\n<p><\/p>\n<p>K\u00f5ige ilmsed p\u00f5hjused, miks see vajalik oli, olid turule toomise aeg. Pidi olema nii, et DevOps meeskond ei olnud kitsas koht v\u00e4ljalaskmisel. Ja lisaks k\u00f5igele muule kasutati esimesel tasemel Terraformi ja Puppetit.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/13d6df6a324d2e1162acef77ca2ad0dc.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Terraform on HashiCorpi avatud l\u00e4htekoodiga projekt. Ja nende jaoks, kes \u00fcldse ei tea, mis see on, j\u00e4rgmised slaidid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/61726d4205d1f4f8e449fe9d71507508.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Infrastruktuur kui kood t\u00e4hendab, et saame oma infrastruktuuri kirjeldada ja paluda mingitel robotitel luua need ressursid, mida oleme kirjeldanud.<\/p>\n<p><\/p>\n<p>N\u00e4iteks vajame <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/et\/vps\/abuzoustojchivye-vps\/\"   title=\"virtuiaalmasin\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"4196\">virtuiaalmasin<\/a>. Me kirjeldame, lisame m\u00f5ned kohustuslikud parameetrid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/eb52c1e458fa092bba8577fffceb864c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00e4rast seda seadistame konsoolis juurdep\u00e4\u00e4su Amazonile. Ja palume Terraformil plaani. Terraform plan \u00fctleb: \"Olen, teie ressursile saame teha j\u00e4rgmised asjad\". Ja v\u00e4hemalt \u00fcks ressurss lisatakse. Ja mingeid muutusi ei oodata. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/879e645596121ee5d05ac247b4be19ee.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui k\u00f5ik sobib, saate paluda Terraformil rakendada ja Terraform loob teile instantsi, ja saate oma pilves virtuaalse masina.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/77b7fe4d6abcc9116233f48caa887465.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Edasi l\u00e4heb meie projekt edasi. Me lisame sinna muudatusi. Me palume rohkem instantsi, lisame 53 kirje.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/98ce7e1f9d1f85aa5e78c269a0708ac1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja kordame. Palume plaani. N\u00e4eme, millised muudatused on planeeritud. Rakendame. Nii kasvab meie infrastruktuur. <\/p>\n<p><\/p>\n<p>Terraform kasutab sellist asja nagu olekufailid. See t\u00e4hendab, et k\u00f5ik muudatused, mis l\u00e4hevad Amazonisse, salvestatakse faili, kus iga ressurssi, mille olete kirjeldanud, vastavad ressursid, mis on Amazonis loodud. Nii teab Terraform t\u00e4pselt, mida muuta Amazonis, kui ressursi kirjeldust muudetakse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/6e83efffb7af6ab967b4716be170b47b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Need olekufailid olid algselt lihtsalt failid. Ja me hoidsime neid Git'is, mis oli \u00e4\u00e4rmiselt ebamugav. Alati, kui keegi unustas muudatused komiteerida, tekkis palju konflikte. <\/p>\n<p><\/p>\n<p>N\u00fc\u00fcd on v\u00f5imalik kasutada backend'i, see t\u00e4hendab, et Terraform'ile tehakse ettepanek, millisesse bucket'isse ja mille v\u00f5tme alla tuleb olekufail salvestada. Ja Terraform hoolitseb selle eest, et tuua see olekufail, teha kogu maagia ja panna l\u00f5puks tulemus tagasi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/e6687463a9fe3cff979f44ac7778b4e8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Meie infrastruktuur kasvab. Siin on meie kood. Ja me ei soovi enam lihtsalt virtuaalmasinat luua, me tahame, et oleks testimine keskkond.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/0effb09fa04d3d520c1cdbb34ce97810.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Terraform v\u00f5imaldab luua sellise asja nagu moodul, see t\u00e4hendab, et sama asja saab kirjeldada mingis kaustas.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/95c8395b10142fe550b0719161211f15.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja n\u00e4iteks testimisel kutsuda seda moodulit ja saada sama, nagu oleksime k\u00e4itunud Terraform apply moodulis enda sees. Testimiseks oleks selline kood.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/fa4c16e3835a4507a858d2ddb767daf3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tootmises v\u00f5ime saata sinna teatud muudatusi, sest testimisel ei ole meil suuri instantsse vaja, tootmises on suured instantsid just vajalikud.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/19478de23da2278567e66bacef78a0a9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja edasi tagasi projekti. Oli keeruline \u00fclesanne, infrastruktuur kavandati v\u00e4ga suureks. Ja oli vajalik kuidagi paigutada kogu kood, et see oleks mugav k\u00f5igile: nii neile, kes hoolitsevad selle koodi eest, kui ka neile, kes muudatusi teevad. Ja kavandati, et iga arendaja v\u00f5iks minna ja muuta infrastruktuuri nii, nagu on vajalik tema platvormi osa jaoks. <\/p>\n<p><\/p>\n<p>See on kataloogipuu, mida soovitab HashiCorp ise, kui teil on suur projekt ja on m\u00f5istlik jagada kogu infrastruktuur v\u00e4iksemateks t\u00fckkideks ning iga t\u00fckk kirjeldada eraldi kaustas. <\/p>\n<p><\/p>\n<p>Olles laia ressursside raamatukoguga, saab testimisel ja tootmises kutsuda umbes sama asja. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/c30cdc3d3ce5441bc0ae4a485069dacc.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Meie puhul ei sobinud see p\u00e4ris nii, kuna arendajatele v\u00f5i testimiseks m\u00f5eldud testihunnikud pidid olema kergemini k\u00e4ttesaadavad. Ei tahtnud ju ringi kaevata kaustades ja rakendada \u00f5igetes j\u00e4rjestustes ning muretseda selle p\u00e4rast, et andmebaas k\u00e4ivitub ja siis k\u00e4ivitub selle andmebaasi kasutav instants. Seet\u00f5ttu k\u00e4ivitati kogu testimine \u00fchest kaustast. Seal kutsuti v\u00e4lja samad moodulid, kuid k\u00f5ik toimus \u00fche k\u00e4igu jooksul.<\/p>\n<p><\/p>\n<p>Terraform hoolitseb k\u00f5igi s\u00f5ltuvuste eest. Ja loob alati ressursid sellises j\u00e4rjekorras, et n\u00e4iteks v\u00e4rskelt loodud instantsilt oleks v\u00f5imalik saada IP-aadress ja see IP-aadress saada route53 kirja. <\/p>\n<p><\/p>\n<p>Lisaks sellele on platvorm v\u00e4ga suur. Ja testihunniku k\u00e4ivitamine, isegi kui vaid \u00fcheks tunniks, isegi kui 8 tunniks \u2013 see on \u00fcsna kulukas. <\/p>\n<p><\/p>\n<p>Ja me automatiseerisime selle protsessi. Jenkins'i t\u00f6\u00f6 v\u00f5imaldas hunniku k\u00e4ivitada. Seal pidi k\u00e4ivitama pull request'i koos muudatustega, mida arendaja soovis testida, m\u00e4\u00e4rama k\u00f5ik vajalikud valikud, komponendid ja ka suurused. Kui ta soovis sooritustestimist, siis ta v\u00f5is kasutada rohkem instante. Kui ta lihtsalt soovis kontrollida, kas m\u00f5ni vorm avaneb, siis v\u00f5is ta k\u00e4ivitada v\u00e4ikestes kogustes. Samuti sai m\u00e4\u00e4rata, kas klaster on vajalik v\u00f5i mitte jne. <\/p>\n<p><\/p>\n<p>Ja seej\u00e4rel t\u00f5ukas Jenkins shell-skripti, mis veidi muutis koodi Terraform kaustas. Eemaldati mittevajalikud failid, lisati vajalikud failid. Ja seej\u00e4rel \u00fche k\u00e4igutusega Terraform apply k\u00e4ivitus hunnik. <\/p>\n<p><\/p>\n<p>Ja siis j\u00e4rgnesid muud sammud, millesse ma ei taha s\u00fcveneda. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/b288c0b320d8cb6e282db994bc1c1f43.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuna testimiseks vajasime veidi rohkem valikuid kui tootmises, pidime moodulite koopiaid tegema, et neis koopiaides oleks v\u00f5imalik lisada funktsioone, mis on vajalikud ainult testimiseks. <\/p>\n<p><\/p>\n<p>Nii juhtus, et testimisel sooviti testida neid muudatusi, mis l\u00f5puks l\u00e4hevad tootmisse. Kuid tegelikult testiti \u00fcht, samas kui tootmises rakendati pisut muud. Ja tekkis v\u00e4ikene l\u00f5he olukorras, et tootmises rakendati k\u00f5ik muudatused opereerimise meeskonna poolt. Ja m\u00f5nikord juhtus nii, et need muudatused, mis pidid testimisest tootmisse minema, j\u00e4id teise versiooni. <\/p>\n<p><\/p>\n<p>Sellega seondub veel probleem, et lisandus uus teenus, mis erines veidi m\u00f5nest juba olemas olevast. Ja selle asemel, et olemasolevat moodulit kohandada, tuli teha selle koopia ja lisada vajalikud muudatused. <\/p>\n<p><\/p>\n<p>Sisuliselt ei ole Terraform t\u00f5eline keel. See on deklaratsioon. Kui meil on midagi deklareerimiseks vaja, siis me deklareerime selle. Ja k\u00f5ik see t\u00f6\u00f6tab.<\/p>\n<p><\/p>\n<p>\u00dchel hetkel, kui arutati \u00fchte minu pull-requesti, \u00fctles \u00fcks kolleeg, et ei peaks lund tootma. Huvitav, mida ta silmas pidas. On olemas teaduslik fakt, et maailmas ei ole kaks identset lumevalget, nad k\u00f5ik erinevad veidi. Ja kui ma seda kuulsin, tundsin ma kohe kogu Terraform-koodi raskust. Sest kui tuli minna versioonilt versioonile, n\u00f5udis Terraform breaking chain muutusi, st. kood ei olnud uue versiooniga enam \u00fchilduv. Ja tuli teha pull-request, mis katab peaaegu poole infrastruktuuri failidest, et viia infrastruktuur j\u00e4rgmise Terraform versioonini.<\/p>\n<p><\/p>\n<p>Ja p\u00e4rast seda, kui selline lumi tekkis, muutus kogu meie Terraform-kood suureks lumem\u00e4eks. <\/p>\n<p><\/p>\n<p>V\u00e4list arendaja jaoks, kes ei ole operatsioonis, ei ole sellega suurt t\u00e4htsust, sest ta tegi pull-requesti, tema ressurss k\u00e4ivitus. Ja k\u00f5ik, edaspidi ei ole see tema mure. Kui aga DevOps meeskonnale, kes j\u00e4lgib, et k\u00f5ik oleks OK, tuleb teha k\u00f5ik need muudatused. Ja nende muudatuste hind t\u00f5usis iga t\u00e4iendava lumehelbega v\u00e4ga-v\u00e4ga palju.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/d07039414027798861d1424bb2c686b6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>On olemas lugu sellest, kuidas \u00fcli\u00f5pilane seminari ajal kannab kriidiga tahvlile kaks ideaalset ringi. Ja \u00f5petaja imestab, kuidas tal \u00f5nnestus ilma kompassita nii \u00fchtlaselt joonistada. \u00dcli\u00f5pilane vastab: \"V\u00e4ga lihtsalt, ma keerutasin kaks aastat armees lihaveskit.\" <\/p>\n<p><\/p>\n<p>Ja nendest neljast aastast, mil ma olen selles projektis osalenud, olen ma umbes kaks aastat tegelenud Terraformiga. Ja muidugi on mul m\u00f5ned nipid, m\u00f5ned n\u00f5uanded, kuidas Terraform-koodi lihtsustada, sellega nagu programmeerimiskeelega t\u00f6\u00f6tada ja v\u00e4hendada koormust arendajatele, kes peavad seda koodi ajakohasena hoidma. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/9413c6adf1933482dcc822b021773df9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Esimene asi, millega soovin alustada, on Symlinks. Terraformil on palju korduvat koodi. N\u00e4iteks kasutatakse pakkujat praktiliselt igas kohas, kus me loome infrastruktuuri osa, sama. Ja on m\u00f5istlik viia see eraldi kausta. Ja igal pool, kus pakkujat on vaja, luua Symlinks sellele failile. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/6dcf36cc8c94e7a70cf6ab1456cc1215.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00e4iteks, kui teil on tootmises kasutada assume role, mis v\u00f5imaldab teil saada juurdep\u00e4\u00e4su mingile v\u00e4lishaava Amazon-kontole. Ja muutes \u00fchte faili, saavad k\u00f5ik \u00fclej\u00e4\u00e4nud, mis on ressursipuus, vajalikud \u00f5igused, et Terraform teaks, millise Amazon-segmendi poole p\u00f6\u00f6rduda. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/6df9a89ef48ae9a7adda7fb1f86b76aa.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kus Symlinks ei t\u00f6\u00f6ta? Nagu \u00f6eldud, on Terraformil state-failid. Ja need on v\u00e4ga-v\u00e4ga \u00e4gedad. Kuid probleem on selles, et Terraform initsialiseerib backend esimesena. Ja ta ei saa nende parameetrites kasutada mingeid muutujaid, need tuleb alati kirjutada tekstina. <\/p>\n<p><\/p>\n<p>Ja tulemuseks on see, et kui keegi loob uue ressursi, kopeerib ta osa koodist teistest kaustadest. Ja ta v\u00f5ib eksida v\u00f5tme v\u00f5i bucket'i osas. N\u00e4iteks, kui ta teeb sandboxist sandbox-asi ja siis loob tootmises. Ja v\u00f5ib juhtuda, et tootmise bucket'i kasutatakse sandboxist. Muidugi, seda leitakse kiiresti. See saab kuidagi parandatud, kuid sellegipoolest on see ajakaotus ja teatud m\u00e4\u00e4ral ressursside kaotus. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/757294dc6a1a27fc4a5fe174cc4aa7d7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mida me saame edasi teha? Enne Terraformiga t\u00f6\u00f6tamist tuleb see initsialiseerida. Initsialiseerimise hetkel laadib Terraform alla k\u00f5ik pluginad. Need on mingil hetkel monoliidist lagunenud mikroteenuste arhitektuuriks. Ja alati on vajalik teha Terraform init, et see laaks k\u00f5ik moodulid, k\u00f5ik pluginad.<\/p>\n<p><\/p>\n<p>Ja saab kasutada shell-skripti, mis, esiteks, suudab hankida k\u00f5ik muutujad. Shell-skript ei ole millegiga piiratud. Ja teiseks, teed. Kui me alati kasutame seda teed, mis on hoidlas state-faili v\u00f5tmena, siis vastavalt on see viga v\u00e4listatud. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/b70dbc6d8edb1b255c64d722a7e40680.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kust andmeid hankida? JSON-failist. Terraform v\u00f5imaldab salvestada infrastruktuuri mitte ainult hcl (HashiCorp Configuration Language) vormingus, vaid ka JSON-is.<\/p>\n<p><\/p>\n<p>JSON on shell-skripti kaudu kergesti loetav. Seega saab mingisse kohta paigutada konfigureerimisfaili bucketiga. Ja kasutada seda bucketit nii Terraform-koodis kui ka shell-skripti initsialiseerimiseks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/a18b92cac763003ec49af8d4a37e19d9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Miks on oluline omada bucketit Terraformi jaoks? Sellep\u00e4rast, et on olemas selline asi nagu remote state-failid. See t\u00e4hendab, et kui ma t\u00f5stan mingit ressurssi, pean ma Amazonile \u00fctlema: \"Palun t\u00f5sta instance\", mille jaoks pean ma m\u00e4\u00e4rama v\u00e4ga palju kohustuslikke parameetreid. <\/p>\n<p><\/p>\n<p>Ja need tuvastajad salvestatakse kuhugi teise kausta. Ja ma v\u00f5in \u00f6elda: \"Terraform, mine palun sealolevale state-failile ja t\u00f5sta mulle need tuvastajad \u00fcles.\" Nii tekib teatud \u00fchtsus erinevate piirkondade v\u00f5i keskkondade vahel.<\/p>\n<p><\/p>\n<p>Kauget state-faili ei saa alati kasutada. N\u00e4iteks, kui olete k\u00e4sitsi loonud VPC. Ja see Terraformi kood, mis loob VPC, loob nii erineva VPC, et selle kohandamine on v\u00e4ga aegan\u00f5udev ja keeruline, seet\u00f5ttu v\u00f5ib kasutada j\u00e4rgmist nippi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/04ffcd97e2fae323d9b4d81e5f6c751a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ehkki luua moodul, mis justkui loob VPC ja siiski annab teile tuvastajad, kuid tegelikult on lihtsalt fail, kus on k\u00f5vad v\u00e4\u00e4rtused, mida saab kasutada sama instance'i loomisel.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/9cd878c459f377caf5af9bf27b026187.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ei ole alati vajalik salvestada state-faili pilve. N\u00e4iteks, kui testitakse mooduleid, v\u00f5ib kasutada backendi initsialiseerimist, kus fail salvestatakse testimise ajal lihtsalt kettale.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/70fee8d4105cfddacafeec00825127b5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00fc\u00fcd r\u00e4\u00e4gime veidi testimisest. Mida saab Terraformis testida? T\u00f5en\u00e4oliselt palju, kuid ma r\u00e4\u00e4gin nendest neljast asjast.<\/p>\n<p><\/p>\n<p>HashiCorpil on arusaam, kuidas tuleks Terraformi koodi vormindada. Ja Terraform fmt v\u00f5imaldab teil vormindada teie redigeeritavat koodi vastavalt nende reeglitele. Seega peavad testid tingimata kontrollima, kas vormindamine vastab HashiCorpi p\u00e4randile, et ei peaks kohtade vahetama ja nii edasi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/bb99ffdd9f963f0f44ea7b5379689737.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>J\u00e4rgmine on Terraform validate. See teeb veidi enam kui ainult s\u00fcntaksikontroll \u2013 kontrollib n\u00e4iteks, kas k\u00f5ik sulud on paarisarvud. Mis on siin oluline? Meie infrastruktuur on v\u00e4ga laialdane. Seal on palju erinevaid kaustu. Ja iga\u00fches tuleb k\u00e4ivitada Terraform validate.<\/p>\n<p><\/p>\n<p>Seet\u00f5ttu, et testimist kiirendada, k\u00e4ivitame mitu protsessi samaaegselt, kasutades paralleelsust. <\/p>\n<p><\/p>\n<p>Paralleelsus on v\u00e4ga lahe asi, kasutage seda.<\/p>\n<p><\/p>\n<p>Aga iga kord, kui Terraformi initsialiseerimine toimub, l\u00e4heb ta HashiCorpi ja k\u00fcsib: \u201eMillised on viimased pluginaversioonid? Ja see plugin, mis mul on cache'is - kas see on \u00f5ige v\u00f5i vale?\u201c. Ja see aeglustab iga sammu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/836e90327c7a60c493f42f0a055e248b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui Terraformile \u00f6elda, kus pluginad asuvad, siis \u00fctleb Terraform: \u201eKuna see on t\u00f5en\u00e4oliselt k\u00f5ige v\u00e4rskem, ei l\u00e4he ma kuhugi ning hakkan kohe teie Terraform-koodi valideerima.\u201c<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/8ab344cf8de7087d30a1212d44691c20.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Selleks, et t\u00e4ita kaust vajalike pluginatega, on meil v\u00e4ga lihtne Terraformi kood, mis tuleb lihtsalt initsialiseerida. Siin tuleb muidugi luetleda k\u00f5ik pakkujad, kes teie koodis osalevad, vastasel juhul \u00fctleb Terraform: \u201eMa ei tunne seda pakkujat, sest teda pole cache'is.\u201c<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/b8130753045624d38bce32ba08b56fb0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>J\u00e4rgmine on Terraformi plaan. Nagu \u00f6eldud, on arendus ts\u00fckliline. Me teeme koodi muutustega ning p\u00e4rast seda on vaja v\u00e4lja selgitada, millised muudatused on infrastruktuuri planeeritud. <\/p>\n<p><\/p>\n<p>Ja kui infrastruktuur on v\u00e4ga-\u00e4ga suur, v\u00f5ib \u00fcks moodul muudetud olla, testimiskeskkond parandatud v\u00f5i konkreetne piirkond kahjustatud ning see v\u00f5ib rikkuda m\u00f5nda naabruses asuvat. Seet\u00f5ttu peab Terraformi plaan olema kogu infrastruktuuri jaoks ja n\u00e4itama, millised muudatused on planeeritud.<\/p>\n<p><\/p>\n<p>Seda saab teha nutikalt. N\u00e4iteks oleme kirjutanud Pythonis skripti, mis lahendab s\u00f5ltuvused. Ja s\u00f5ltuvalt sellest, mis on muutunud: Terraformi moodul v\u00f5i lihtsalt m\u00f5ni konkreetne komponent, loob ta plaanid k\u00f5igi s\u00f5ltuvate kaustade jaoks.<\/p>\n<p><\/p>\n<p>Terraformi plaane tuleks teha n\u00f5udmisel. V\u00e4hemalt on see see, mida meie teeme. <\/p>\n<p><\/p>\n<p>Testid on loomulikult head teha iga muutuse ja iga commit'i jaoks, kuid plaanid on piisavalt kulukad. Ja me pull requestis \u00fctleme: \u201ePalun anna mulle plaanid\u201c. K\u00e4ivitub robot, kes saadab kommentaaridesse v\u00f5i manusesse k\u00f5ik plaanid, mis on planeeritud teie muudatustest. <\/p>\n<p><\/p>\n<p>Plaan on \u00fcsna kulukas asi. See v\u00f5tab aega, sest Terraform l\u00e4heb Amazonisse ja k\u00fcsib: \u201eKas see instance on ikka olemas? Kas selle autoscale'i parameetrid on t\u00e4pselt sellised?\u201c. Ja selle kiirusestamiseks v\u00f5ib kasutada parameetrit refresh=false. See t\u00e4hendab, et Terraform t\u00f5mbab S3-st staatuse. Ja usub, et olek vastab t\u00e4pselt sellele, mis on Amazonis.<\/p>\n<p><\/p>\n<p>Selline Terraformi plaan kulgeb palju kiiremini, kuid olek peab vastama teie infrastruktuurile, st kuskil, kunagi peab olema k\u00e4ivitatud Terraform refresh. Terraform refresh teeb t\u00e4pselt seda, et olek vastaks sellele, mis on reaalsetes infrastruktuurides. <\/p>\n<p><\/p>\n<p>Ja tuleb r\u00e4\u00e4kida turvalisusest. Sellega oleks tulnud alustada. Seal, kus te k\u00e4ivitate Terraformi ja Terraform t\u00f6\u00f6tab teie infrastruktuuriga, on oht. St, te t\u00f5eliselt t\u00e4idate koodi. Ja kui pull request sisaldab mingit pahatahtlikku koodi, siis see v\u00f5ib k\u00e4ivituda infrastruktuuris, millel on liiga palju ligip\u00e4\u00e4su. Seet\u00f5ttu olge ettevaatlik, kus te k\u00e4ivitate Terraformi plaani.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/2153cc01acf2b1f46978f837b82b317e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>J\u00e4rgmisena, millest ma tahaksin r\u00e4\u00e4kida, on user-data testimine.<\/p>\n<p><\/p>\n<p>Mis on user-data? Amazonis, kui me loome instantsi, saame instantsilt saata mingi kirja \u2013 metaandmed. Kui instants k\u00e4ivitatakse, siis tavaliselt on cloud init alati nende instantside peal. Cloud init loeb seda kirja ja \u00fctleb: \u201eOkei, t\u00e4na olen ma load balancer\u201d. Ja nende lubaduste kohaselt sooritatakse mingeid toiminguid.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/406ac9341e102f5e0d7ca239d10675cd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kahjuks, kui me teeme Terraformi plaani ja Terraformi aplikaatsiooni, paistab user-data v\u00e4lja nagu selline arvu segu. St see lihtsalt saadab teile hash'i. Ja k\u00f5ik, mida saate plaanis vaadata, on kas m\u00f5ni muutus toimub v\u00f5i hash j\u00e4\u00e4b t\u00e4pselt samaks. <\/p>\n<p><\/p>\n<p>Ja kui sellele ei p\u00f6\u00f6rata t\u00e4helepanu, v\u00f5ib Amazonisse, reaalsetesse infrastruktuuridesse, minna mingi rikutud tekstifail. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/cd7b56f1149d9cbebb0ad3228c0eeb5f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Alternatiivina saate k\u00e4ivitamisel m\u00e4rgata mitte kogu infrastruktuuri, vaid ainult template'i. Ja koodis \u00f6elda: \u201ePalun, n\u00e4ita mulle seda template'i\u201d. Ja l\u00f5puks saate v\u00e4ljatr\u00fcki, milline teie andmed Amazonis v\u00e4lja n\u00e4evad.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/86da779cdf7f9cacfd80a196efde47f7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teine variant on kasutada moodulit user-data genereerimiseks. Te rakendate selle mooduli. Saate faili kettale. V\u00f5rdlete seda referentsfailiga. Ja niimoodi, kui m\u00f5ni algaja otsustab veidi user-data parandada, \u00fctlevad teie testid: \u201eOkei, siin ja siin on mingid muutused \u2013 see on normaalne\u201d.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/7e69ec1b2c04710066d93ee48f872254.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>J\u00e4rgmisena, millest ma tahaksin r\u00e4\u00e4kida, on Automatiseeritud Terraform aplikaatsioon.<\/p>\n<p><\/p>\n<p>Muidugi on Terraformi aplikaatsiooni automaatne k\u00e4ivitamine \u00fcsna hirmu\u00e4ratav, sest kes teab, millised seal muudatused on ja kui laastavad need v\u00f5ivad olla elavale infrastruktuurile. <\/p>\n<p><\/p>\n<p>Testkeskkonna jaoks on see k\u00f5ik normaalne. See t\u00e4hendab, et t\u00f6\u00f6, mis loob testkeskkonna, on see, mida k\u00f5ik arendajad vajavad. Ja selline v\u00e4ljend nagu \"mul t\u00f6\u00f6tas k\u00f5ik\" ei ole naljakas meem, vaid t\u00f5end sellest, et inimene on vaeva n\u00e4inud, seadistanud steki, k\u00e4ivitanud stekil m\u00f5ningad testid. Ja veendunud, et seal on k\u00f5ik korras ja \u00f6elnud: \"Okei, see kood, mille ma v\u00e4lja annan, on testitud.\"<\/p>\n<p><\/p>\n<p>Tootmis-, liivakasti ja teistes keskkondades, mis on ettev\u00f5tte jaoks olulisemad, v\u00f5ib osaliselt rakendada m\u00f5ningaid ressursse piisavalt ohutult, sest see ei too endaga kaasa, et keegi sureb. Need on: autoscale-grupid, turvagrupid, rollid, route53 ja seal v\u00f5ib olla piisavalt suur nimekiri. Kuid j\u00e4lgige, mis toimub, lugege automaatsete rakenduste aruandeid. <\/p>\n<p><\/p>\n<p>Seal, kus rakendamine on ohtlik v\u00f5i hirmus, n\u00e4iteks kui tegemist on m\u00f5ningate p\u00fcsivate ressurssidega, andmebaasidega, siis saage aruandeid selle kohta, et teatud sektoris infrastruktuuris on rakendamata muudatused. Ja insener, olles j\u00e4relevalve all, k\u00e4ivitab t\u00f6\u00f6d, et rakendada need v\u00f5i teeb seda oma konsoolist. <\/p>\n<p><\/p>\n<p>Amazonis on selline asi nagu Terminate protection. See v\u00f5ib teatud juhtudel kaitsta teid soovimatute muudatuste eest. See t\u00e4hendab, et Terraform l\u00e4heb Amazoni ja \u00fctleb: \"Mul on vaja see instants tappa, et teha teine.\" Aga Amazon \u00fctleb: \"Kahjuks ei t\u00e4na. Meil on aktiveeritud Terminate protection.\"<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/9f4258d8688556829586a1e308f5a1e2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja tordi kirss \u2013 see on koodi optimeerimine. Kui me t\u00f6\u00f6tame Terraform-koodiga, peame moduulile edastama v\u00e4ga suure hulga parameetreid. Need on need parameetrid, mis on vajalikud mingite ressursside loomiseks. Ja kood muutub suurteks parameetrite loenditeks, mida tuleb edastada \u00fchest modulist teise, eriti kui moodulid on pesastatud. <\/p>\n<p><\/p>\n<p>Ja see on v\u00e4ga keeruliselt loetav. Selle \u00fcle on v\u00e4ga keeruline teha \u00fclevaatust. Ja v\u00e4ga tihti juhtub, et m\u00f5ned parameetrid saavad \u00fclevaatusest l\u00e4bi, kuid need pole just need, mis vajalikud. Ja see maksab aega ja raha, et hiljem parandada.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/ad7e8a91692212fda9f2561854b881c9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Seet\u00f5ttu soovitan teil kasutada sellist asja nagu keeruline parameeter, mis sisaldab teatud v\u00e4\u00e4rtuste puu. See t\u00e4hendab, et on vajalik mingi kaust, kus on loetletud k\u00f5ik v\u00e4\u00e4rtused, mida sooviksite mingisuguses keskkonnas omada.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/909632949eb30057bf86b116239d9077.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja kutsudes seda moodulit, saab luua puu, mis genereeritakse \u00fches \u00fcldises moodulis, st \u00fcldises moodulis, mis t\u00f6\u00f6tab \u00fchtviisi kogu infrastruktuuri jaoks.<\/p>\n<p><\/p>\n<p>Selles moodulis on v\u00f5imalik teostada kalkulatsioone, kasutades sellist v\u00e4rsket omadust Terraformis nagu locals. Ja siis \u00fcks output\u2019iga anda mingisugune keeruline parameeter, mis v\u00f5ib sisaldada h\u00e4she, massiive jne. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/25c14e0397f8d95c301e0dfe6ae761df.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sellega on k\u00f5ik parimad leidud, mis mul on, otsa saanud. Ja tahaksin r\u00e4\u00e4kida lugu Kolumbusest. Kui ta otsis raha oma ekspeditsioonile, et avastada Indiat (nagu ta tol ajal arvas), ei uskunud keegi temasse ja arvasid, et see on v\u00f5imatu. Siis \u00fctles ta: \"Tehke nii, et muna ei kukuks.\" K\u00f5ik pangandusmehed, v\u00e4ga rikaste ja t\u00f5en\u00e4oliselt nutikate inimestena, \u00fcritasid mingil moel muna p\u00fcsti seada, kuid see kukkus pidevalt. Siis v\u00f5ttis Kolumbus muna, vajutas sellele natuke. Koor pressiti kokku ja muna j\u00e4i liikumatuks. Nad \u00fctlesid: \"Oh, see on liiga lihtne!\". Ja Kolumbus vastas: \"Jah, see on liiga lihtne. Ja kui ma avastan India, siis k\u00f5ik hakkavad seda kaubateed kasutama.\" <\/p>\n<p><\/p>\n<p>Ja see, mida ma teile praegu r\u00e4\u00e4kisin, on t\u00f5en\u00e4oliselt piisavalt lihtsad ja triviaalset asjaolud. Ja kui sa neist kuulete ja hakkate neid kasutama, on see t\u00e4iesti normaalne. Nii et kasutage. Ja kui need asjad on teie jaoks t\u00e4iesti normaalsed, siis v\u00e4hemalt teate, kuidas muna p\u00fcsti seada, et see ei kukuks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/37bf83d04b99f089f2319c8d2e8aaeb4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teeme kokkuv\u00f5tte: <\/p>\n<p><\/p>\n<ul>\n<li>P\u00fc\u00fcdke v\u00e4ltida lumesid. Ja mida v\u00e4hem lumesid, seda v\u00e4hem ressursse vajate, et teha mingeid muudatusi kogu teie suurtes infrastruktuurides. <\/li>\n<li>Pidevad muudatused. St. kui koodis on toimunud muudatusi, tuleb teie infrastruktuur viia v\u00f5imalikult kiiresti vastavusse nende muudatustega. Ei tohi juhtuda, et keegi tuleb kahe-kolme kuu p\u00e4rast vaatama Elasticsearchi, teeb Terraform plaani ja seal on kuhjaga muudatusi, mida ta ei oodanud. Ja kulub v\u00e4ga palju aega, et k\u00f5ik tagasi korda saada. <\/li>\n<li>Testid ja automatiseerimine. Mida rohkem on teie kood kaetud testidega ja funktsioonidega, seda rohkem on teil kindel tunne, et teete k\u00f5ik \u00f5igesti. Ja automaatne tarnimine suurendab teie usaldust mitmekordselt. <\/li>\n<li>Testi- ja tootmisringkonna kood peab olema praktiliselt identne. Praktiliselt, kuna tootmine on siiski veidi erinev ja seal on ikka mingid n\u00fcansid, mis \u00fcletavad testimisringkonna piirid. Sellegipoolest on plusspoolel see, et seda on v\u00f5imalik tagada. <\/li>\n<li>Ja kui teil on v\u00e4ga palju Terraform-koodi ja selle koodi ajakohasena hoidmine n\u00f5uab v\u00e4ga palju aega, siis pole kunagi liiga hilja refaktooringut teha ja see heasse vormi viia. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/68f3946536f44eed33939b234fb3ca0d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Muudetav infrastruktuur. AMI tarnimine ajakava j\u00e4rgi. <\/li>\n<li>Struktuur route53 jaoks, kui teil on v\u00e4ga palju kirjeid ja soovite, et need oleksid korralikus j\u00e4rjekorras. <\/li>\n<li>API m\u00e4\u00e4rangupiiride \u00fcletamine. See on siis, kui Amazon \u00fctleb: \"K\u00f5ik, k\u00f5ik, ma ei saa rohkem p\u00e4ringuid v\u00f5tta, palun oodake.\" Ja pool ettev\u00f5ttest ootab, kuni nad saavad oma infrastruktuuri k\u00e4ivitada. <\/li>\n<li>Spot instantsid. Amazon ei ole odav ettev\u00f5tmine ja spotsid v\u00f5imaldavad palju s\u00e4\u00e4sta. Ja sellest v\u00f5iks r\u00e4\u00e4kida terve ettekande. <\/li>\n<li>Turvalisus ja IAM rollid. <\/li>\n<li>Kaotatud ressursside leidmine, kui Amazones on ebamugava p\u00e4ritoluga instantsid, mis s\u00f6\u00f6vad raha. Isegi kui instants maksab 100-150 dollarit kuus \u2013 aastas on see rohkem kui 1 000. Selliste ressursside leidmine on kasumlik \u00e4ri. <\/li>\n<li>Ja reserveeritud instantsid. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Terraformi mustrid kaose ja k\u00e4sitsi rutiiniga tegelemiseks. Maksim Kostriikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/69ddbf4c726bcc15aea1a1e2d67a3fc8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Siinkohal on mul k\u00f5ik. Terraform on v\u00e4ga \u00e4ge, kasutage seda. Ait\u00e4h!<\/p>\n<p><\/p>\n<p>K\u00fcsimused<\/p>\n<p><\/p>\n<p><em>Ait\u00e4h ettekande eest! Teil on state-fail S3-s, aga kuidas te lahendate probleemi, et mitu inimest v\u00f5ivad seda state-faili v\u00f5tta ja proovida seda taasluua?<\/em><\/p>\n<p><\/p>\n<p>Esiteks, me ei kiirusta. Teiseks, meil on lipud, millega me teatame, et t\u00f6\u00f6tame m\u00f5ne koodiosa kallal. St kuigi infrastruktuur on v\u00e4ga suur, ei t\u00e4henda see, et keegi pidevalt midagi rakendab. Ja kui aktiivne faas oli \u2013 oli see probleem, meil oli state-failid Git-is. See oli oluline, vastasel juhul keegi teeb state-faili ja pidime neid k\u00e4sitsi kokku koguma, et k\u00f5ik edasi kulgeks. Praegu sellist probleemi ei ole. Aga \u00fcldiselt lahendas Terraform selle \u00fclesande. Ja kui pidevalt midagi muutub, siis saad kasutada lukke, mis takistavad seda, mida te \u00fctlesite.<\/p>\n<p><\/p>\n<p><em>Kasutate avatud versiooni v\u00f5i ettev\u00f5tte versiooni?<\/em><\/p>\n<p><\/p>\n<p>Mingit ettev\u00f5tte versiooni ei ole, st k\u00f5ik, mida saab tasuta alla laadida. <\/p>\n<p><\/p>\n<p><em>Minu nimi on Stanislav. Soovisin teha v\u00e4ikese t\u00e4ienduse. Te r\u00e4\u00e4kisite Amazon'i funktsioonist, mis v\u00f5imaldab muuta instance'i h\u00e4vitamatuks. See on olemas ka Terraform'is, Life Second plokis saab m\u00e4\u00e4rata muutmise keelu v\u00f5i h\u00e4vitamise keelu.<\/em> <\/p>\n<p><\/p>\n<p>Aeg oli piiratud. Hea m\u00e4rkamine. <\/p>\n<p><\/p>\n<p><em>Soovisin veel kahte asja k\u00fcsida. Esiteks, te r\u00e4\u00e4kisite testimisest. Kas olete kasutanud mingeid t\u00f6\u00f6riistu testimiseks? Olen kuulnud Test Kitchen'i pluginast. V\u00f5ib-olla on veel midagi. Ja soovin k\u00fcsida Local Values kohta. Kuidas need \u00fcldiselt erinevad Input Variables from? Miks ma ei saa parametrizeerida midagi ainult Local Values kaudu? Olen proovinud seda teemat m\u00f5ista, kuid ei ole v\u00e4ga aru saanud.<\/em><\/p>\n<p><\/p>\n<p>Saame sellest saalist t\u00e4psemalt r\u00e4\u00e4kida. Testimise t\u00f6\u00f6riistad \u2013 need on meil t\u00e4ielik omavalmistus. Seal ei ole midagi sellist, millega testida. Tegelikult on v\u00f5imalusi, kus automaatsed testid \u00fcles t\u00f5stavad infrastruktuuri kuskil, kontrollivad, et see on korras, ja siis k\u00f5ik h\u00e4vitavad aruannete koostamisega, et teie infrastruktuur on endiselt heas seisus. Meil seda ei ole, kuna testimissteigid k\u00e4ivituvad iga p\u00e4ev. Ja sellest piisab. Ja kui midagi hakkab katki minema, siis see hakkab katki minema ilma, et me veel kuskil seda kontrollime. <\/p>\n<p><\/p>\n<p>Local Values'i osas j\u00e4tkame vestlust saalist v\u00e4ljas. <\/p>\n<p><\/p>\n<p><em>Tere! Ait\u00e4h ettekande eest! V\u00e4ga hariv. R\u00e4\u00e4kisite, et teil on palju sarnast koodi infrastruktuuri kirjeldamiseks. Kas olete kaalunud selle koodi genereerimise v\u00f5imalust?<\/em><\/p>\n<p><\/p>\n<p>Suurep\u00e4rane k\u00fcsimus, ait\u00e4h! Tegelikult, kui kasutame infrastruktuuri kui koodi, eeldame, et vaatame koodi ja m\u00f5istame, mis infrastruktuur selle koodi taga on. Kui kood genereeritakse, peame ette kujutama, milline kood genereeritakse, et m\u00f5ista, mis infrastruktuur seal on. Kas me genereerime koodi, kommidime selle ja p\u00f5him\u00f5tteliselt saame sama asja. Seet\u00f5ttu l\u00e4ksime teed, mida me kirjutasime, saime selle. Pluss generaatorid tulid m\u00f5ni aeg hiljem, kui me hakkasime tegema. Ja oli juba hilja seda muuta.<\/p>\n<p><\/p>\n<p><em>Kas olete jsonnet'ist midagi kuulnud?<\/em><\/p>\n<p><\/p>\n<p>Ei. <\/p>\n<p><\/p>\n<p><em>Vaata, see on v\u00e4ga \u00e4ge asi. N\u00e4en konkreetset kasutusjuhtu, kus seda saab rakendada ja andmestruktuuri genereerida.<\/em> <\/p>\n<p><\/p>\n<p>Generaatoreid on hea kasutada, kui teil on nagu anekdoot \u00fchekordsest raseerimisaparaadist. Ehkki esmakordselt v\u00f5ib n\u00e4gu erineda, on hiljem k\u00f5igil sama n\u00e4gu. Generaatoreid on v\u00e4ga tore kasutada. Kuid meil on kahjuks n\u00e4od natuke erinevad. See on probleem. <\/p>\n<p><\/p>\n<p><em>Vaata lihtsalt. Ait\u00e4h!<\/em><\/p>\n<p><\/p>\n<p><em>Minu nimi on Maksim, olen Sberbankist. Te r\u00e4\u00e4kisite veidi sellest, et \u00fcritasite Terraformi tuua programmeerimiskeele analooge. Kas ei oleks lihtsam kasutada Ansible'i?<\/em><\/p>\n<p><\/p>\n<p>Need on v\u00e4ga erinevad asjad. Sa saad Ansible'iga ressursse luua ja Puppetiga on v\u00f5imalik ressursse Amazonis luua. Kuid Terraform on selleks otstarbeks spetsiaalselt loodud. <\/p>\n<p><\/p>\n<p><em>Kas teil on ainult Amazon?<\/em><\/p>\n<p><\/p>\n<p>Probleem ei ole selles, et meil on ainult Amazon. Meil on peaaegu ainult Amazon. Kuid peamine omadus on see, et Terraform m\u00e4letab. Ansible'iga, kui sa \u00fctled: \u201eT\u00f5sta mulle 5 instances\u201c, siis ta t\u00f5stab need \u00fcles, aga siis \u00fctled: \u201eN\u00fc\u00fcd tahan 3\u201c. Terraform \u00fctleb: \u201eOkei, 2 l\u00fckkan v\u00e4lja\u201c, aga Ansible \u00fctleb: \u201eOkei, siin sul on 3\u201c. Kokku on seega 8.<\/p>\n<p><\/p>\n<p><em>Tere! Ait\u00e4h teie ettekande eest! Oli v\u00e4ga huvitav kuulda Terraformist. Tahan kohe anda v\u00e4ikese kommentaari seoses sellega, et Terraformil t\u00f5epoolest puudub stabiilne versioon, seega suhelge Terraformiga suure ettevaatlikkusega.<\/em><\/p>\n<p><\/p>\n<p>Hea lusikas on l\u00f5unas\u00f6\u00f6giks. Ehk kui sul on lahendus vajalik, siis m\u00f5nikord l\u00fckkad edasi selle, mis ei ole stabiilne jne, kuid see t\u00f6\u00f6tab ja aitas meid. <\/p>\n<p><\/p>\n<p><em>K\u00fcsimus on selline. Kas te kasutate Remote backend'i, kasutate S3. Miks te ametlikku backend'i ei kasuta?<\/em><\/p>\n<p><\/p>\n<p>Ametlik?<\/p>\n<p><\/p>\n<p><em>Terraform Cloud.<\/em><\/p>\n<p><\/p>\n<p>Kuidas see tekkis?<\/p>\n<p><\/p>\n<p><em>Neli kuud tagasi.<\/em> <\/p>\n<p><\/p>\n<p>Kui see oleks ilmunud 4 aastat tagasi, siis ilmselt oleksin ma teie k\u00fcsimusele vastanud.<\/p>\n<p><\/p>\n<p><em>Seal on juba sisseehitatud funktsioon ja lukud, samuti saab salvestada state-faili. Proovige. Kuid ma ka ei ole seda testinud.<\/em><\/p>\n<p><\/p>\n<p>Me s\u00f5idame suurel rongil, mis liigub suure kiirusiga. Ja ei saa lihtsalt v\u00f5tta ja visata m\u00f5ned vagunid v\u00e4lja. <\/p>\n<p><\/p>\n<p><em>Te r\u00e4\u00e4kisite lumehelbeist, aga miks te ei kasutanud branch'i? Miks see ei \u00f5nnestunud?<\/em><\/p>\n<p><\/p>\n<p>Meie l\u00e4henemine on selline, et kogu infrastruktuur on \u00fches hoidlas. Terraform, Puppet, k\u00f5ik skriptid, mis kuidagi sellega seonduvad, on k\u00f5ik \u00fches hoidlas. Nii saame garanteerida, et j\u00e4rkj\u00e4rgulisi muudatusi testitakse \u00fckshaaval. Kui see oleks hunnik branche, oleks sellist projekti praktiliselt v\u00f5imatu hooldada. Aastaga nad lahknevad nii palju, et see on lihtsalt karistus. See on see, millest tahaks enne refaktoreerimist eemale p\u00e4\u00e4seda. <\/p>\n<p><\/p>\n<p><em>Ehk see ei toimi?<\/em><\/p>\n<p><\/p>\n<p>See ei t\u00f6\u00f6ta \u00fcldse.<\/p>\n<p><\/p>\n<p>Branchis l\u00f5ikasin ma kausta slaidi. St, kui teha iga teststaki jaoks n\u00e4iteks A meeskonnale oma kaust ja B meeskonnale oma kaust, siis see ei t\u00f6\u00f6ta ka. Me tegime \u00fchtse testkeskkonna koodi, mis oli piisavalt paindlik, et sobida k\u00f5igile. St, me haldasime \u00fchte koodi. <\/p>\n<p><\/p>\n<p><em>Tere! Minu nimi on J\u00fcri! Ait\u00e4h ettekande eest! K\u00fcsimus moodulite kohta. Te \u00fctlete, et kasutate mooduleid. Kuidas te lahendate olukorra, kui \u00fchte moodulit on muudetud nii, et see ei \u00fchildu kellegi teise muudatustega? Kas versioonite mooduleid v\u00f5i proovite tuua midagi, et vastata kahele n\u00f5udmisele?<\/em><\/p>\n<p><\/p>\n<p>See on suur lumehange. See on see, millest me kannatame, kui m\u00f5ni ohutu muudatus v\u00f5ib rikkuda mingi osa infrastruktuurist. Ja see on m\u00e4rgatav alles pikema aja p\u00e4rast.<\/p>\n<p><\/p>\n<p><em>St, seni ei ole see kuidagi lahendatud?<\/em><\/p>\n<p><\/p>\n<p>Teete universaalseid mooduleid. V\u00e4ltige lumehelbeid. Ja k\u00f5ik \u00f5nnestub. Ettekanne teine pool r\u00e4\u00e4gib sellest, kuidas seda v\u00e4ltida.<\/p>\n<p><\/p>\n<p><em>Tere! Ait\u00e4h ettekande eest! Tahaksin t\u00e4psustada. Varjatud j\u00e4i suur hulk, millep\u00e4rast ma tulin. Kuidas on integreeritud Puppet ja rollide jaotamine?<\/em><\/p>\n<p><\/p>\n<p>User-data.<\/p>\n<p><\/p>\n<p><em>St, lihtsalt viskate faili v\u00e4lja ja kuidagi teete seda j\u00e4rgi?<\/em><\/p>\n<p><\/p>\n<p>User-data on m\u00e4rkmed, st, kui me teeme klooni pildist, siis t\u00f5useb Daemon ja \u00fcritab aru saada, kes ta on, loeb m\u00e4rkmeid, et ta on koormuse tasakaalustaja.<\/p>\n<p><\/p>\n<p><em>St, see on mingi eraldi protsess, mis antakse edasi?<\/em><\/p>\n<p><\/p>\n<p>Me ei loonud seda. Me kasutame seda. <\/p>\n<p><\/p>\n<p><em>Tere! Mul on just k\u00fcsimus User-data kohta. Te \u00fctlesite, et seal on probleeme, et keegi v\u00f5ib midagi valesti edastada. Kas on mingi viis user-data salvestamiseks samas Git'is, et oleks alati selge, millele user-data viitab?<\/em><\/p>\n<p><\/p>\n<p>Meie User-data genereeritakse template'ist. See t\u00e4hendab, et sinna kasutatakse teatud hulk muutujaid. Ja Terraform genereerib l\u00f5pptulemuse. Seet\u00f5ttu ei saa lihtsalt vaadata template'it ja \u00f6elda, mis v\u00e4lja tuleb, sest k\u00f5ik probleemid on seotud sellega, et arendaja arvab, et ta edastab selle muutuja kaudu stringi, samas kui seal tuleb v\u00e4lja massiiv. Ja siis \u2013 ups ja mina \u2013 see, see, j\u00e4rgmine rida ja k\u00f5ik l\u00e4heb katki. Kui see on uus ressurss ja inimene t\u00f5stab selle \u00fcles, n\u00e4eb ta, et midagi ei t\u00f6\u00f6ta, siis see lahendatakse kiiresti. Aga kui see on autoscale-grupp, mis on uuendatud, siis mingil hetkel hakkavad autoscale-grupi instantsid vahetuma. Ja ups, midagi ei t\u00f6\u00f6ta. See on kurb.<\/p>\n<p><\/p>\n<p><em>Kas ainus lahendus on testimine?<\/em><\/p>\n<p><\/p>\n<p>Jah, te n\u00e4ete probleemi, lisate sinna testimise etapid. See t\u00e4hendab, et output'i saab samuti testida. V\u00f5ib-olla ei ole see nii mugav, aga saab ka mingid sildid panna \u2013 kontrollige, et User-data on siin naeltega kinni. <\/p>\n<p><\/p>\n<p><em>Minu nimi on Timur. On v\u00e4ga tore, et on ettekandeid selle kohta, kuidas \u00f5igesti Terraform'i organiseerida.<\/em><\/p>\n<p><\/p>\n<p>Ma pole isegi veel alustanud.<\/p>\n<p><\/p>\n<p><em>Ma arvan, et j\u00e4rgmine konverents on v\u00f5imalik. Mul on lihtne k\u00fcsimus. Miks te k\u00f5vakoodite v\u00e4\u00e4rtuse eraldi moodulis, mitte ei kasuta tfvars'i, st mis on mooduli v\u00e4\u00e4rtustes parem kui tfvars?<\/em><\/p>\n<p><\/p>\n<p>Kuidas oleks, kui ma siin (slaid: Production\/environment\/settings.tf) kirjutaksin: domain = muutuja, domain vpcnetwork, muutuja vpcnetwork ja stvars \u2013 saada v\u00e4lja sama?<\/p>\n<p><\/p>\n<p><em>Me teeme t\u00f5esti samamoodi. Viitame n\u00e4iteks mooduli setting source'ile.<\/em><\/p>\n<p><\/p>\n<p>P\u00f5him\u00f5tteliselt on see selline tfvars. Tfvars on testimise keskkonnas v\u00e4ga mugav. Mul on tfvars suuremate instantside jaoks, v\u00e4ikeste jaoks. Ja ma viskasin \u00fche faili kausta. Ja sain selle, mida tahtsin. Kui me l\u00f5ikame infrastruktuuri, tahame, et oleks v\u00f5imalik vaadata ja kohe k\u00f5ik aru saada. Nii aga on, et pean vaatama siia, siis vaatama tfvars'i.<\/p>\n<p><\/p>\n<p><em>Kas see t\u00e4hendab, et k\u00f5ik oleks \u00fches kohas?<\/em><\/p>\n<p><\/p>\n<p>Jah, tfvars on siis, kui teil on \u00fcks kood. Ja see kasutatakse mitmes erinevas kohas erinevate n\u00fcanssidega. Siis viskaksite tfvars'i ja saaksite oma n\u00fcansid. Ja meie \u2013 see on infrastruktuur nagu kood puhtaima vormis. Vaatad ja m\u00f5istad. <\/p>\n<p><\/p>\n<p><em>Tere! Kas olete sattunud olukordadesse, kus pilveteenuse pakkuja sekkub sellesse, mida olete teinud Terraformiga? Oletame, et me redigeerime metadata. Seal on ssh-v\u00f5tmed. Ja Google pidevalt lisab sinna oma metadata, oma v\u00f5tmeid. Ja Terraform kirjutab alati, et tal on muudatusi. Iga kord, isegi kui midagi ei muutu, \u00fctleb ta alati, et ta kavatseb seda vahetust v\u00e4rskendada.<\/em><\/p>\n<p><\/p>\n<p>V\u00f5tmetega, jah, osa infrastruktuurist on sellesse asja haavatud, st Terraform ei saa midagi muuta. Me ei saa ka k\u00e4ega midagi muuta. Elame sellega.<\/p>\n<p><\/p>\n<p><em>St olete selle olukorraga silmitsi seisnud, aga ei ole midagi v\u00e4lja m\u00f5elnud, ta teeb ja teeb ise?<\/em><\/p>\n<p><\/p>\n<p>Kahjuks, jah. <\/p>\n<p><\/p>\n<p><em>Tere! Minu nimi on Starkov Stanislav. Mail.ru Group. Kuidas lahendate probleemi sildi genereerimisel ... kuidas te selle edastate? Ma saan aru, et l\u00e4bi User\u2014data, et n\u00e4idata host-nime, suunata Puppet? Ja teine k\u00fcsimuse osa. Kuidas te seda k\u00fcsimust lahendate SG-s, st kui genereerite SG-d, sada sarnast instantsi, kuidas neid \u00f5igesti nimetada?<\/em><\/p>\n<p><\/p>\n<p>Need instantsid, mis on meile v\u00e4ga olulised, me nimetanud ilusasti. Need, mis pole vajalikud, seal on m\u00e4rk, et see on autoscale-grupp. Ja ideeliselt on v\u00f5imalik see l\u00f5petada ja saada uus. <\/p>\n<p><\/p>\n<p>Sildi probleemide osas pole sellist probleemi, aga on selline \u00fclesanne. Ja sildid on meil v\u00e4ga-v\u00e4ga tugevalt kasutusel, sest infrastruktuur on suur ja kallis. Ja me peame vaatama, kuhu raha l\u00e4heb, seega sildid v\u00f5imaldavad j\u00e4lgida, mis ja kuhu on l\u00e4inud. Ja vastavalt sellele otsida, et kuski kulutatakse liiga palju raha. <\/p>\n<p><\/p>\n<p>Mille kohta oli veel k\u00fcsimus?<\/p>\n<p><\/p>\n<p><em>Kui SG loob sada instantsi, tuleb neid kuidagi eristada?<\/em><\/p>\n<p><\/p>\n<p>Ei, ei ole vaja. Igal instantsil on agent, kes teatab, et mul on probleem. Kui agent teatab, siis agent teab temast ja v\u00e4hemalt tema IP-aadress eksisteerib. Juba saab minna. Teiseks, meil on kasutusel Consul Discovery jaoks, seal, kus ei ole Kubernetes. Ja Consul n\u00e4itab samuti instantsi IP-aadressi.<\/p>\n<p><\/p>\n<p><em>St te orienteerute just IP-le, mitte host-nimele?<\/em><\/p>\n<p><\/p>\n<p>Ei ole v\u00f5imalik orienteeruda host-nimele, neid on v\u00e4ga palju. On instantsi identifikaatorid \u2013 AE jne. Selle v\u00f5ib kuskil leida, selle v\u00f5ib otsingusse panna. <\/p>\n<p><\/p>\n<p><em>Tere! Ma sain aru, et Terraform on hea asi, mis on kohandatud pilvede jaoks.<\/em> <\/p>\n<p><\/p>\n<p>Mitte ainult. <\/p>\n<p><\/p>\n<p><em>Just this question interests me. If you decide to switch en masse to Bare Metal with all your instances, will there be any problems? Or will you still have to use other products, like the Ansible mentioned here?<\/em><\/p>\n<p><\/p>\n<p>Ansible is a bit different. That is, Ansible operates once the instance has started. Terraform works before the instance starts. Switching to Bare Metal is not. <\/p>\n<p><\/p>\n<p><em>Not right now, but a business will come and say: 'Let's do it'.<\/em><\/p>\n<p><\/p>\n<p>Switching to another cloud is possible, but there\u2019s a slightly different aspect here. You need to write Terraform code in such a way that transitioning to another cloud can be done with minimal effort. <\/p>\n<p><\/p>\n<p>Initially, we set the goal that our entire infrastructure should be agnostic, meaning that any cloud should work, but at some point, the business gave in and said: 'Okay, for the next N years we won't go anywhere, we can use services from Amazon.'<\/p>\n<p><\/p>\n<p>Terraform allows you to create Front-End jobs, configure PagerDuty, data docs, etc. It has a lot of capabilities. It can practically control the entire ecosystem.<\/p>\n<p><\/p>\n<p><em>Thank you for the presentation! I\u2019ve also been working with Terraform for 4 years. During the gradual transition to Terraform, to infrastructure, to declarative descriptions, we encountered situations where someone was doing something manually, and you were trying to create a plan. And you encountered some kind of error. How do you resolve these issues? How do you find the lost resources that were indicated?<\/em><\/p>\n<p><\/p>\n<p>Mostly by hand and eye; if we see something strange in the report, we analyze what is happening there, or just delete it. Overall, pull requests are a common practice. <\/p>\n<p><\/p>\n<p><em>If there is an error, do you perform a rollback? Have you tried doing that?<\/em><\/p>\n<p><\/p>\n<p>No, that's a human decision in the moment when he sees a problem.<\/p>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/524712\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Terraform \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u044b\u0435 best practices \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 AWS-\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439. \u0422\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441. \u0421\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u043a\u043e\u043f\u0438\u044f \u0441\u0442\u0435\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 \u0441\u043e\u0441\u0435\u0434\u043d\u0435\u043c \u0440\u0435\u0433\u0438\u043e\u043d\u0435. \u0418 Terraform-\u043a\u043e\u0434 \u043d\u0443\u0436\u043d\u043e \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043d\u043e\u0432\u044b\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u0438\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u0435\u0436\u0438\u043d\u043a\u0443. \u041c\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434 \u043f\u0440\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432 Terraform \u0434\u043b\u044f \u0431\u043e\u0440\u044c\u0431\u044b \u0441 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":98124,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-98123","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/patterny-v-terraform-dlya-borby-s-haosom-i-ruchnoj-rutinoj-maksim-kostrikin-ixtens\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432 Terraform \u0434\u043b\u044f \u0431\u043e\u0440\u044c\u0431\u044b \u0441 \u0445\u0430\u043e\u0441\u043e\u043c \u0438 \u0440\u0443\u0447\u043d\u043e\u0439 \u0440\u0443\u0442\u0438\u043d\u043e\u0439. \u041c\u0430\u043a\u0441\u0438\u043c \u041a\u043e\u0441\u0442\u0440\u0438\u043a\u0438\u043d (Ixtens) | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/patterny-v-terraform-dlya-borby-s-haosom-i-ruchnoj-rutinoj-maksim-kostrikin-ixtens\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-10-24T12:42:52+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-11-17T22:58:49+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Patterns in Terraform to combat chaos and manual routine. Maxim Kostrykin (Ixtens) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/patterny-v-terraform-dlya-borby-s-haosom-i-ruchnoj-rutinoj-maksim-kostrikin-ixtens","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432 Terraform \u0434\u043b\u044f \u0431\u043e\u0440\u044c\u0431\u044b \u0441 \u0445\u0430\u043e\u0441\u043e\u043c \u0438 \u0440\u0443\u0447\u043d\u043e\u0439 \u0440\u0443\u0442\u0438\u043d\u043e\u0439. \u041c\u0430\u043a\u0441\u0438\u043c \u041a\u043e\u0441\u0442\u0440\u0438\u043a\u0438\u043d (Ixtens) | ProHoster","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/patterny-v-terraform-dlya-borby-s-haosom-i-ruchnoj-rutinoj-maksim-kostrikin-ixtens","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-10-24T12:42:52+00:00","article:modified_time":"2020-11-17T22:58:49+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"98123","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:04:35","updated":"2022-09-29 03:09:38","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/98123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=98123"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/98123\/revisions"}],"predecessor-version":[{"id":164071,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/98123\/revisions\/164071"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/98124"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=98123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=98123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=98123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}