{"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\/sk\/blog\/administrirovanie\/patterny-v-terraform-dlya-borby-s-haosom-i-ruchnoj-rutinoj-maksim-kostrikin-ixtens","title":{"rendered":"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/ec13125c702f42863bbe774cd805442b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zd\u00e1 sa, \u017ee v\u00fdvoj\u00e1ri Terraform pon\u00fakaj\u00fa dostato\u010dne pohodln\u00e9 osved\u010den\u00e9 postupy na pr\u00e1cu s AWS infra\u0161trukt\u00farou. Len\u017ee je tu mal\u00fd h\u00e1\u010dik. S \u010dasom sa zvy\u0161uje po\u010det prostred\u00ed, v ka\u017edom sa objavuj\u00fa \u0161pecifik\u00e1. Takmer k\u00f3pia aplika\u010dn\u00e9ho steku sa nach\u00e1dza v susednom regi\u00f3ne. A Terraform k\u00f3d je potrebn\u00e9 starostlivo skop\u00edrova\u0165 a upravi\u0165 pod\u013ea nov\u00fdch po\u017eiadaviek, alebo vytvori\u0165 snehov\u00fa vlo\u010dku.<\/p>\n<p><\/p>\n<p>M\u00f4j pr\u00edspevok je o vzoroch v Terraformu na boj s chaosom a manu\u00e1lnou rutinou v rozsiahlych a dlh\u00fdch projektoch.<\/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=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/8c67c45e486d6c03793dd08c33a16313.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00e1m 40 rokov, v IT pracujem 20 rokov. 12 rokov pracujem vo firme Ixtens. Zaober\u00e1me sa rozvojom poh\u00e1\u0148an\u00fdm ecommerce. A 5 rokov praktizujem DevOps praktiky.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/8b14b3adaa45d69278d76580baa99042.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00f4j pr\u00edbeh bude o sk\u00fasenostiach z projektu vo firme, ktorej meno nebudem prezr\u00e1dza\u0165 kv\u00f4li dohovoru o d\u00f4vernosti. <\/p>\n<p><\/p>\n<p>\u010c\u00edsla na slide sl\u00fa\u017eia na to, aby sme pochopili rozsah projektu. A v\u0161etko, o \u010dom budem \u010falej hovori\u0165, sa t\u00fdka Amazonu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/3742217a2abaf1fcf2163979d82eac14.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K tomuto projektu som sa pridal pred 4 rokmi. A uprostred prebiehal refaktorovanie infra\u0161trukt\u00fary, preto\u017ee projekt r\u00e1stol. A vzory, ktor\u00e9 sa pou\u017e\u00edvali, u\u017e nevyhovovali. A vzh\u013eadom na pl\u00e1novan\u00fd rast projektu bolo potrebn\u00e9 vymyslie\u0165 nie\u010do nov\u00e9. <\/p>\n<p><\/p>\n<p>\u010eakujem Matvemu, ktor\u00fd v\u010dera hovoril, \u010do sa dialo v Dodo Pizze. To je to, \u010do sa u n\u00e1s dialo pred 4 rokmi. <\/p>\n<p><\/p>\n<p>Pri\u0161li v\u00fdvoj\u00e1ri a za\u010dali robi\u0165 infra\u0161trukt\u00farny k\u00f3d. <\/p>\n<p><\/p>\n<p>Najjasnej\u0161ie d\u00f4vody, pre\u010do to bolo potrebn\u00e9, boli ur\u00fdchlenie uv\u00e1dzania na trh. Bolo potrebn\u00e9 zabezpe\u010di\u0165, aby DevOps t\u00edm nebol \u00fazkym miestom pri nasaden\u00ed. A okrem v\u0161etk\u00e9ho na najz\u00e1kladnej\u0161ej \u00farovni boli pou\u017eit\u00e9 Terraform a Puppet.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/13d6df6a324d2e1162acef77ca2ad0dc.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Terraform je open source projekt spolo\u010dnosti HashiCorp. A pre t\u00fdch, ktor\u00ed \u00faplne nevedia, \u010do to je, nasleduj\u00face nieko\u013eko slideov. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/61726d4205d1f4f8e449fe9d71507508.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Infrastrukt\u00fara ako k\u00f3d znamen\u00e1, \u017ee m\u00f4\u017eeme op\u00edsa\u0165 na\u0161u infra\u0161trukt\u00faru a po\u017eiada\u0165 nejak\u00fdch robotov, aby n\u00e1m zabezpe\u010dili zdroje, ktor\u00e9 sme op\u00edsali.<\/p>\n<p><\/p>\n<p>Napr\u00edklad potrebujeme <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sk\/vps\/abuzoustojchivye-vps\/\"   title=\"virtu\u00e1lna ma\u0161ina\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"4196\">virtu\u00e1lna ma\u0161ina<\/a>. Op\u00ed\u0161eme, prid\u00e1me nieko\u013eko povinn\u00fdch parametrov. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/eb52c1e458fa092bba8577fffceb864c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Potom v konzole nastav\u00edme pr\u00edstup k Amazonu. A po\u017eiadame Terraform plan. Terraform plan povie: \u201eOk, pre v\u00e1\u0161 zdroj m\u00f4\u017eeme urobi\u0165 tak\u00e9to veci\u201c. A aspo\u0148 jeden zdroj bude pridan\u00fd. A \u017eiadne zmeny sa nepl\u00e1nuj\u00fa. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/879e645596121ee5d05ac247b4be19ee.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Po tom, \u010do v\u00e1s v\u0161etko uspokoj\u00ed, m\u00f4\u017eete po\u017eiada\u0165 Terraform apply a Terraform v\u00e1m vytvor\u00ed instance, a dostanete virtu\u00e1lny stroj vo va\u0161ej \u043e\u0431\u043b\u0430\u010dne.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/77b7fe4d6abcc9116233f48caa887465.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u010ealej n\u00e1\u0161 projekt pokra\u010duje. Prid\u00e1vame tam nejak\u00e9 zmeny. \u017diadame o viac instances, prid\u00e1vame 53 z\u00e1znam.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/98ce7e1f9d1f85aa5e78c269a0708ac1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A opakujeme. \u017diadame pl\u00e1n. Vid\u00edme, ak\u00e9 zmeny s\u00fa pl\u00e1novan\u00e9. Aplikujeme. Takto na\u0161a infra\u0161trukt\u00fara rastie. <\/p>\n<p><\/p>\n<p>Terraform vyu\u017e\u00edva nie\u010do, \u010do sa naz\u00fdva state s\u00fabory. T. j. v\u0161etky zmeny, ktor\u00e9 id\u00fa na Amazon, uklad\u00e1 do s\u00faboru, v ktorom ka\u017ed\u00e9mu zdroju, ktor\u00fd ste op\u00edsali, zodpovedaj\u00fa zdroje, ktor\u00e9 boli vytvoren\u00e9 v Amazon. Tak\u017ee pri zmene popisu nejak\u00e9ho zdroja, Terraform presne vie, \u010do treba zmeni\u0165 na Amazone.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/6e83efffb7af6ab967b4716be170b47b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tieto state s\u00fabory boli p\u00f4vodne len s\u00fabormi. A uchov\u00e1vali sme ich v Gite, \u010do bolo ve\u013emi nepraktick\u00e9. Neust\u00e1le niekto zabudol posla\u0165 zmeny, a vznikalo ve\u013ea konfliktov. <\/p>\n<p><\/p>\n<p>Teraz je mo\u017en\u00e9 pou\u017e\u00edva\u0165 backend, t. j. Terraformu sa ur\u010duje, v akom bucket-e a pod ak\u00fdm k\u013e\u00fa\u010dom sa m\u00e1 ulo\u017ei\u0165 state s\u00fabor. A Terraform sa postar\u00e1 o to, aby tento state s\u00fabor z\u00edskal, vykonal v\u0161etku magiu a vr\u00e1til sp\u00e4\u0165 kone\u010dn\u00fd v\u00fdsledok.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/e6687463a9fe3cff979f44ac7778b4e8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Na\u0161a infra\u0161trukt\u00fara rastie. Tu je n\u00e1\u0161 k\u00f3d. A teraz nechceme len vytvori\u0165 virtu\u00e1lny stroj, chceme ma\u0165 testovacie prostredie.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/0effb09fa04d3d520c1cdbb34ce97810.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Terraform umo\u017e\u0148uje vytvori\u0165 nie\u010do ako modul, t. j. to ist\u00e9 op\u00edsa\u0165 v nejakej zlo\u017eke.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/95c8395b10142fe550b0719161211f15.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A napr\u00edklad v testovan\u00ed zavola\u0165 tento modul a z\u00edska\u0165 to ist\u00e9, ako keby sme vykon\u00e1vali Terraform apply v samotnom module. Pre testovanie bude tak\u00fdto k\u00f3d.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/fa4c16e3835a4507a858d2ddb767daf3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pre produkciu m\u00f4\u017eeme posla\u0165 nejak\u00e9 zmeny, preto\u017ee v testovan\u00ed nepotrebujeme ve\u013ek\u00e9 instances, v produkcii sa ve\u013ek\u00e9 instances pr\u00e1ve hodia.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/19478de23da2278567e66bacef78a0a9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A potom sa vr\u00e1tim sp\u00e4\u0165 k projektu. Bola to zlo\u017eit\u00e1 \u00faloha, infra\u0161trukt\u00fara bola pl\u00e1novan\u00e1 ve\u013emi rozsiahla. A bolo treba nejak rozmiestni\u0165 cel\u00fd k\u00f3d, aby to bolo pohodln\u00e9 pre v\u0161etk\u00fdch: pre t\u00fdch, ktor\u00ed sa staraj\u00fa o tento k\u00f3d, a pre t\u00fdch, ktor\u00ed robia zmeny. Pl\u00e1novalo sa, \u017ee ak\u00fdko\u013evek v\u00fdvoj\u00e1r m\u00f4\u017ee \u00eds\u0165 a opravi\u0165 infra\u0161trukt\u00faru tak, ako to potrebuj\u00fa pre svoju \u010das\u0165 platformy. <\/p>\n<p><\/p>\n<p>Toto je stromov\u00fd diagram adres\u00e1rov, ktor\u00fd odpor\u00fa\u010da samotn\u00fd HashiCorp, ak m\u00e1te ve\u013ek\u00fd projekt a m\u00e1 zmysel rozdeli\u0165 cel\u00fa infra\u0161trukt\u00faru na mal\u00e9 k\u00fasky a ka\u017ed\u00fd k\u00fasok opisova\u0165 v samostatnej zlo\u017eke. <\/p>\n<p><\/p>\n<p>S rozsiahlym kni\u017enicou zdrojov m\u00f4\u017eeme v testovan\u00ed a v produkcii vola\u0165 pribli\u017ene to ist\u00e9. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/c30cdc3d3ce5441bc0ae4a485069dacc.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V na\u0161om pr\u00edpade to nebolo celkom vhodn\u00e9, preto\u017ee testovac\u00ed stack pre v\u00fdvoj\u00e1rov alebo na testovanie bolo potrebn\u00e9 z\u00edska\u0165 nejako jednoduch\u0161ie. Nechcelo sa n\u00e1m prech\u00e1dza\u0165 medzi prie\u010dinkami a aplikova\u0165 ich v spr\u00e1vnom porad\u00ed a ob\u00e1va\u0165 sa, \u017ee sa spust\u00ed datab\u00e1za a potom instance, ktor\u00e1 t\u00fato datab\u00e1zu pou\u017e\u00edva. Preto sa cel\u00fd testing sp\u00fa\u0161\u0165al z jedn\u00e9ho prie\u010dinka. Tam sa volali tie ist\u00e9 moduly, ale prebiehalo to v\u0161etko na jedenkr\u00e1t.<\/p>\n<p><\/p>\n<p>Terraform sa star\u00e1 o v\u0161etky z\u00e1vislosti. A v\u017edy vytv\u00e1ra zdroje v tom porad\u00ed, aby bolo mo\u017en\u00e9 z\u00edska\u0165 IP adresu, napr\u00edklad od novovytvoren\u00e9ho instance a z\u00edska\u0165 t\u00fato IP adresu v route53 z\u00e1zname. <\/p>\n<p><\/p>\n<p>Okrem toho je platforma ve\u013emi ve\u013ek\u00e1. A spustenie testovacieho stacku, aj ke\u010f na hodinu, aj ke\u010f na 8 hod\u00edn \u2013 to je dos\u0165 n\u00e1kladn\u00e9. <\/p>\n<p><\/p>\n<p>A my sme to automatizovali. Jenkins job umo\u017e\u0148oval spusti\u0165 stack. V \u0148om bolo potrebn\u00e9 spusti\u0165 pull request so zmenami, ktor\u00e9 chcel v\u00fdvoj\u00e1r testova\u0165, uvies\u0165 v\u0161etky potrebuje mo\u017enosti, komponenty a aj ve\u013ekosti. Ak chcel performance testovanie, mohol si zobra\u0165 viac instance. Ak potreboval len overi\u0165, \u017ee nejak\u00fd formul\u00e1r sa otv\u00e1ra, mohol spusti\u0165 na minim\u00e1lnych hodnot\u00e1ch. A tie\u017e uvies\u0165, \u010di potrebuje cluster alebo nie, at\u010f. <\/p>\n<p><\/p>\n<p>A potom Jenkins spustil shell skript, ktor\u00fd tro\u0161ku modifikoval k\u00f3d v prie\u010dinku Terraform. Odstra\u0148oval nepotrebn\u00e9 s\u00fabory, prid\u00e1val potrebn\u00e9 s\u00fabory. A potom jedn\u00fdm spusten\u00edm sa prostredn\u00edctvom Terraform apply stack spustil. <\/p>\n<p><\/p>\n<p>A \u010falej u\u017e nasledovali \u010fal\u0161ie kroky, do ktor\u00fdch sa nechcem h\u013abi\u0165. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/b288c0b320d8cb6e282db994bc1c1f43.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kv\u00f4li tomu, \u017ee na testovanie sme potrebovali tro\u0161ku viac mo\u017enost\u00ed, ne\u017e v produkcii, museli sme vytv\u00e1ra\u0165 k\u00f3pie modulov, aby sme do t\u00fdchto k\u00f3pi\u00ed mohli prida\u0165 tie funkcie, ktor\u00e9 s\u00fa potrebn\u00e9 iba v testovan\u00ed. <\/p>\n<p><\/p>\n<p>A tak sa stalo, \u017ee v testovan\u00ed sa akoby chcelo testova\u0165 tie zmeny, ktor\u00e9 potom p\u00f4jdu do produkcie. Ale v skuto\u010dnosti sa testovalo jedno, a v produkcii sa uplat\u0148ovalo tro\u0161ku in\u00e9. A bol tam mal\u00fd rozpor, preto\u017ee v\u0161etky zmeny v produkcii uplat\u0148oval opera\u010dn\u00fd t\u00edm. A niekedy sa stalo, \u017ee zmeny, ktor\u00e9 mali prejs\u0165 z testovania do produkcie, ost\u00e1vali v inej verzii. <\/p>\n<p><\/p>\n<p>Okrem toho sa objavil probl\u00e9m, \u017ee sa prid\u00e1vala nov\u00e1 slu\u017eba, ktor\u00e1 sa trochu odli\u0161ovala od u\u017e existuj\u00facej. Namiesto toho, aby sme modifikovali existuj\u00faci modul, bolo potrebn\u00e9 urobi\u0165 jeho k\u00f3piu a prida\u0165 potrebn\u00e9 zmeny. <\/p>\n<p><\/p>\n<p>V podstate Terraform nie je skuto\u010dn\u00fd jazyk. Je to deklar\u00e1cia. Ak potrebujeme nie\u010do deklarova\u0165, tak to deklarujeme. A v\u0161etko to funguje.<\/p>\n<p><\/p>\n<p>V istom okamihu, ke\u010f sa diskutovalo o jednom z mojich pull requestov, jeden z kolegov povedal, \u017ee netreba mno\u017ei\u0165 snehov\u00e9 vlo\u010dky. Zauj\u00edmalo ma, \u010do t\u00fdm mysl\u00ed. Existuje tak\u00fd vedeck\u00fd fakt, \u017ee na svete niet dvoch rovnak\u00fdch snehov\u00fdch vlo\u010diek, v\u0161etky s\u00fa trochu odli\u0161n\u00e9. A hne\u010f ke\u010f som to po\u010dul, poc\u00edtil som cel\u00fa v\u00e1hu Terraform k\u00f3du. Preto\u017ee ke\u010f bolo potrebn\u00e9 prejs\u0165 z verzie na verziu, Terraform vy\u017eadoval breaking change, t.j. k\u00f3d u\u017e nebol kompatibiln\u00fd s nasleduj\u00facou verziou. A bolo potrebn\u00e9 vykona\u0165 pull request, ktor\u00fd pokr\u00fdval takmer polovicu s\u00faborov v infra\u0161trukt\u00fare, aby sa infra\u0161trukt\u00fara dostala na \u010fal\u0161iu verziu Terraform.<\/p>\n<p><\/p>\n<p>A po tom, ako sa objavila tak\u00e1 snehov\u00e1 vlo\u010dka, cel\u00fd Terraform k\u00f3d, ktor\u00fd sme mali, sa zmenil na obrovsk\u00fa kopu snehu. <\/p>\n<p><\/p>\n<p>Pre extern\u00e9ho v\u00fdvoj\u00e1ra, ktor\u00fd nie je v oper\u00e1ci\u00e1ch, to nem\u00e1 ve\u013ek\u00fd v\u00fdznam, preto\u017ee urobil pull request, jeho zdroj sa spustil. A t\u00fdm to kon\u010d\u00ed, \u010falej sa o to nemus\u00ed stara\u0165. Ale t\u00edmu DevOps, ktor\u00fd db\u00e1 na to, aby v\u0161etko fungovalo spr\u00e1vne, je potrebn\u00e9 vykona\u0165 v\u0161etky tieto zmeny. A cena t\u00fdchto zmien ve\u013emi, ve\u013emi narastala s ka\u017edou pridanou snehovou vlo\u010dkou.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/d07039414027798861d1424bb2c686b6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Existuje pr\u00edbeh o tom, ako \u0161tudent na semin\u00e1ri nakresl\u00ed kriedou na tabuli dva dokonal\u00e9 kruhy. A u\u010dite\u013e sa div\u00ed, ako sa mu podarilo tak presne nakresli\u0165 bez kru\u017eidla. \u0160tudent odpoved\u00e1: \"Ve\u013emi jednoducho, dva roky v arm\u00e1de som kr\u00fatil mlyn\u010dek na m\u00e4so.\" <\/p>\n<p><\/p>\n<p>A z t\u00fdch \u0161tyroch rokov, po\u010das ktor\u00fdch sa z\u00fa\u010dast\u0148ujem na tomto projekte, som asi dva roky venoval Terraformu. A samozrejme, m\u00e1m ur\u010dit\u00e9 tipy a rady, ako zjednodu\u0161i\u0165 Terraform k\u00f3d, pracova\u0165 s n\u00edm ako s programovac\u00edm jazykom a zn\u00ed\u017ei\u0165 za\u0165a\u017eenie v\u00fdvoj\u00e1rov, ktor\u00ed musia udr\u017eiava\u0165 tento k\u00f3d aktu\u00e1lny. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/9413c6adf1933482dcc822b021773df9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Prv\u00e1 vec, o ktorej by som chcel hovori\u0165, s\u00fa symlink. Terraform m\u00e1 ve\u013ea opakuj\u00faceho sa k\u00f3du. Napr\u00edklad, volanie poskytovate\u013ea sa vyskytuje prakticky v ka\u017edom bode, kde vytv\u00e1rame k\u00fasok infra\u0161trukt\u00fary, a je rovnak\u00e9. A je logick\u00e9 presun\u00fa\u0165 ho do samostatnej zlo\u017eky. A v\u0161ade, kde je poskytovate\u013e potrebn\u00fd, urobte symlink na tento s\u00fabor. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/6dcf36cc8c94e7a70cf6ab1456cc1215.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Napr\u00edklad, vo va\u0161ej produkcii sa pou\u017e\u00edva predpokladan\u00e1 rola, ktor\u00e1 v\u00e1m umo\u017e\u0148uje z\u00edska\u0165 pr\u00edstupov\u00e9 pr\u00e1va na nejak\u00fd extern\u00fd Amazon \u00fa\u010det. A zmenou jedn\u00e9ho s\u00faboru bud\u00fa v\u0161etky ostatn\u00e9 v strome zdrojov ma\u0165 po\u017eadovan\u00e9 pr\u00e1va, aby Terraform vedel, na ktor\u00fd segment Amazonu sa odvol\u00e1va. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/6df9a89ef48ae9a7adda7fb1f86b76aa.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kde symlinky nefunguj\u00fa? Ako som u\u017e povedal, v Terraforme s\u00fa state s\u00fabory. A s\u00fa naozaj ve\u013emi, ve\u013emi dobr\u00e9. Ale probl\u00e9m je, \u017ee Terraform inicializuje backend na \u00faplne prvom mieste. A nem\u00f4\u017ee pou\u017ei\u0165 v t\u00fdchto parametroch \u017eiadne premenn\u00e9, v\u017edy ich mus\u00edte p\u00edsa\u0165 textovo. <\/p>\n<p><\/p>\n<p>A ako v\u00fdsledok, ke\u010f niekto vytv\u00e1ra nov\u00fd zdroj, kop\u00edruje \u010das\u0165 k\u00f3du z in\u00fdch zlo\u017eiek. A m\u00f4\u017ee sa pom\u00fdli\u0165 s k\u013e\u00fa\u010dom alebo s bucketom. Napr\u00edklad, vytvor\u00ed nie\u010do zo sandboxu a potom to urob\u00ed v produkcii. A m\u00f4\u017ee sa sta\u0165, \u017ee bucket v produkcii bude pou\u017e\u00edvan\u00fd zo sandboxu. Samozrejme, to sa r\u00fdchlo zist\u00ed. Bude to mo\u017en\u00e9 nejako opravi\u0165, ale aj tak je to strata \u010dasu a do ur\u010ditej miery aj zdrojov. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/757294dc6a1a27fc4a5fe174cc4aa7d7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u010co m\u00f4\u017eeme urobi\u0165 \u010falej? Predt\u00fdm, ako za\u010dneme pracova\u0165 s Terraformom, mus\u00edme ho inicializova\u0165. Po\u010das inicializ\u00e1cie Terraform s\u0165ahuje v\u0161etky pluginy. V istom okamihu sa zmonolitizovali na mikroservisn\u00fa architekt\u00faru. A v\u017edy sa mus\u00ed vykona\u0165 Terraform init, aby s\u0165ahoval v\u0161etky moduly, v\u0161etky pluginy.<\/p>\n<p><\/p>\n<p>A m\u00f4\u017eete pou\u017ei\u0165 shell skript, ktor\u00fd v\u0161ak m\u00f4\u017ee z\u00edska\u0165 v\u0161etky premenn\u00e9. Shell skript nie je nijak obmedzen\u00fd. A po druh\u00e9, cesty. Ak st\u00e1le pou\u017e\u00edvame t\u00fa cestu, ktor\u00e1 je v repozit\u00e1ri ako k\u013e\u00fa\u010d k state s\u00faboru, ergo, chyba tu bude vyl\u00fa\u010den\u00e1. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/b70dbc6d8edb1b255c64d722a7e40680.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Odkia\u013e z\u00edska\u0165 d\u00e1ta? JSON s\u00fabor. Terraform umo\u017e\u0148uje zapisova\u0165 infra\u0161trukt\u00faru nielen v hcl (HashiCorp Configuration Language), ale aj v JSON.<\/p>\n<p><\/p>\n<p>JSON sa \u013eahko \u010d\u00edta z shell skriptu. Preto je mo\u017en\u00e9 umiestni\u0165 konfigura\u010dn\u00fd s\u00fabor s bucketom na nejak\u00e9 miesto. A pou\u017ei\u0165 tento bucket ako v Terraform k\u00f3de, tak aj v shell skripte pre inicializ\u00e1ciu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/a18b92cac763003ec49af8d4a37e19d9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pre\u010do je d\u00f4le\u017eit\u00e9 ma\u0165 bucket pre Terraform? Preto\u017ee existuje nie\u010do ako remote state s\u00fabory. T. j. ke\u010f vytv\u00e1ram nejak\u00fd zdroj, potrebujem poveda\u0165 Amazonu: \u201ePros\u00edm, vytvor instance\u201c, a mus\u00edm uvies\u0165 ve\u013emi ve\u013ea povinn\u00fdch parametrov. <\/p>\n<p><\/p>\n<p>A tieto identifik\u00e1tory s\u00fa ulo\u017een\u00e9 v nejakej inej zlo\u017eke. A m\u00f4\u017eem si poveda\u0165: \u201eTerraform, cho\u010f pros\u00edm do state s\u00faboru toho zdroja a z\u00edskaj mi tieto identifik\u00e1tory\u201c. Tak\u00fdmto sp\u00f4sobom vznik\u00e1 ur\u010dit\u00e1 unifik\u00e1cia medzi r\u00f4znymi regi\u00f3nmi alebo prostrediami.<\/p>\n<p><\/p>\n<p>Nie v\u017edy je mo\u017en\u00e9 pou\u017ei\u0165 vzdialen\u00fd state s\u00fabor. Napr\u00edklad, ak ste ru\u010dne vytvorili VPC. A ten Terraform k\u00f3d, ktor\u00fd vytv\u00e1ra VPC, vytv\u00e1ra tak odli\u0161n\u00fd VPC, \u017ee ho bude trva\u0165 ve\u013emi dlho prisp\u00f4sobova\u0165 jeden druh\u00e9mu, tak\u017ee m\u00f4\u017eeme pou\u017ei\u0165 nasleduj\u00faci trik. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/04ffcd97e2fae323d9b4d81e5f6c751a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>T. j. vytvori\u0165 modul, ktor\u00fd akoby vytv\u00e1ra VPC a akoby v\u00e1m vyd\u00e1va identifik\u00e1tory, ale v skuto\u010dnosti ide len o s\u00fabor so zak\u00f3dovan\u00fdmi hodnotami, ktor\u00fd mo\u017eno vyu\u017ei\u0165 na vytvorenie toho ist\u00e9ho instance.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/9cd878c459f377caf5af9bf27b026187.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nie v\u017edy je potrebn\u00e9 uchov\u00e1va\u0165 state s\u00fabor v cloude. Napr\u00edklad, ke\u010f testujete moduly, m\u00f4\u017eete pou\u017ei\u0165 inicializ\u00e1ciu backendu, pri ktorej bude s\u00fabor ulo\u017een\u00fd jednoducho na disku po\u010das testovania.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/70fee8d4105cfddacafeec00825127b5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teraz trochu o testovan\u00ed. \u010co je mo\u017en\u00e9 testova\u0165 v Terraform? Ur\u010dite toho je ve\u013ea, ale budem hovori\u0165 o t\u00fdchto 4 veciach.<\/p>\n<p><\/p>\n<p>HashiCorp m\u00e1 predstavu o tom, ako by mal by\u0165 k\u00f3d Terraformu naform\u00e1tovan\u00fd. A Terraform fmt v\u00e1m umo\u017e\u0148uje naform\u00e1tova\u0165 k\u00f3d, ktor\u00fd upravujete, v s\u00falade s touto v\u00edziou. Preto testy musia nevyhnutne skontrolova\u0165, \u010di form\u00e1tovanie zodpoved\u00e1 tomu, \u010do zanechal HashiCorp, aby ste nemuseli meni\u0165 umiestnenie z\u00e1tvoriek at\u010f. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/bb99ffdd9f963f0f44ea7b5379689737.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u010eal\u0161ie je Terraform validate. Rob\u00ed nie\u010do viac ako len kontrolu syntaxe \u2013 t. j. \u010di s\u00fa v\u0161etky z\u00e1tvorky p\u00e1rov\u00e9. \u010co je d\u00f4le\u017eit\u00e9? Na\u0161a infra\u0161trukt\u00fara je ve\u013emi rozsiahla. Obsahuje ve\u013emi ve\u013ea r\u00f4znych zlo\u017eiek. A v ka\u017edej je potrebn\u00e9 spusti\u0165 Terraform validate.<\/p>\n<p><\/p>\n<p>Preto, aby sme ur\u00fdchlili testovanie, sp\u00fa\u0161\u0165ame nieko\u013eko procesov paralelne, vyu\u017e\u00edvaj\u00fac paralelitu. <\/p>\n<p><\/p>\n<p>Paralelita je ve\u013emi skvel\u00e1 vec, vyu\u017e\u00edvajte ju.<\/p>\n<p><\/p>\n<p>Ale ka\u017ed\u00fdkr\u00e1t, ke\u010f sa inicializuje Terraform, ide na HashiCorp a p\u00fdta sa: \u201eAk\u00e9 s\u00fa najnov\u0161ie verzie pluginov? A ten plugin, ktor\u00fd m\u00e1m v cache \u2013 je to ten spr\u00e1vny alebo nie?\u201c. A to na ka\u017edom kroku sp\u00f4sobovalo spomalenie. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/836e90327c7a60c493f42f0a055e248b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ak Terraform povieme, kde s\u00fa pluginy, tak Terraform povie: \u201eOk, asi je to najnov\u0161ie, \u010do m\u00e1me. Nep\u00f4jdem nikam, hne\u010f za\u010dnem overova\u0165 v\u00e1\u0161 Terraform k\u00f3d.\u201c<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/8ab344cf8de7087d30a1212d44691c20.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aby sme naplnili prie\u010dinok potrebn\u00fdmi pluginmi, m\u00e1me ve\u013emi jednoduch\u00fd Terraform k\u00f3d, ktor\u00fd sta\u010d\u00ed len inicializova\u0165. Tu je samozrejme potrebn\u00e9 uvies\u0165 v\u0161etk\u00fdch poskytovate\u013eov, ktor\u00ed sa ak\u00fdmko\u013evek sp\u00f4sobom podie\u013eaj\u00fa na va\u0161om k\u00f3de, inak Terraform povie: \u201eNezn\u00e1m nejak\u00e9ho poskytovate\u013ea, preto\u017ee ho nem\u00e1m v cache.\u201c<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/b8130753045624d38bce32ba08b56fb0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u010eal\u0161\u00edm krokom je Terraform plan. Ako som povedal, v\u00fdvoj je cyklick\u00fd. Rob\u00edme k\u00f3d so zmenami. A potom je potrebn\u00e9 zisti\u0165, ak\u00e9 zmeny sa pl\u00e1nuj\u00fa na infra\u0161trukt\u00fare. <\/p>\n<p><\/p>\n<p>A ke\u010f je infra\u0161trukt\u00fara ve\u013emi, ve\u013emi ve\u013ek\u00e1, m\u00f4\u017eete zmeni\u0165 jeden modul, opravit nejak\u00e9 testovacie prostredie alebo nejak\u00fd konkr\u00e9tny regi\u00f3n a rozbi\u0165 nejak\u00fd susedn\u00fd. Preto by sa Terraform plan mal vykon\u00e1va\u0165 na celej infra\u0161trukt\u00fare a ukazova\u0165, ak\u00e9 zmeny sa pl\u00e1nuj\u00fa.<\/p>\n<p><\/p>\n<p>M\u00f4\u017eete to robi\u0165 rozumne. Napr\u00edklad sme nap\u00edsali skript v Pythone, ktor\u00fd rozrie\u0161i z\u00e1vislosti. A v z\u00e1vislosti od toho, \u010do sa zmenilo: Terraform modul alebo len nejak\u00e1 konkr\u00e9tna s\u00fa\u010diastka, vytv\u00e1ra pl\u00e1ny pre v\u0161etky z\u00e1visl\u00e9 prie\u010dinky.<\/p>\n<p><\/p>\n<p>Terraform plan by sa mal robi\u0165 na po\u017eiadanie. Aspo\u0148 to rob\u00edme my. <\/p>\n<p><\/p>\n<p>Testy s\u00fa, samozrejme, dobr\u00e9 robi\u0165 na ka\u017ed\u00fa zmenu, na ka\u017ed\u00fd commit, ale pl\u00e1ny \u2013 to je dos\u0165 n\u00e1kladn\u00e1 z\u00e1le\u017eitos\u0165. A my v pull request hovor\u00edme: \u201ePros\u00edm, daj mi pl\u00e1ny\u201c. Spust\u00ed sa robot. A posiela do koment\u00e1rov alebo pr\u00edloh v\u0161etky pl\u00e1ny, ktor\u00e9 s\u00fa predpokladan\u00e9 z va\u0161ich zmien. <\/p>\n<p><\/p>\n<p>Pl\u00e1n je dos\u0165 n\u00e1kladn\u00fd. Zaber\u00e1 to \u010das, preto\u017ee Terraform ide na Amazon a p\u00fdta sa: \u201eExistuje e\u0161te tento in\u0161tanc? A m\u00e1 tento autoscale skuto\u010dne tak\u00e9 parametre?\u201c. A aby sa to ur\u00fdchlilo, m\u00f4\u017eete pou\u017ei\u0165 tak\u00fd parameter, ako refresh=false. To znamen\u00e1, \u017ee Terraform stiahne zo S3 state. A bude veri\u0165, \u017ee state presne zodpoved\u00e1 tomu, \u010do sa nach\u00e1dza v Amazone.<\/p>\n<p><\/p>\n<p>Tak\u00fd Terraform pl\u00e1n sa vykon\u00e1va ove\u013ea r\u00fdchlej\u0161ie, ale stav mus\u00ed zodpoveda\u0165 va\u0161ej infra\u0161trukt\u00fare, t. j. niekde, niekedy by sa mal spusti\u0165 Terraform refresh. Terraform refresh rob\u00ed presne to, aby stav zodpovedal tomu, \u010do sa nach\u00e1dza v re\u00e1lnej infra\u0161trukt\u00fare. <\/p>\n<p><\/p>\n<p>A treba poveda\u0165 o bezpe\u010dnosti. S t\u00fdmto sa malo za\u010d\u00edna\u0165. Tam, kde sp\u00fa\u0161\u0165ate Terraform a Terraform pracuje s va\u0161ou infra\u0161trukt\u00farou, existuje zranite\u013enos\u0165. T. j. v podstate vykon\u00e1vate k\u00f3d. A ak pull request obsahuje nejak\u00fd \u0161kodliv\u00fd k\u00f3d, m\u00f4\u017ee sa vykona\u0165 v infra\u0161trukt\u00fare, ktor\u00e1 m\u00e1 pr\u00edli\u0161 ve\u013ek\u00fd pr\u00edstup. Preto bu\u010fte opatrn\u00ed, kde sp\u00fa\u0161\u0165ate Terraform pl\u00e1n.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/2153cc01acf2b1f46978f837b82b317e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u010eal\u0161ia t\u00e9ma, o ktorej by som chcel hovori\u0165, je testovanie user-data.<\/p>\n<p><\/p>\n<p>\u010co je to user-data? V Amazon, ke\u010f vytv\u00e1rame in\u0161tanciu, m\u00f4\u017eeme z in\u0161tancie posla\u0165 ak\u00fdsi e-mail \u2013 meta-d\u00e1ta. Ke\u010f sa in\u0161tancia sp\u00fa\u0161\u0165a, obvykle je cloud init v\u017edy pr\u00edtomn\u00fd na t\u00fdchto in\u0161tanci\u00e1ch. Cloud init pre\u010d\u00edta tento e-mail a povie: \u201eO. K., dnes som load balancer\u201c. A v s\u00falade s t\u00fdmito pr\u00edkazmi vykon\u00e1va nejak\u00e9 akcie.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/406ac9341e102f5e0d7ca239d10675cd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ale, bohu\u017eia\u013e, ke\u010f rob\u00edme Terraform pl\u00e1n a Terraform aplik\u00e1ciu, user-data vyzer\u00e1 ako ak\u00e1si ka\u0161a z \u010d\u00edsel. T. j. jednoducho v\u00e1m posiela hash. A v\u0161etko, \u010do m\u00f4\u017eete vidie\u0165 v pl\u00e1ne, s\u00fa zmeny alebo hash zostane rovnak\u00fd. <\/p>\n<p><\/p>\n<p>A ak na to nevenujete pozornos\u0165, m\u00f4\u017ee na Amazon, na re\u00e1lnu infra\u0161trukt\u00faru, od\u00eds\u0165 nejak\u00fd po\u0161koden\u00fd textov\u00fd s\u00fabor. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/cd7b56f1149d9cbebb0ad3228c0eeb5f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ako alternat\u00edva, m\u00f4\u017eete pri vykon\u00e1van\u00ed uvies\u0165 nie cel\u00fa infra\u0161trukt\u00faru, ale len \u0161abl\u00f3nu. A v k\u00f3de poveda\u0165: \u201ePros\u00edm, zobraz mi t\u00fato \u0161abl\u00f3nu\u201c. A nakoniec m\u00f4\u017eete z\u00edska\u0165 vytla\u010denie, ako bud\u00fa vyzera\u0165 va\u0161e d\u00e1ta na Amazone.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/86da779cdf7f9cacfd80a196efde47f7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u010eal\u0161ia mo\u017enos\u0165 je pou\u017ei\u0165 modul na generovanie user-data. Aplikujete tento modul. Z\u00edskate s\u00fabor na disku. Porovn\u00e1te ho s referen\u010dn\u00fdm. A tak, ak nejak\u00fd junior sa rozhodne upravi\u0165 tro\u0161ku user-data, va\u0161e testy povedia: \u201eO. K., tu a tu s\u00fa nejak\u00e9 zmeny \u2013 to je v poriadku\u201c.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/7e69ec1b2c04710066d93ee48f872254.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u010eal\u0161ia t\u00e9ma, o ktorej by som chcel hovori\u0165, je Automate Terraform apply.<\/p>\n<p><\/p>\n<p>Samozrejme, je dos\u0165 stra\u0161ideln\u00e9 vykon\u00e1va\u0165 Terraform apply automaticky, preto\u017ee, kto vie, ak\u00e9 tam pri\u0161li zmeny a ak\u00e9 m\u00f4\u017eu by\u0165 ni\u010div\u00e9 pre \u017eiv\u00fa infra\u0161trukt\u00faru. <\/p>\n<p><\/p>\n<p>Pre testovacie prostredie je to v\u0161etko v poriadku. T. j. job, ktor\u00fd vytv\u00e1ra testovacie prostredie, je to, \u010do potrebuj\u00fa v\u0161etci v\u00fdvoj\u00e1ri. A tak\u00e9 vyjadrenie ako \u201emne v\u0161etko fungovalo\u201c \u2014 to nie je smie\u0161ny meme, ale d\u00f4kaz toho, \u017ee sa \u010dlovek zamyslel, postavil stack, spustil na tento stack nejak\u00e9 testy. A uistil sa, \u017ee je v\u0161etko v poriadku a povedal: \u201eOK, ten k\u00f3d, ktor\u00fd vyd\u00e1vam, bol otestovan\u00fd.\u201c<\/p>\n<p><\/p>\n<p>Vo produkcii, sandboxe a in\u00fdch prostrediach, ktor\u00e9 s\u00fa d\u00f4le\u017eitej\u0161ie pre biznis, je mo\u017en\u00e9 \u010das\u0165 niektor\u00fdch zdrojov aplikova\u0165 pomerne bezpe\u010dne, preto\u017ee to nevedie k tomu, \u017ee niekto zomrie. To s\u00fa: autoscale skupiny, security skupiny, role, route53 a zoznam m\u00f4\u017ee by\u0165 dos\u0165 ve\u013ek\u00fd. Ale sledujte, \u010do sa deje, \u010d\u00edtajte spr\u00e1vy o automatick\u00fdch aplik\u00e1ci\u00e1ch. <\/p>\n<p><\/p>\n<p>Tam, kde je aplik\u00e1cia nebezpe\u010dn\u00e1 alebo sa ob\u00e1vate, napr\u00edklad ak ide o nejak\u00e9 zdroje s persistentn\u00fdm pr\u00edstupom, s datab\u00e1zami, z\u00edskajte spr\u00e1vy o tom, \u017ee v nejakom k\u00fasku infra\u0161trukt\u00fary s\u00fa neaplikovan\u00e9 zmeny. A in\u017einier u\u017e pod dozorom sp\u00fa\u0161\u0165a jobs, aby ich aplikoval, alebo to rob\u00ed z vlastnej konzoly. <\/p>\n<p><\/p>\n<p>V Amazone existuje nie\u010do ako Terminate protection. A m\u00f4\u017ee ochr\u00e1ni\u0165 v niektor\u00fdch pr\u00edpadoch pred nepotrebn\u00fdmi zmenami. T. j. Terraform i\u0161iel na Amazon a hovor\u00ed: \u201ePotrebujem zabi\u0165 tento instance, aby som urobil in\u00fd\u201c. A Amazon hovor\u00ed: \u201ePrep\u00e1\u010dte, dnes nie. M\u00e1me nastaven\u00e9 Terminate protection.\u201c<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/9f4258d8688556829586a1e308f5a1e2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A \u010dere\u0161ni\u010dka na torte \u2013 to je optimaliz\u00e1cia k\u00f3du. Ke\u010f pracujeme s Terraform k\u00f3dom, mus\u00edme do modulu posla\u0165 ve\u013emi ve\u013ek\u00e9 mno\u017estvo parametrov. To s\u00fa tie parametre, ktor\u00e9 s\u00fa potrebn\u00e9 na vytvorenie nejak\u00e9ho zdroja. A k\u00f3d sa men\u00ed na ve\u013ek\u00e9 zoznamy parametrov, ktor\u00e9 je potrebn\u00e9 prenies\u0165 z modulu do modulu, z modulu do modulu, najm\u00e4 ak s\u00fa moduly vnoren\u00e9. <\/p>\n<p><\/p>\n<p>A to je ve\u013emi \u0165a\u017eko \u010ditate\u013en\u00e9. Na tom je ve\u013emi \u0165a\u017ek\u00e9 robi\u0165 review. A ve\u013emi \u010dasto sa st\u00e1va, \u017ee niektor\u00e9 parametre prech\u00e1dzaj\u00fa review a nie s\u00fa \u00faplne tie, ktor\u00e9 s\u00fa potrebn\u00e9. A to stoj\u00ed \u010das a peniaze, aby sa to nesk\u00f4r opravilo.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/ad7e8a91692212fda9f2561854b881c9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Preto v\u00e1m odpor\u00fa\u010dam pou\u017ei\u0165 tak\u00fa vec ako zlo\u017een\u00fd parameter, ktor\u00fd obsahuje ist\u00fa \u0161trukt\u00faru hodn\u00f4t. T. j. potrebujete nejak\u00fa zlo\u017eku, kde s\u00fa uveden\u00e9 v\u0161etky hodnoty, ktor\u00e9 by ste chceli ma\u0165 v nejakom prostred\u00ed.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/909632949eb30057bf86b116239d9077.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A vyvolan\u00edm tohto modulu je mo\u017en\u00e9 z\u00edska\u0165 strom, ktor\u00fd sa generuje v jednom spolo\u010dnom module, t. j. v spolo\u010dnom module, ktor\u00fd funguje rovnako pre cel\u00fa infra\u0161trukt\u00faru.<\/p>\n<p><\/p>\n<p>V tomto module je mo\u017en\u00e9 vykona\u0165 ur\u010dit\u00e9 v\u00fdpo\u010dty, pomocou takej novej funkcie v Terraform, ako s\u00fa locals. A potom jedn\u00fdm outputom v\u00fdda\u0165 nejak\u00fd zlo\u017eit\u00fd parameter, ktor\u00fd m\u00f4\u017ee obsahova\u0165 hashe, polia at\u010f. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/25c14e0397f8d95c301e0dfe6ae761df.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>T\u00fdmto by som chcel skon\u010di\u0165 so v\u0161etk\u00fdmi najlep\u0161\u00edmi n\u00e1lezmi, ktor\u00e9 m\u00e1m. A chcel by som rozpr\u00e1va\u0165 pr\u00edbeh o Kolumbovi. Ke\u010f h\u013eadal peniaze na svoju exped\u00edciu, aby objavil Indiu (ako si vtedy myslel), nikto mu neveril a pova\u017eovali to za nemo\u017en\u00e9. Vtedy povedal: \u201eUrobte tak, aby vajce nespadlo.\u201c V\u0161etci bank\u00e1ri, ve\u013emi bohat\u00ed a pravdepodobne m\u00fadri \u013eudia, sa sna\u017eili nejak\u00fdm sp\u00f4sobom postavi\u0165 vajce, a neust\u00e1le padalo. Potom Kolumbus vzal vajce, trochu na\u0148 pritla\u010dil. \u0160krupina sa deformovala a vajce zostalo nehybn\u00e9. Povedali: \u201eOh, to je pr\u00edli\u0161 jednoduch\u00e9!\u201c. A Kolumbus odpovedal: \u201e\u00c1no, to je pr\u00edli\u0161 jednoduch\u00e9. A ke\u010f objav\u00edm Indiu, v\u0161etci bud\u00fa pou\u017e\u00edva\u0165 t\u00fato obchodn\u00fa cestu.\u201c <\/p>\n<p><\/p>\n<p>A to, \u010do som v\u00e1m teraz povedal, s\u00fa pravdepodobne celkom jednoduch\u00e9 a trivi\u00e1lne veci. A ke\u010f sa o nich dozviete a za\u010dnete ich pou\u017e\u00edva\u0165, je to v poriadku. Tak\u017ee vyu\u017e\u00edvajte ich. A ak s\u00fa pre v\u00e1s to \u00faplne norm\u00e1lne veci, tak aspo\u0148 viete, ako postavi\u0165 vajce, aby nespadlo. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/37bf83d04b99f089f2319c8d2e8aaeb4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zhr\u0148me to: <\/p>\n<p><\/p>\n<ul>\n<li>Sna\u017ete sa vyh\u00fdba\u0165 snehov\u00fdm vlo\u010dk\u00e1m. A t\u00fdm menej snehov\u00fdch vlo\u010diek, t\u00fdm menej zdrojov budete potrebova\u0165 na vykon\u00e1vanie nejak\u00fdch zmien v celej va\u0161ej ve\u013ekej infra\u0161trukt\u00fare. <\/li>\n<li>Trval\u00e9 zmeny. T. j. ke\u010f v k\u00f3de nastali nejak\u00e9 zmeny, je potrebn\u00e9 \u010do najsk\u00f4r prisp\u00f4sobi\u0165 va\u0161u infra\u0161trukt\u00faru t\u00fdmto zmen\u00e1m. Nemala by existova\u0165 situ\u00e1cia, ke\u010f niekto po dvoch-troch mesiacoch pr\u00edde, aby sa pozrel na Elasticsearch, urob\u00ed Terraform plan a tam je mno\u017estvo zmien, s ktor\u00fdmi nepo\u010d\u00edtal. A tr\u00e1vi sa ve\u013emi ve\u013ea \u010dasu na to, aby sa v\u0161etko vr\u00e1tilo do poriadku. <\/li>\n<li>Testy a automatiz\u00e1cia. \u010c\u00edm viac v\u00e1\u0161 k\u00f3d pokr\u00fdvaj\u00fa testy a funkcie, t\u00fdm v\u00e4\u010d\u0161iu m\u00e1te istotu, \u017ee v\u0161etko rob\u00edte spr\u00e1vne. A automatick\u00e1 dod\u00e1vka v\u00e1\u0161 pocit d\u00f4very zna\u010dn\u011b zv\u00fd\u0161i. <\/li>\n<li>K\u00f3d pre testovacie a produk\u010dn\u00e9 prostredie by mal by\u0165 takmer identick\u00fd. Takmer, preto\u017ee produkcia je predsa len trochu in\u00e1 a ur\u010dite tam bud\u00fa nejak\u00e9 nuansy, ktor\u00e9 presahuj\u00fa testovacie prostredie. Napriek tomu, plus m\u00ednus, to mo\u017eno zabezpe\u010di\u0165. <\/li>\n<li>A ak m\u00e1te ve\u013emi ve\u013ea Terraform k\u00f3du a \u00fadr\u017eba tohto k\u00f3du si vy\u017eaduje ve\u013emi ve\u013ea \u010dasu, nikdy nie je neskoro spravi\u0165 refaktoring a uvies\u0165 ho do dobrej formy. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/68f3946536f44eed33939b234fb3ca0d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Immutable infrastructure. Dod\u00e1vka AMI pod\u013ea rozvrhu. <\/li>\n<li>\u0160trukt\u00fara pre Route53, ke\u010f m\u00e1te ve\u013ea z\u00e1znamov a chcete, aby boli v s\u00falade v porad\u00ed. <\/li>\n<li>Boj s API rate limits. To je, ke\u010f Amazon hovor\u00ed: \u201eV\u0161etko, u\u017e viac nem\u00f4\u017eem prij\u00edma\u0165 po\u017eiadavky, pros\u00edm, po\u010dkajte.\u201c A polovica firmy \u010dak\u00e1, k\u00fdm bude m\u00f4c\u0165 spusti\u0165 svoju infra\u0161trukt\u00faru. <\/li>\n<li>Spot instances. Amazon \u2013 nie je to lacn\u00e1 z\u00e1le\u017eitos\u0165 a spoty umo\u017e\u0148uj\u00fa dos\u0165 u\u0161etri\u0165. A tam sa d\u00e1 porozpr\u00e1va\u0165 cel\u00fd refer\u00e1t o tom. <\/li>\n<li>Bezpe\u010dnos\u0165 a IAM role. <\/li>\n<li>H\u013eadanie straten\u00fdch zdrojov, ke\u010f m\u00e1te v Amazone instances nejasn\u00e9ho p\u00f4vodu, ktor\u00e9 v\u00e1m zhltaj\u00fa peniaze. Aj ke\u010f jedna instance stoj\u00ed 100-150 dol\u00e1rov mesa\u010dne \u2013 za rok je to viac ako 1 000. H\u013eadanie tak\u00fdchto zdrojov je ziskov\u00e1 \u010dinnos\u0165. <\/li>\n<li>A rezervovan\u00e9 instances. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0160abl\u00f3ny v Terraform ako boj proti chaosu a manu\u00e1lnej rutine. Maxim Kostrikin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/69ddbf4c726bcc15aea1a1e2d67a3fc8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Na tomto m\u00e1m v\u0161etko. Terraform \u2013 to je ve\u013emi skvel\u00e9, pou\u017e\u00edvajte to. \u010eakujem!<\/p>\n<p><\/p>\n<p>Ot\u00e1zky<\/p>\n<p><\/p>\n<p><em>\u010eakujem za refer\u00e1t! V\u00e1\u0161 state s\u00fabor le\u017e\u00ed v S3, ale ako rie\u0161ite probl\u00e9m, \u017ee nieko\u013eko \u013eud\u00ed ho m\u00f4\u017ee zobra\u0165 a pok\u00fasi\u0165 sa rozbehn\u00fa\u0165?<\/em><\/p>\n<p><\/p>\n<p>Po prv\u00e9, nepon\u00e1h\u013eame sa. Po druh\u00e9, m\u00e1me flagy, kde oznamujeme, \u017ee pracujeme na nejakom \u00faseku k\u00f3du. T.j. napriek tomu, \u017ee infra\u0161trukt\u00fara je ve\u013emi ve\u013ek\u00e1, to neznamen\u00e1, \u017ee st\u00e1le niekto nie\u010do aplikuje. A ke\u010f bola akt\u00edvna f\u00e1za \u2013 to bol probl\u00e9m, mali sme state s\u00fabory v Gite. To bolo d\u00f4le\u017eit\u00e9, inak niekto sprav\u00ed state s\u00fabor a my sme museli ru\u010dne zbiera\u0165 tie hromady, aby v\u0161etko pokra\u010dovalo \u010falej. Teraz tak\u00fd probl\u00e9m nie je. A v\u00f4bec, Terraform t\u00fato \u00falohu vyrie\u0161il. A ak sa nie\u010do neust\u00e1le men\u00ed, m\u00f4\u017eu sa pou\u017ei\u0165 z\u00e1mky, ktor\u00e9 zabra\u0148uj\u00fa tomu, \u010do ste povedali.<\/p>\n<p><\/p>\n<p><em>Pou\u017e\u00edvate otvoren\u00fa verziu alebo enterprise?<\/em><\/p>\n<p><\/p>\n<p>\u017diadne enterprise, t.j. v\u0161etko, \u010do sa d\u00e1 z\u00edska\u0165 a stiahnu\u0165 zadarmo. <\/p>\n<p><\/p>\n<p><em>Vol\u00e1m sa Stanislav. Chcel som doplni\u0165 jednu mal\u00fa pozn\u00e1mku. Hovorili ste o funkcii Amazon, ktor\u00e1 umo\u017e\u0148uje spravi\u0165 in\u0161tanciu nezni\u010dite\u013enou. To je mo\u017en\u00e9 aj v samotnom Terrafome, v bloku Life Second m\u00f4\u017eete ur\u010di\u0165 z\u00e1kaz \u00fapravy alebo z\u00e1kaz zni\u010denia.<\/em> <\/p>\n<p><\/p>\n<p>Bol som \u010dasovo obmedzen\u00fd. Dobr\u00fd postreh. <\/p>\n<p><\/p>\n<p><em>E\u0161te som sa chcel sp\u00fdta\u0165 na dve veci. Po prv\u00e9, hovorili ste o testovan\u00ed. Pou\u017e\u00edvali ste nejak\u00e9 n\u00e1stroje na testovanie? Po\u010dul som o plugine Test Kitchen. Mo\u017eno existuje nie\u010do \u010fal\u0161ie. A chcel by som sa e\u0161te sp\u00fdta\u0165 na Local Values. Ak\u00fd je vlastne ich rozdiel od Input Variables? A pre\u010do nem\u00f4\u017eem parametrizeova\u0165 nie\u010do len cez Local Values? Sna\u017eil som sa t\u00fato t\u00e9mu pochopi\u0165, ale nejako som sa s t\u00fdm nezorientoval.<\/em><\/p>\n<p><\/p>\n<p>M\u00f4\u017eeme podrobnej\u0161ie hovori\u0165 za t\u00fdmto s\u00e1lom. N\u00e1stroje na testovanie \u2013 to u n\u00e1s je \u00fapln\u00fd dom\u00e1ci v\u00fdrobok. Tam nie je ni\u010d tak\u00e9, \u010do by sa dalo otestova\u0165. Existuj\u00fa v\u0161ak mo\u017enosti, kedy automatick\u00e9 testy sp\u00fa\u0161\u0165aj\u00fa infra\u0161trukt\u00faru niekde, kontroluj\u00fa, \u010di je v\u0161etko v poriadku, a potom v\u0161etko zni\u010dia s preh\u013eadom, \u017ee va\u0161a infra\u0161trukt\u00fara je st\u00e1le v dobrom stave. To u n\u00e1s nem\u00e1me, lebo testovacie steky sa sp\u00fa\u0161\u0165aj\u00fa ka\u017ed\u00fd de\u0148. A to je dos\u0165. A ak sa nie\u010do za\u010dne pokazi\u0165, za\u010dne sa to rozpad\u00e1va\u0165 bez toho, aby sme to e\u0161te niekde overovali. <\/p>\n<p><\/p>\n<p>Pokia\u013e ide o Local Values, pokra\u010dujme v rozhovore za s\u00e1lom. <\/p>\n<p><\/p>\n<p><em>Ahoj! \u010eakujem za predn\u00e1\u0161ku! Ve\u013emi pou\u010dn\u00e9. Hovoril si, \u017ee m\u00e1te ve\u013emi ve\u013ea jednor\u00e1zov\u00e9ho k\u00f3du na opis infra\u0161trukt\u00fary. Nezva\u017eovali ste mo\u017enos\u0165 generovania tohto k\u00f3du?<\/em><\/p>\n<p><\/p>\n<p>Skvel\u00e1 ot\u00e1zka, \u010fakujem! V skuto\u010dnosti, ke\u010f pou\u017e\u00edvame infra\u0161trukt\u00faru ako k\u00f3d, predpoklad\u00e1me, \u017ee sa pozer\u00e1me na k\u00f3d a rozumieme, ak\u00e1 infra\u0161trukt\u00fara za t\u00fdmto k\u00f3dom le\u017e\u00ed. Ak sa k\u00f3d generuje, mus\u00edme si predstavi\u0165, ak\u00fd k\u00f3d bude vygenerovan\u00fd, aby sme pochopili, ak\u00e1 infra\u0161trukt\u00fara tam bude. Alebo generujeme k\u00f3d, odosielame ho a v z\u00e1sade dostaneme to ist\u00e9. Preto sme sa vybrali cestou, akou sme nap\u00edsali, to sme dostali. Plus gener\u00e1tory sa objavili nesk\u00f4r, ke\u010f sme u\u017e za\u010dali pracova\u0165. A u\u017e bolo neskoro na zmenu.<\/p>\n<p><\/p>\n<p><em>Po\u010duli ste nie\u010do o jsonnete?<\/em><\/p>\n<p><\/p>\n<p>Nie. <\/p>\n<p><\/p>\n<p><em>Pozri, to je ve\u013emi skvel\u00e1 vec. Vid\u00edm konkr\u00e9tny pr\u00edpad, kde to mo\u017eno vyu\u017ei\u0165 a generova\u0165 \u0161trukt\u00faru d\u00e1t.<\/em> <\/p>\n<p><\/p>\n<p>Gener\u00e1tory s\u00fa skvel\u00e9, ke\u010f m\u00e1te situ\u00e1ciu ako v anekdote o holiacom pr\u00edstroji. T. j. prv\u00fdkr\u00e1t m\u00e1 ka\u017ed\u00fd in\u00e9 tv\u00e1re, ale potom s\u00fa tv\u00e1re v\u0161etk\u00fdch rovnak\u00e9. Gener\u00e1tory sa ve\u013emi dobre pou\u017e\u00edvaj\u00fa. Ale \u017eia\u013e, my m\u00e1me trochu in\u00e9 tv\u00e1re. To je probl\u00e9m. <\/p>\n<p><\/p>\n<p><em>Jednoducho sa pozri. \u010eakujem!<\/em><\/p>\n<p><\/p>\n<p><em>Vol\u00e1m sa Maxim, som zo Sberbank. Trochu ste povedali, \u017ee ste sa sna\u017eili prisp\u00f4sobi\u0165 Terraform anal\u00f3gu programovacieho jazyka. Nie je jednoduch\u0161ie pou\u017e\u00edva\u0165 Ansible?<\/em><\/p>\n<p><\/p>\n<p>To s\u00fa ve\u013emi odli\u0161n\u00e9 veci. M\u00f4\u017eete vytv\u00e1ra\u0165 zdroje aj pomocou Ansible, aj Puppet m\u00f4\u017eete vytv\u00e1ra\u0165 zdroje na Amazone. Ale Terraform je priamo optimalizovan\u00fd. <\/p>\n<p><\/p>\n<p><em>M\u00e1te len Amazon?<\/em><\/p>\n<p><\/p>\n<p>Nie je to o tom, \u017ee m\u00e1me len Amazon. Takmer m\u00e1me len Amazon. Ale k\u013e\u00fa\u010dov\u00e1 funkcia je v tom, \u017ee Terraform si pam\u00e4t\u00e1. V Ansible, ak poviete: \u201eZv\u00fd\u0161 mi 5 in\u0161tanci\u00ed\u201c, tak vytvor\u00ed, a potom poviete: \u201eA teraz potrebujem 3\u201c. A Terraform povie: \u201eOK, 2 zru\u0161\u00edm\u201c, a Ansible povie: \u201eOK, tu m\u00e1\u0161 3\u201c. Tak\u017ee 8.<\/p>\n<p><\/p>\n<p><em>Dobr\u00fd de\u0148! \u010eakujem za va\u0161u prezent\u00e1ciu! Bolo ve\u013emi zauj\u00edmav\u00e9 po\u010du\u0165 o Terraform. Hne\u010f chcem poskytn\u00fa\u0165 mal\u00fd koment\u00e1r k tomu, \u017ee Terraform predsa len nem\u00e1 stabiln\u00fd release, preto bu\u010fte ve\u013emi opatrn\u00ed s Terraform.<\/em><\/p>\n<p><\/p>\n<p>Kde je dobr\u00e9 si d\u00e1va\u0165 pozor na \u010das. T. j. ak potrebujete rie\u0161enie, ob\u010das odlo\u017e\u00edte to, \u010do je nestabiln\u00e9 at\u010f., ale funguje to a pomohlo n\u00e1m to. <\/p>\n<p><\/p>\n<p><em>M\u00e1m tak\u00fa ot\u00e1zku. Pou\u017e\u00edvate Remote backend, pou\u017e\u00edvate S3. Pre\u010do nepou\u017e\u00edvate ofici\u00e1lny backend?<\/em><\/p>\n<p><\/p>\n<p>Ofici\u00e1lny?<\/p>\n<p><\/p>\n<p><em>Terraform Cloud.<\/em><\/p>\n<p><\/p>\n<p>Ke\u010f sa objavil?<\/p>\n<p><\/p>\n<p><em>Pred 4 mesiacmi.<\/em> <\/p>\n<p><\/p>\n<p>Keby sa objavil pred 4 rokmi, pravdepodobne by som odpovedal na va\u0161u ot\u00e1zku.<\/p>\n<p><\/p>\n<p><em>Tam je u\u017e zabudovan\u00e1 funkcia a locky, a m\u00f4\u017eete uchov\u00e1va\u0165 state s\u00fabor. Sk\u00faste to. Ale tie\u017e som to netestoval.<\/em><\/p>\n<p><\/p>\n<p>Ideme ve\u013ek\u00fdm vlakom, ktor\u00fd jazd\u00ed ve\u013ekou r\u00fdchlos\u0165ou. A nem\u00f4\u017eete len tak vzia\u0165 a vyhodi\u0165 nieko\u013eko voz\u0148ov. <\/p>\n<p><\/p>\n<p><em>Hovorili ste o snehov\u00fdch vlo\u010dk\u00e1ch, pre\u010do ste nepou\u017eili branch? Pre\u010do to nevy\u0161lo?<\/em><\/p>\n<p><\/p>\n<p>M\u00e1me tak\u00fd pr\u00edstup, \u017ee cel\u00e1 infra\u0161trukt\u00fara je v jednom repozit\u00e1ri. Terraform, Puppet, v\u0161etky skripty, ktor\u00e9 sa ak\u00fdmko\u013evek sp\u00f4sobom t\u00fdkaj\u00fa tohto, s\u00fa v\u0161etky v jednom repozit\u00e1ri. Takto m\u00f4\u017eeme zaru\u010di\u0165, \u017ee inkrement\u00e1lne zmeny s\u00fa testovan\u00e9 jedna po druhej. Keby to bolo mno\u017estvo branchov, tak\u00fd projekt je takmer nemo\u017en\u00e9 spravova\u0165. Prejd\u00fa pol roka a rozch\u00e1dzaj\u00fa sa nato\u013eko, \u017ee je to proste ne\u00fanosn\u00e9. To je to, \u010domu som sa chcel vyhn\u00fa\u0165 pred refaktorovan\u00edm. <\/p>\n<p><\/p>\n<p><em>T. j. to nefunguje?<\/em><\/p>\n<p><\/p>\n<p>To v\u00f4bec nefunguje.<\/p>\n<p><\/p>\n<p>V branchi som vystrihol slide zlo\u017eky. T. j. ak by sme spravili pre ka\u017ed\u00fd testovac\u00ed stack, napr\u00edklad, t\u00edm A \u2013 m\u00e1 svoju zlo\u017eku, t\u00edm B m\u00e1 svoju zlo\u017eku, tak to tie\u017e nefunguje. Vytvorili sme zjednoten\u00fd k\u00f3d testovacieho prostredia, ktor\u00fd bol dostato\u010dne flexibiln\u00fd, aby vyhovoval v\u0161etk\u00fdm. T. j. jeden k\u00f3d sme spravovali. <\/p>\n<p><\/p>\n<p><em>Ahoj! Vol\u00e1m sa Jura! \u010eakujem za predn\u00e1\u0161ku! M\u00e1m ot\u00e1zku oh\u013eadom modulov. Hovor\u00edte, \u017ee pou\u017e\u00edvate moduly. Ako rie\u0161ite probl\u00e9m, ak v jednom module s\u00fa vykonan\u00e9 zmeny, ktor\u00e9 nie s\u00fa kompatibiln\u00e9 so zmenami inej osoby? Verzionujete moduly nejako, alebo sa sna\u017e\u00edte prisp\u00f4sobi\u0165 \u201evunderwaffle\u201c, aby vyhovovali dvom po\u017eiadavk\u00e1m?<\/em><\/p>\n<p><\/p>\n<p>To je probl\u00e9m ve\u013ek\u00e9ho sne\u017en\u00e9ho kompresora. To je to, \u010d\u00edm trp\u00edme, ke\u010f nejak\u00e1 ne\u0161kodn\u00e1 zmena m\u00f4\u017ee zni\u010di\u0165 nejak\u00fa \u010das\u0165 infra\u0161trukt\u00fary. A to bude vidite\u013en\u00e9 a\u017e po dlh\u0161om \u010dase.<\/p>\n<p><\/p>\n<p><em>T. j. zatia\u013e sa to nijako nerie\u0161i?<\/em><\/p>\n<p><\/p>\n<p>D\u00e1vate univerz\u00e1lne moduly. Vyh\u00fdbajte sa sne\u017eink\u00e1m. A v\u0161etko bude fungova\u0165. Druh\u00e1 polovica predn\u00e1\u0161ky je o tom, ako sa tomu vyhn\u00fa\u0165.<\/p>\n<p><\/p>\n<p><em>Dobr\u00fd de\u0148! \u010eakujem za predn\u00e1\u0161ku! Chcel by som overi\u0165 jednu vec. Za sc\u00e9nou zostala ve\u013ek\u00e1 k\u00f4pka, kv\u00f4li ktorej som pri\u0161iel. Ak\u00fdm sp\u00f4sobom s\u00fa integrovan\u00e9 Puppet a rozd\u00e1vanie rol\u00ed?<\/em><\/p>\n<p><\/p>\n<p>User-data.<\/p>\n<p><\/p>\n<p><em>T. j. len jednoducho vyhod\u00edte s\u00fabor a na jeho z\u00e1klade to nejako vykon\u00e1vate?<\/em><\/p>\n<p><\/p>\n<p>User-data je pozn\u00e1mka, t. j. ke\u010f vytv\u00e1rame klon obrazu, tak sa spust\u00ed Daemon a sna\u017e\u00ed sa zisti\u0165, kto je, \u010d\u00edta pozn\u00e1mku, \u017ee je load balancer.<\/p>\n<p><\/p>\n<p><em>T. j. ide o nejak\u00fd samostatn\u00fd proces, ktor\u00fd sa odovzd\u00e1va?<\/em><\/p>\n<p><\/p>\n<p>My sme ho nevymysleli. Pou\u017e\u00edvame ho. <\/p>\n<p><\/p>\n<p><em>Dobr\u00fd de\u0148! M\u00e1m ot\u00e1zku oh\u013eadom User-data. Povedali ste, \u017ee tam s\u00fa probl\u00e9my, \u017ee niekto m\u00f4\u017ee nie\u010do posla\u0165 na nespr\u00e1vne miesto. Existuje nejak\u00fd sp\u00f4sob, ako uchov\u00e1va\u0165 user-data v tom istom Gite, aby v\u017edy bolo jasn\u00e9, na \u010do sa User-data odkazuje?<\/em><\/p>\n<p><\/p>\n<p>Generujeme User-data z \u0161abl\u00f3ny. To znamen\u00e1, \u017ee sa pou\u017e\u00edvaj\u00fa ur\u010dit\u00e9 premenn\u00e9. A Terraform generuje kone\u010dn\u00fd v\u00fdsledok. Preto sa ned\u00e1 len tak pozrie\u0165 na \u0161abl\u00f3nu a poveda\u0165, \u010do dostaneme, preto\u017ee v\u0161etky probl\u00e9my s\u00fa spojen\u00e9 s t\u00fdm, \u017ee v\u00fdvoj\u00e1r si mysl\u00ed, \u017ee do tejto premennej posiela string, a pri tom sa dod\u00e1va pole. A zrazu - bum, a ja -ten, ten, \u010fal\u0161\u00ed riadok, a v\u0161etko sa rozpadlo. Ak je to nov\u00fd zdroj a \u010dlovek ho nasadzuje, uvid\u00ed, \u017ee nie\u010do nefunguje, to sa r\u00fdchlo vyrie\u0161i. Ale ak sa aktualizuje autoscale-skupina, tak v ur\u010ditom momente sa in\u0161tancie v autoscale-skupine za\u010dn\u00fa meni\u0165. A hop, nie\u010do nefunguje. To je nepr\u00edjemn\u00e9.<\/p>\n<p><\/p>\n<p><em>Tak\u017ee jedin\u00e9 rie\u0161enie je testova\u0165?<\/em><\/p>\n<p><\/p>\n<p>\u00c1no, vid\u00edte probl\u00e9m, prid\u00e1vate tam testovacie kroky. To znamen\u00e1, \u017ee sa d\u00e1 testova\u0165 aj output. Mo\u017eno to nie je tak pohodln\u00e9, ale tie\u017e sa daj\u00fa nastavi\u0165 nejak\u00e9 zna\u010dky - kontrolujte, \u017ee User-data tu je pribit\u00e9 h\u0159eb\u00edkom. <\/p>\n<p><\/p>\n<p><em>Vol\u00e1m sa Timur. Je super, \u017ee s\u00fa predn\u00e1\u0161ky o tom, ako spr\u00e1vne organizova\u0165 Terraform.<\/em><\/p>\n<p><\/p>\n<p>E\u0161te som ani neza\u010dal.<\/p>\n<p><\/p>\n<p><em>Mysl\u00edm si, \u017ee na \u010fal\u0161ej konferencii by to mohlo by\u0165. M\u00e1m jednoduch\u00fa ot\u00e1zku. Pre\u010do hardkodujete hodnotu v samostatnom module, namiesto pou\u017eitia tfvars, t.j. \u010d\u00edm je lep\u0161\u00ed modul so hodnotami, ne\u017e tfvars?<\/em><\/p>\n<p><\/p>\n<p>T.j. mus\u00edm tu (sn\u00edmak: Production\/environment\/settings.tf) nap\u00edsa\u0165: domain = premenna, domain vpcnetwork, premenna vpcnetwork a stvars - z\u00edska\u0165 to ist\u00e9?<\/p>\n<p><\/p>\n<p><em>Rob\u00edme to presne takto. Odkazujeme na zdroj nastaven\u00ed modulu, napr\u00edklad.<\/em><\/p>\n<p><\/p>\n<p>V podstate je to tak\u00fd tfvars. Tfvars je ve\u013emi pohodln\u00fd v testovacom prostred\u00ed. M\u00e1m tfvars pre ve\u013ek\u00e9 in\u0161tancie, pre mal\u00e9. A jeden s\u00fabor som hodil do prie\u010dinka. A dostal som to, \u010do som chcel. Ke\u010f vyv\u00edjame infra\u0161trukt\u00faru, chceme, aby sme sa mohli pozrie\u0165 a ihne\u010f v\u0161etko pochopi\u0165. Takto je to, \u017ee sa pozriete sem, potom pozriete do tfvars.<\/p>\n<p><\/p>\n<p><em>Tak\u017ee, aby v\u0161etko bolo na jednom mieste?<\/em><\/p>\n<p><\/p>\n<p>\u00c1no, tfvars - to je ke\u010f m\u00e1te jeden k\u00f3d. A ten sa pou\u017e\u00edva na viacer\u00fdch r\u00f4znych miestach s r\u00f4znymi nuansami. Potom by ste tfvars hodili a dostali svoje nuansy. A my - to je infra\u0161trukt\u00fara ako k\u00f3d v \u010distej forme. Pozreli ste sa a pochopili. <\/p>\n<p><\/p>\n<p><em>Ahoj! Stretli ste sa niekedy so situ\u00e1ciami, ke\u010f cloudov\u00fd poskytovate\u013e zasahuje do toho, \u010do ste vytvorili pomocou Terraform? Povedzme, \u017ee upravujeme meta\u00fadaje. S\u00fa tam ssh k\u013e\u00fa\u010de. A Google neust\u00e1le prid\u00e1va svoje meta\u00fadaje a k\u013e\u00fa\u010de. A Terraform v\u017edy p\u00ed\u0161e, \u017ee m\u00e1 nejak\u00e9 zmeny. Po ka\u017edom spusten\u00ed, aj ke\u010f sa ni\u010d nemen\u00ed, v\u017edy hovor\u00ed, \u017ee toto pole teraz aktualizuje.<\/em><\/p>\n<p><\/p>\n<p>S k\u013e\u00fa\u010dmi, ale \u00e1no, \u010das\u0165 infra\u0161trukt\u00fary je ovplyvnen\u00e1 takouto vecou, teda Terraform ni\u010d nem\u00f4\u017ee zmeni\u0165. Ani my sami nem\u00f4\u017eeme ni\u010d zmeni\u0165. Zatia\u013e \u017eijeme s t\u00fdmto.<\/p>\n<p><\/p>\n<p><em>Teda ste sa s t\u00fdmto u\u017e stretli, ale ni\u010d ste nevymysleli, on to rob\u00ed s\u00e1m, aj tak?<\/em><\/p>\n<p><\/p>\n<p>Bohu\u017eia\u013e, \u00e1no. <\/p>\n<p><\/p>\n<p><em>Ahoj! Vol\u00e1m sa Stanislav Starkov. Mail.ru Group. Ako rie\u0161ite probl\u00e9m s generovan\u00edm tagu na \u2026, ako ho pren\u00e1\u0161ate dnu? Ch\u00e1pem to spr\u00e1vne, cez User-data, aby ste uviedli n\u00e1zov hostite\u013ea, nasmerova\u0165 Puppet? A druh\u00e1 \u010das\u0165 ot\u00e1zky. Ako rie\u0161ite tento probl\u00e9m v SG, teda ke\u010f generujete SG, stovku rovnak\u00fdch instances, ako ich spr\u00e1vne pomenova\u0165?<\/em><\/p>\n<p><\/p>\n<p>Tieto instances, ktor\u00e9 s\u00fa pre n\u00e1s ve\u013emi d\u00f4le\u017eit\u00e9, pomen\u00favame pekne. Tieto, ktor\u00e9 nie s\u00fa potrebn\u00e9, tam bude priezvisko, \u017ee je to autoscale skupina. A teoreticky to mo\u017eno zabi\u0165 a z\u00edska\u0165 nov\u00e9. <\/p>\n<p><\/p>\n<p>\u010co sa t\u00fdka probl\u00e9mu s tagom, tak nie je to probl\u00e9m, ale \u00faloha. A tagy s\u00fa u n\u00e1s ve\u013emi, ve\u013emi silno pou\u017e\u00edvan\u00e9, preto\u017ee infra\u0161trukt\u00fara je ve\u013ek\u00e1 a drah\u00e1. Potrebujeme sledova\u0165, na \u010do id\u00fa peniaze, preto tagy umo\u017e\u0148uj\u00fa zmapova\u0165, \u010do a kam i\u0161lo. A pod\u013ea toho h\u013eada\u0165, kde sa m\u00ed\u0148a ve\u013ea pe\u0148az\u00ed. <\/p>\n<p><\/p>\n<p>O \u010dom bol e\u0161te ot\u00e1zka?<\/p>\n<p><\/p>\n<p><em>Ke\u010f SG vytvor\u00ed stovku instances, treba ich nejako rozli\u0161ova\u0165?<\/em><\/p>\n<p><\/p>\n<p>Nie, netreba. Na ka\u017edom instance je agent, ktor\u00fd hl\u00e1si, \u017ee m\u00e1m probl\u00e9m. Ak agent hl\u00e1si, tak o \u0148om agent vie a aspo\u0148 jeho IP adresa existuje. U\u017e sa d\u00e1 nie\u010do urobi\u0165. Po druh\u00e9, pou\u017e\u00edvame Consul na Discovery, tam, kde nie je Kubernetes. A Consul tie\u017e ukazuje IP adresu instance.<\/p>\n<p><\/p>\n<p><em>Teda orientujete sa presne na IP, a nie na n\u00e1zov hostite\u013ea?<\/em><\/p>\n<p><\/p>\n<p>Nie je mo\u017en\u00e9 orientova\u0165 sa pod\u013ea n\u00e1zvu hostite\u013ea, je ich pr\u00edli\u0161 ve\u013ea. Existuj\u00fa identifik\u00e1tory instance \u2013 AE a podobne. M\u00f4\u017eete ho niekde n\u00e1js\u0165, m\u00f4\u017eete ho hodi\u0165 do vyh\u013ead\u00e1vania. <\/p>\n<p><\/p>\n<p><em>Ahoj! Pochopil som, \u017ee Terraform je dobr\u00e1 vec, zameran\u00e1 na cloudy.<\/em> <\/p>\n<p><\/p>\n<p>Nie len to. <\/p>\n<p><\/p>\n<p><em>Toto je ot\u00e1zka, ktor\u00e1 ma zauj\u00edma. Ak sa rozhodnete hromadne prejs\u0165 na Bare Metal so v\u0161etk\u00fdmi svojimi instanciami, nebud\u00fa \u017eiadne probl\u00e9my? Alebo budete musie\u0165 pou\u017ei\u0165 in\u00e9 produkty, ako napr\u00edklad Ansible, ktor\u00fd tu bol spomenut\u00fd?<\/em><\/p>\n<p><\/p>\n<p>Ansible je tro\u0161ku nie\u010do in\u00e9. T. j. Ansible funguje, ke\u010f sa in\u0161tancia spustila. A Terraform funguje pred t\u00fdm, ako sa in\u0161tancia spustila. Prechod na Bare Metal \u2013 nie. <\/p>\n<p><\/p>\n<p><em>Teraz nie, ale pr\u00edde biznis a povie: \u201ePo\u010fme na to\u201c.<\/em><\/p>\n<p><\/p>\n<p>Prechod na in\u00fd cloud \u2013 \u00e1no, ale tu je to trochu in\u00e9. Treba nap\u00edsa\u0165 Terraform k\u00f3d tak, aby prechod na in\u00fd cloud bol \u010do najjednoduch\u0161\u00ed. <\/p>\n<p><\/p>\n<p>P\u00f4vodne bola \u00faloha tak\u00e1, \u017ee na\u0161a cel\u00e1 infra\u0161trukt\u00fara je agnostick\u00e1, t. j. ak\u00fdko\u013evek cloud by mal fungova\u0165, ale v ur\u010ditom momente biznis rezignoval a povedal: \u201eOK, v najbli\u017e\u0161\u00edch N rokoch nikam neod\u00eddeme, m\u00f4\u017eeme pou\u017e\u00edva\u0165 slu\u017eby od Amazonu\u201c.<\/p>\n<p><\/p>\n<p>Terraform umo\u017e\u0148uje vytv\u00e1ra\u0165 v Front-End jobs, konfigurova\u0165 PagerDuty, data doc at\u010f. M\u00e1 toho naozaj ve\u013ea. Prakticky m\u00f4\u017ee kontrolova\u0165 cel\u00fd svet.<\/p>\n<p><\/p>\n<p><em>\u010eakujem za prezent\u00e1ciu! U\u017eil som si u\u017e aj 4 roky pr\u00e1cu s Terraform. Pri hladkom prechode na Terraform, na infra\u0161trukt\u00faru, na deklarat\u00edvny popis, sme sa stretli so situ\u00e1ciou, ke\u010f niekto nie\u010do robil manu\u00e1lne a vy ste sa sna\u017eili urobi\u0165 pl\u00e1n. A dostali ste nejak\u00fa chybu. Ako tak\u00e9 probl\u00e9my rie\u0161ite? Ako n\u00e1jdete straten\u00e9 zdroje, ktor\u00e9 boli uveden\u00e9?<\/em><\/p>\n<p><\/p>\n<p>Hlavne manu\u00e1lne, pomocou na\u0161ich o\u010d\u00ed, ak vid\u00edme v spr\u00e1ve nie\u010do zvl\u00e1\u0161tne, analyzujeme, \u010do sa deje, alebo to jednoducho zru\u0161\u00edme. A vo v\u0161eobecnosti, pull requesty s\u00fa be\u017en\u00e1 vec. <\/p>\n<p><\/p>\n<p><em>Ak sa objav\u00ed chyba, rob\u00edte rollback? Sk\u00fa\u0161ali ste to?<\/em><\/p>\n<p><\/p>\n<p>Nie, to je rozhodnutie \u010dloveka v momente, ke\u010f vid\u00ed probl\u00e9m.<\/p>\n<p>Zdroj: <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.3 - 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\/sk\/blog\/administrirovanie\/patterny-v-terraform-dlya-borby-s-haosom-i-ruchnoj-rutinoj-maksim-kostrikin-ixtens\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\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\/sk\/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\udd47Vzory v Terraform pre boj s chaosom a manu\u00e1lnou rutinou. Maxim Kostrikin (Ixtens) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sk\/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":"sk_SK","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\/sk\/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\/sk\/wp-json\/wp\/v2\/posts\/98123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=98123"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/98123\/revisions"}],"predecessor-version":[{"id":164071,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/98123\/revisions\/164071"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/98124"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=98123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=98123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=98123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}