{"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":"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (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 AWS-i infrastruktuuri haldamiseks piisavalt mugavaid parimaid praktikaid. Kuid on \u00fcks n\u00fcanss. Aja jooksul suureneb keskkondade arv, igas neist on omad erip\u00e4rad. Peaaegu on muutunud rakenduste virn kopeerimiseks naaberriigis. Ja Terraformi kood tuleb ettevaatlikult kopeerida ja kohandada vastavalt uutele n\u00f5udmistele v\u00f5i teha lumeflokk.<\/p>\n<p><\/p>\n<p>Minu esitus on Terraformi mustrite kohta, et v\u00f5idelda kaosetunne 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=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/8c67c45e486d6c03793dd08c33a16313.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Olen 40 aastat vana, 20 aastat IT valdkonnas. 12 aastat t\u00f6\u00f6tan ettev\u00f5ttes Ixtens. Me tegeleme e-kaubanduse arendamisega. Viis aastat olen praktiseerinud DevOpsi praktikaid.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/8b14b3adaa45d69278d76580baa99042.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Minu jutt k\u00e4sitleb kogemust projektis ettev\u00f5ttes, mille nime ma ei \u00fctle, l\u00e4htudes konfidentsiaalsuslepingust. <\/p>\n<p><\/p>\n<p>Slaidil olevad numbrid on esitatud, et m\u00f5ista projekti ulatust. Ja k\u00f5ik, mida ma edaspidi \u00fctlen, on seotud Amazoniga.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/3742217a2abaf1fcf2163979d82eac14.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Liitusin selle projektiga neli aastat tagasi. Ja k\u00f5ige viljakamal hetkel toimus infrastruktuuri refaktoreerimine, kuna projekt kasvas. Ja neid mustreid, mida kasutati, ei olnud enam sobivad. Arvestades kogu planeeritud projekti kasvu, tuli midagi uut v\u00e4lja m\u00f5elda. <\/p>\n<p><\/p>\n<p>Ait\u00e4h Matveile, kes r\u00e4\u00e4kis eile, mis Dodo Pizzas juhtus. See on see, mis meil juhtus 4 aastat tagasi. <\/p>\n<p><\/p>\n<p>Tulid arendajad ja hakkasid tegema infrastruktuurikoodi. <\/p>\n<p><\/p>\n<p>K\u00f5ige ilmsemad p\u00f5hjused, miks see oli vajalik, olid time to market. Pidi olema nii, et DevOps meeskond ei oleks pudelikael v\u00e4ljalaskmisel. Ja lisaks k\u00f5igele muule kasutati esimesel tasemel Terraformi ja Puppetit.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/13d6df6a324d2e1162acef77ca2ad0dc.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Terraform on HashiCorpi open source projekt. Ja neile, kes \u00fcldse ei tea, mis see on, j\u00e4rgnevad m\u00f5ned slaidid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (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 m\u00f5nel robotil teha nii, et saaksime need ressursid, mida oleme kirjeldanud.<\/p>\n<p><\/p>\n<p>N\u00e4iteks, meil on vaja <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/et\/vps\/abuzoustojchivye-vps\/\"   title=\"virtuaalne masin\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"4196\">virtuaalne masin<\/a>. Me kirjeldame, lisame m\u00f5ned kohustuslikud parameetrid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (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 plaane teha. Terraform plan \u00fctleb: \"Okei, teie ressursi jaoks saame teha selliseid asju.\" Ja v\u00e4hemalt \u00fcks ressurss lisatakse. Ja muudatusi ei ole oodata. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/879e645596121ee5d05ac247b4be19ee.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui k\u00f5ik on teie jaoks sobiv, saate k\u00fcsida Terraform apply, ja Terraform loob teile instantsi ning saate oma virtuaalse masina oma pilves.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/77b7fe4d6abcc9116233f48caa887465.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Edasi arendame meie projekti. Lisame sinna teatud muudatusi. K\u00fcsime rohkem instante, lisame 53 kirje.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/98ce7e1f9d1f85aa5e78c269a0708ac1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja kordame. K\u00fcsime plaani. N\u00e4eme, milliseid muudatusi kavandatakse. Rakendame. Nii kasvab meie infrastruktuur. <\/p>\n<p><\/p>\n<p>Terraform kasutab sellist asja nagu state-failid. See t\u00e4hendab, et k\u00f5ik muudatused, mis tehakse Amazonis, salvestatakse failis, kus iga kirjelduse jaoks, mida olete esitanud, on vastavad ressursid, mis on Amazonis loodud. Nii teab Terraform t\u00e4pselt, mida muuta, kui \u00fckski ressurss muutub.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/6e83efffb7af6ab967b4716be170b47b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Need state-failid olid algselt lihtsalt failid. Ja me hoidsime neid Git'is, mis oli \u00e4\u00e4rmiselt ebamugav. Alati unustas keegi muudatusi commitida ja palju konflikte tekkis. <\/p>\n<p><\/p>\n<p>N\u00fc\u00fcd on v\u00f5imalik kasutada tagastamist, st Terraform'ile \u00f6eldakse, millisesse bucket'isse ja missuguse v\u00f5tme alla state-fail salvestada. Ja Terraform hoolitseb ise sellest, et see state-fail v\u00e4lja v\u00f5tta, kogu maagia teha ja tagasi panna l\u00f5pliku tulemuse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (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. Me ei soovi enam lihtsalt virtuaalmasinat luua, vaid soovime luua testkeskkonna.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (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 selliseid mooduleid, st kirjeldada samu komponente mingis kaustas.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/95c8395b10142fe550b0719161211f15.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00e4iteks testimisel saab kutsuda selle mooduli ja saada sama tulemuse, nagu oleksime k\u00e4ivitanud Terraformi rakenduse moodulis. Testimiseks saab selline kood olema.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/fa4c16e3835a4507a858d2ddb767daf3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tootmises saame saata sinna mingeid muudatusi, sest testimisel ei vaja me suuri instance, tootmises aga on suured instance vajalikud.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/19478de23da2278567e66bacef78a0a9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja siis naasen tagasi projekti. \u00dclesanne oli keeruline; infrastruktuur oli planeeritud v\u00e4ga suureks. K\u00f5ik kood oli kuidagi organiseerida nii, et see oleks mugav k\u00f5igile: nii neile, kes tegelevad selle koodi hooldamisega, kui ka neile, kes muudatusi teevad. Planeeritud oli, et iga arendaja saab minna ja kohandada infrastruktuuri vastavalt sellele, mis on vajalik tema osa platvormist. <\/p>\n<p><\/p>\n<p>See on kaustade puu, mida soovitab HashiCorp, kui teil on suur projekt ja on m\u00f5istlik jagada kogu infrastruktuur v\u00e4iksemateks osadeks ning kirjeldada iga osa eraldi kaustas. <\/p>\n<p><\/p>\n<p>Ulatuslikud ressurside raamatukogud v\u00f5imaldavad testimisel ja tootmises kutsuda ligikaudu sama. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/c30cdc3d3ce5441bc0ae4a485069dacc.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Meie puhul see ei sobinud, kuna arendajate v\u00f5i testimiseks m\u00f5eldud testimine pidi olema lihtsam. Oli ebamugav jalutada kaustades ja rakendada asju \u00f5iges j\u00e4rjekorras ning muretseda, et aluseks t\u00f5useb, ja seej\u00e4rel t\u00f5useb instants, mis seda baasi kasutab. Seet\u00f5ttu k\u00e4ivitati kogu testimine \u00fchest kaustast. Seal kutsuti v\u00e4lja samad moodulid, kuid k\u00f5ik toimus \u00fche jooksuga.<\/p>\n<p><\/p>\n<p>Terraform hoolitseb k\u00f5igi s\u00f5ltuvuste eest. Ja loob alati ressursse sellises j\u00e4rjekorras, et saaks n\u00e4iteks v\u00e4rskelt loodud instantsilt IP-aadressi ja lisada selle IP-aadressi Route53 kirja. <\/p>\n<p><\/p>\n<p>Lisaks sellele on platvorm v\u00e4ga suur. Ja testimisstacki k\u00e4ivitamine, isegi kui ainult \u00fcheks tunniks, isegi kui kaheks tunniks \u2014 see on \u00fcsna kulukas ettev\u00f5tmine. <\/p>\n<p><\/p>\n<p>Ja me automatiseerisime selle. Jenkinsi t\u00f6\u00f6 v\u00f5imaldas k\u00e4ivitada steki. Seal pidi k\u00e4ivitama pull request'i koos muudatustega, mida arendaja soovib testida, m\u00e4\u00e4rama k\u00f5ik vajalikud valikud, komponendid ja suurused. Kui ta soovib teha j\u00f5udlustesti, saab ta v\u00f5tta rohkem instantsse. Kui tal on vaja lihtsalt kontrollida, et m\u00f5ni vorm avaneb, siis sai ta alustada minimaalsetest seadistustest. Samuti sai m\u00e4\u00e4rata, kas klaster on vajalik v\u00f5i mitte jne. <\/p>\n<p><\/p>\n<p>Siis surus Jenkins shell-skripti, mis modifitseeris koodi Terraformi kaustas natuke. Eemaldas vajalikud failid, lisas vajalikud failid. Ja siis \u00fche k\u00e4ivitusega Terraform apply t\u00f5stis steki \u00fcles. <\/p>\n<p><\/p>\n<p>Edasi liikudes j\u00e4rgnesid muud sammud, millesse ma ei soovi s\u00fcveneda. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/b288c0b320d8cb6e282db994bc1c1f43.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuna testimiseks vajasime natuke rohkem valikuid kui tootmises, pidime tegema koopiad moodulitest, et neis koopiates saaksime lisada need funktsioonid, mis on vajalikud ainult testimisel. <\/p>\n<p><\/p>\n<p>Nii juhtus, et testimise k\u00e4igus tahame tavaliselt katsetada neid muudatusi, mis l\u00f5puks j\u00f5uavad tootmisse. Kuid tegelikult testiti \u00fchte ja tootmisse rakendati natuke teist. See p\u00f5hjustas v\u00e4ikese m\u00f5ttekao, et tootmises rakendati k\u00f5ik muudatused operatsioonide meeskonna poolt. Ja m\u00f5nikord juhtus, et need muudatused, mis pidid testimisest tootmisse minema, j\u00e4id hoopis teise versiooni. <\/p>\n<p><\/p>\n<p>Lisaks oli probleemiks see, et lisandus uus teenus, mis erines veidi juba olemasolevast. Ja selle asemel, et olemasolevat moodulit muuta, tuli teha selle koopia ja lisada vajalikud muudatused. <\/p>\n<p><\/p>\n<p>Sisuliselt on Terraform mitte tegelik keel, vaid deklaratsioon. Kui me peame midagi deklareerima, siis me deklareerime selle. Ja k\u00f5ik see t\u00f6\u00f6tab.<\/p>\n<p><\/p>\n<p>\u00dchel hetkel, kui arutati \u00fcht minu pull request'i, \u00fctles \u00fcks kolleeg, et ei tohiks luua liialt palju lumehelbeid. Mind huvitas, mida ta selle all m\u00f5tles. On olemas teaduslik fakt, et maailmas ei ole kaht \u00fchesugust lumehelbekest, k\u00f5ik need on natuke erinevad. Ja kui ma seda kuulsin, tajusin kohe Terraform'i koodi raskust. Sest kui tuli minna versioonilt versioonile, n\u00f5udis Terraform katkestamise ahelate muutmist, st kood ei olnud enam j\u00e4rgmise versiooniga \u00fchilduv. Ja pidin tegema pull request'i, mis h\u00f5lmas peaaegu poole infrastruktuuri failidest, et tuua infrastruktuur j\u00e4rgmise Terraform'i versioonini.<\/p>\n<p><\/p>\n<p>Ja p\u00e4rast seda, kui selline lumehelbekene tekkis, muutus kogu meie Terraform'i kood suureks lumekuhjaks. <\/p>\n<p><\/p>\n<p>V\u00e4limise arendaja jaoks, kes ei ole operatsioonide sesioonis, pole sel suurt t\u00e4htsust, kuna ta tegi pull request'i, tema ressurss k\u00e4ivitati. Ja k\u00f5ik, edasi pole see tema mure. Aga DevOps'i meeskonnale, kes hoolitseb selle eest, et k\u00f5ik oleks korras, tuleb teha need k\u00f5ik muudatused. Ja nende muudatuste maksumus suurenes iga lisalumehelbe korral.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/d07039414027798861d1424bb2c686b6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>On see selline lugu, kuidas \u00fcli\u00f5pilane seminaril joonistab kriidiga tahvlile kaks ideaalset ringi. Ja \u00f5petaja imestab, kuidas tal \u00f5nnestus nii \u00fchtlaselt ilma kompassita joonistada. \u00dcli\u00f5pilane vastab: \u00abV\u00e4ga lihtne, ma keerutasin kaks aastat armees hakklihamasinat.\u00bb <\/p>\n<p><\/p>\n<p>Nendest neljast aastast, mil ma selles projektis osalen, olen umbes kaks aastat tegelenud Terraformiga. Ja muidugi on mul m\u00f5ned nipid, m\u00f5ned soovitused, kuidas Terraformi koodi lihtsustada, t\u00f6\u00f6tada sellega nagu programmeerimiskeelega ja v\u00e4hendada koormust arendajatele, kes peavad seda koodi ajakohasena hoidma. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (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 Symlinkid. Terraformil on palju korduvat koodi. N\u00e4iteks pakkuja kutsumine on praktiliselt igas punktis, kus me loome t\u00fckikese infrastruktuurist, sama. Seega on m\u00f5istlik see eraldi kausta v\u00e4lja v\u00f5tta. Ja igal pool, kus on vaja pakkujat, luua sellele failile Symlinkid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (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 production'is assume role, mis v\u00f5imaldab teil p\u00e4\u00e4seda ligi v\u00e4lisele Amazon-kontole. Ja muutes \u00fcht faili, omavad k\u00f5ik \u00fclej\u00e4\u00e4nud, mis asuvad ressursside puus, vajalikke \u00f5igusi, et Terraform teaksite, millisele Amazon-segmendile ligi p\u00e4\u00e4seda. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (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 asi on selles, et Terraform inizialiseerib backend'i esimeses j\u00e4rjekorras. Ja ta ei saa kasutada nende parameetrites mingeid muutujaid, need peavad alati olema kirjutatud tekstina. <\/p>\n<p><\/p>\n<p>Ja l\u00f5ppkokkuv\u00f5ttes, 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 sandbox'st sandbox-asja ja seej\u00e4rel teeb production'is. Ja niiviisi v\u00f5ib osutuda, et production'is kasutatakse bucket'it sandbox'ist. Loomulikult leitakse see kiiresti. Seda saab kuidagi parandada, kuid siiski aega kaotatakse ja mingil m\u00e4\u00e4ral ressursse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (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 k\u00f5ik pluginaid alla. Need on mingil hetkel monoliitsetest teenustest muutunud rohkem mikroteenuste arhitektuuriks. Ja alati tuleb teha Terraform init, et see t\u00f5mbaks k\u00f5ik moodulid ja pluginad alla.<\/p>\n<p><\/p>\n<p>V\u00f5ib kasutada shell-skripti, mis k\u00f5igepealt suudab v\u00e4lja tuua k\u00f5ik muutujad. Shell-skripti ei piirata millegagi. Ja teiseks, teed. Kui me kasutame alati seda teed, mis on hoidlas, kui v\u00f5tme state-faili jaoks, siis eksimise v\u00f5imalus on v\u00e4listatud. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/b70dbc6d8edb1b255c64d722a7e40680.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kust saada andmeid? JSON-failist. Terraform v\u00f5imaldab salvestada infrastruktuuri mitte ainult hcl (HashiCorp Configuration Language) formaadis, vaid ka JSON-is.<\/p>\n<p><\/p>\n<p>JSON loetakse shell-skriptist lihtsalt. Seega v\u00f5ib mingisse kohta panna konfigureerimisfaili koos bucket'iga. Ja kasutada seda bucketit nii Terraformi koodis kui ka shell-skriptis initsialiseerimiseks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/a18b92cac763003ec49af8d4a37e19d9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Miks on oluline, et Terraformil oleks bucket? Sest on selline asi nagu remote state-failid. T\u00e4hendades, kui ma k\u00e4itan m\u00f5nda ressurssi, pean ma Amazoni \u00fctlemiseks: 'Palun t\u00f5sta instance \u00fcles', m\u00e4rkima v\u00e4ga palju kohustuslikke parameetreid. <\/p>\n<p><\/p>\n<p>Ja need tuvastajad salvestatakse kuskile teise kausta. Ja ma v\u00f5in \u00f6elda: \u201eTerraform, palun mine ja too mulle selle ressursi state-failist need tuvastajad.\u201d Nii tekib mingisugune \u00fchtsus erinevate piirkondade v\u00f5i keskkondade vahel.<\/p>\n<p><\/p>\n<p>Ei ole alati v\u00f5imalik kasutada kaug-state-faili. N\u00e4iteks, kui olete k\u00e4sitsi loonud VPC. Ja see Terraformi kood, mis loob VPC, loob nii erineva VPC, et teil kulub kaua aega ja peate \u00fcht teise kohandama, seet\u00f5ttu saab kasutada j\u00e4rgmist nipi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/04ffcd97e2fae323d9b4d81e5f6c751a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>St. teha moodul, mis justkui loob VPC ja annab teile tuvastajad, aga tegelikult on lihtsalt fail, millel on k\u00f5vakooditud v\u00e4\u00e4rtused, mida saab kasutada sama instance'i loomisel.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (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 pilves. N\u00e4iteks, kui testitakse mooduleid, saab kasutada backend'i initsialiseerimist, kus fail salvestatakse lihtsalt kettale testimise ajaks.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (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 natuke testimisest. Mida saab Terraformis testida? T\u00f5en\u00e4oliselt on palju, aga ma r\u00e4\u00e4gin just nendest neljast asjast.<\/p>\n<p><\/p>\n<p>HashiCorp'il on arusaam, kuidas Terraformi koodi vormindada. Terraform fmt v\u00f5imaldab teil vormindada koodi, mida te redigeerite, vastavalt sellele arusaamale. Seega peavad testid alati kontrollima, kas vormindamine vastab HashiCorpi loodud standarditele, et ei peaks muutma sulgude asukohta jne. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/bb99ffdd9f963f0f44ea7b5379689737.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>J\u00e4rgmine samm on Terraform validate. See teeb veidi rohkem kui lihtsalt s\u00fcntaksi kontrollimise - see kontrollib, kas k\u00f5ik sulud on paaris. Mis on siin oluline? Meie infrastruktuur on v\u00e4ga keeruline. Seal on v\u00e4ga palju erinevaid kaustasid. Ja igas neist tuleb k\u00e4ivitada Terraform validate.<\/p>\n<p><\/p>\n<p>Seega, et testimist kiirendada, k\u00e4ivitame korraga mitmeid protsesse, kasutades paralleelsust. <\/p>\n<p><\/p>\n<p>Paralleelsus on t\u00f5eliselt \u00e4ge asi, kasutage seda.<\/p>\n<p><\/p>\n<p>Kuid iga kord, kui toimub Terraformi algatamine, l\u00e4heb see HashiCorpi ja k\u00fcsib: \u201eMillised on viimased pluginade versioonid? Ja see plugin, mis mul on vahem\u00e4lus - kas see on \u00f5ige v\u00f5i vale?\u201c. Ja see andis iga sammu juures oma viivituse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/836e90327c7a60c493f42f0a055e248b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui Terraform annab juhiseid, kus lisandmoodulid asuvad, \u00fctleb Terraform: \"Okei, arvatavasti on see k\u00f5ige v\u00e4rskem, mis on. Ma ei hakka kuhugi minema, vaid alustame otse teie Terraform-koodi valideerimisega.\"<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/8ab344cf8de7087d30a1212d44691c20.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Selleks, et kaust vajalikest lisandmoodulitest t\u00e4ita, on meil v\u00e4ga lihtne Terraform-kood, mille lihtsalt tuleb initsialiseerida. Siin tuleb kindlasti m\u00e4rkida k\u00f5ik teenusepakkujad, kes osalevad teie koodis, muidu \u00fctleb Terraform: \"Ma ei tunne \u00fchtegi teenusepakkujat, kuna seda ei ole vahem\u00e4lus.\"<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/b8130753045624d38bce32ba08b56fb0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>J\u00e4rgmine on Terraform plaan. Nagu \u00f6eldud, on arendus ts\u00fckliline. Loome koodi muudatustega. Seej\u00e4rel peab selguma, millised muudatused infrastruktuuri plaanitakse. <\/p>\n<p><\/p>\n<p>Ja kui infrastruktuur on v\u00e4ga, v\u00e4ga suur, v\u00f5ib \u00fche mooduli muutmine, mingi testkeskkonna parandamine v\u00f5i konkreetse regiooni muutmine kahjustada m\u00f5nda naabermoodulit. Seet\u00f5ttu peaks Terraform plaan olema koostatud kogu infrastruktuuri jaoks ja n\u00e4itama, millised muudatused on plaanis.<\/p>\n<p><\/p>\n<p>Seda saab teha nutikalt. Me n\u00e4iteks kirjutasime Pythonis skripti, mis lahendab s\u00f5ltuvused. Ja s\u00f5ltuvalt sellest, mis t\u00e4pselt muutunud on: Terraformi moodul v\u00f5i lihtsalt m\u00f5ni konkreetselt komponent, koostab see plaanid k\u00f5igi s\u00f5ltuvate kaustade jaoks.<\/p>\n<p><\/p>\n<p>Terraformi plaanid peaksid olema toodetud n\u00f5udmisel. v\u00e4hemalt, nii me teeme. <\/p>\n<p><\/p>\n<p>Testid, muidugi, on igas muutuses ja igas commit'is head, kuid plaanid \u2013 see on piisavalt kulukas asi. Ja me pull request'is \u00fctleme: \u201ePalun, anna mulle plaanid\u201d. Robot k\u00e4ivitub ja saadab kommentaaridesse v\u00f5i lisanditena k\u00f5ik plaanid, mis on seotud teie muudatustega. <\/p>\n<p><\/p>\n<p>Plaan on piisavalt kulukas. See v\u00f5tab aega, kuna Terraform l\u00e4heb Amazonisse ja k\u00fcsib: \u201eKas see instants on ikka olemas? Ja kas selle autoscale'i parameetrid on t\u00f5esti sellised?\u201d. Aja s\u00e4\u00e4stmiseks saab kasutada sellist parameetrit nagu refresh=false. See t\u00e4hendab, et Terraform laadib S3-st oleku andmed. Ja usub, et olek vastab t\u00e4pselt sellele, mis Amazonis on.<\/p>\n<p><\/p>\n<p>Selline Terraformi plaan kulgeb palju kiiremini, kuid state peab vastama teie infrastruktuurile, st kuskil ja kunagi peab Terraform refresh k\u00e4ivituma. Terraform refresh teeb just seda, et state vastaks sellele, mis on reaalses infrastruktuuris. <\/p>\n<p><\/p>\n<p>Ja tuleb r\u00e4\u00e4kida turvalisusest. Sellega oleks tulnud alustada. Seal, kus te k\u00e4itate Terraformi ja Terraform t\u00f6\u00f6tab teie infrastruktuuriga, on olemas haavatavus. St te, p\u00f5him\u00f5tteliselt, t\u00e4idate koodi. Ja kui pull request sisaldab mingit pahatahtlikku koodi, v\u00f5ib see k\u00e4ivituda infrastruktuuris, millel on liiga palju ligip\u00e4\u00e4su. Seega olge ettevaatlik, kus te Terraformi plaani k\u00e4itate.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/2153cc01acf2b1f46978f837b82b317e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>J\u00e4rgmine, millest sooviksin r\u00e4\u00e4kida, on user-data testimine.<\/p>\n<p><\/p>\n<p>Mis on user-data? Amazonis, kui loome instance\u2019i, saame instance\u2019ilt saata mingi kirja \u2013 meta-andmed. Kui instance k\u00e4ivitub, on tavaliselt cloud init alati nende instance\u2019ide juures. Cloud init loeb seda kirja ja \u00fctleb: \"Okei, t\u00e4na olen ma load balancer.\" Ja nende andmete alusel sooritab ta teatud tegevusi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (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 Terraform plaani ja Terraform rakendust, n\u00e4eb user-data v\u00e4lja nagu selline numbrite puder. Teisis\u00f5nu, see saadab teile lihtsalt hash'i. Ja k\u00f5ik, mida saate plaanis vaadata, on see, kas m\u00f5ned muudatused on v\u00f5i hash j\u00e4\u00e4b samaks. <\/p>\n<p><\/p>\n<p>Ja kui sellele mitte t\u00e4helepanu p\u00f6\u00f6rata, v\u00f5ib Amazonis, reaalses infrastruktuuris, minna mingisugune rikutud tekstifail. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/cd7b56f1149d9cbebb0ad3228c0eeb5f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00dche v\u00f5imalusena saab t\u00e4itmise k\u00e4igus n\u00e4idata mitte kogu infrastruktuuri, vaid ainult template'i. Ja koodis saate \u00f6elda: \"Palun, n\u00e4ita mulle seda template'i.\" Nii et l\u00f5puks saate v\u00e4lja printida, millised teie andmed Amazonis v\u00e4lja n\u00e4evad.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/86da779cdf7f9cacfd80a196efde47f7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teine v\u00f5imalus on kasutada moodulit user-data genereerimiseks. Te rakendate selle mooduli. Saate faili kettale. V\u00f5rdlete seda l\u00e4htefailiga. Ja nii, kui m\u00f5ni algaja otsustab user-data veidi muuta, \u00fctlevad teie testid: \"Ok, siin ja siin on mingid muudatused \u2013 see on normaalne.\"<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/7e69ec1b2c04710066d93ee48f872254.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>J\u00e4rgmiseks, millest ma r\u00e4\u00e4kida tahan, on Automate Terraform rakendus.<\/p>\n<p><\/p>\n<p>Muidugi on hirmutav Terraformi rakendamine automaatselt, sest kes teab, millised muudatused on tehtud ja kui kahjulikud need v\u00f5ivad olla elavale infrastruktuurile. <\/p>\n<p><\/p>\n<p>Testkeskkonna jaoks on see k\u00f5ik t\u00e4iesti normaalne. See t\u00e4hendab, et t\u00f6\u00f6, mis loob testkeskkonna, on see, mida k\u00f5ik arendajad vajavad. Ja selline v\u00e4ljend nagu \u201emul t\u00f6\u00f6tas k\u00f5ik\u201d ei ole naljakas meem, vaid t\u00f5estus sellest, et inimene on vaeva n\u00e4inud, k\u00e4ivitanud virna, jooksutanud sellel mingi teste. Ja veendunud, et k\u00f5ik on korras ning \u00f6elnud: \u201eOk, see kood, mille ma v\u00e4lja annan, on testitud.\u201d<\/p>\n<p><\/p>\n<p>Tootmises, liivakastis ja teistes keskkondades, mis on ettev\u00f5tte jaoks olulisemad, v\u00f5ib osaliselt rakendada m\u00f5ned ressursid piisavalt turvaliselt, kuna see ei p\u00f5hjusta, et keegi surma saab. Need on: autoscale-grupid, turvagrupid, rollid, Route53 ja seal v\u00f5ib olla piisavalt pikk nimekiri. Kuid j\u00e4lgige, mis toimub, lugege automatiseeritud rakendamise aruandeid. <\/p>\n<p><\/p>\n<p>Kohas, kus rakendamine on ohtlik v\u00f5i hirmutav, n\u00e4iteks kui tegemist on p\u00fcsivate ressursidega, andmebaasidega, siis saate aruandeid selle kohta, et m\u00f5nes infrastruktuuri osas on rakendamata muudatused. Ja insener k\u00e4ivitab j\u00e4lgimise all t\u00f6\u00f6d, et neid rakendada v\u00f5i teeb seda oma konsoolist. <\/p>\n<p><\/p>\n<p>Amazonis on selline asi nagu Terminate protection. See v\u00f5ib m\u00f5nel juhul kaitsta teid soovimatute muudatuste eest. St. Terraform l\u00e4heb Amazonisse ja \u00fctleb: \"Mul on vaja see instants kustutada, et teha teine kindel instants.\" Amazon aga vastab: \"Sorry, ei t\u00e4na. Meil on Terminate protection sisse l\u00fclitatud.\"<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/9f4258d8688556829586a1e308f5a1e2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja koogit\u00fckk \u2013 see on koodi optimeerimine. Kui t\u00f6\u00f6tame Terraform-koodiga, peame moodulisse edastama v\u00e4ga suure hulga parameetreid. Need parameetrid on vajalikud, et luua m\u00f5ni ressurss. Ja kood muutub suurteks parameetrite loenditeks, mida tuleb edastada moodulist moodulisse, eriti kui moodulid on pesastatud. <\/p>\n<p><\/p>\n<p>Ja see on v\u00e4ga raske lugeda. Seda on v\u00e4ga raske \u00fcle vaadata. Ja tihti juhtub, et m\u00f5ned parameetrid l\u00e4bivad \u00fclevaatamise, kuid nad ei ole just need, mis vajalikud. Ja see maksab aega ja raha, et hiljem parandada.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (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 mingit v\u00e4\u00e4rtuste puu. St. on vaja mingit kausta, kus on loetletud k\u00f5ik v\u00e4\u00e4rtused, mida sooviksite mingis keskkonnas omada.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (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 genereerida puu, mis luuakse \u00fches \u00fcldises moodulis, st. \u00fcldises moodulis, mis t\u00f6\u00f6tab \u00fchtlaselt kogu infrastruktuuris.<\/p>\n<p><\/p>\n<p>Selles moodulis saab teha teatud arvutusi, kasutades sellist uut funktsiooni Terraformis nagu locals. Ja siis \u00fche v\u00e4ljundiga anda v\u00e4lja mingi keeruline parameeter, mis v\u00f5ib sisaldada hash'e, massiive jne. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/25c14e0397f8d95c301e0dfe6ae761df.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Siin on k\u00f5ik parimad leidud, mis mul on. Tahaksin r\u00e4\u00e4kida loo Kolumbusest. Kui ta otsis raha oma ekspeditsioonile, et avastada Indiat (nagu ta arvas), ei uskunud keegi temasse ega pidanud seda v\u00f5imalikuks. Siis \u00fctles ta: \"Tehke nii, et muna ei kukuks.\" K\u00f5ik pangandajad, v\u00e4ga rikkad ja t\u00f5en\u00e4oliselt arukad inimesed, proovisid muna kuidagi p\u00fcstise hoida, kuid see kukkus pidevalt. Siis v\u00f5ttis Kolumbus muna, surus sellele veidi. Koor vajus sisse ja muna j\u00e4i liikumatuks. Nemad \u00fctlesid: \"Oh, see on liiga lihtne!\". Ja Kolumbus vastas: \"Jah, see on liiga lihtne. Ja kui ma avastan India, hakkavad k\u00f5ik seda kaubateed kasutama.\" <\/p>\n<p><\/p>\n<p>Ja see, mis ma teile just r\u00e4\u00e4kisin, on t\u00f5en\u00e4oliselt piisavalt lihtsad ja triviaalne asjad. Ja kui sa neist kuulema saad ja hakkad neid kasutama, on see igati normaalne. Nii et kasutage neid. Ja kui need on teie jaoks t\u00e4iesti tavalised asjad, siis v\u00e4hemalt teate, kuidas muna paigal hoida, et see ei kukuks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/37bf83d04b99f089f2319c8d2e8aaeb4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kokkuv\u00f5tteks: <\/p>\n<p><\/p>\n<ul>\n<li>P\u00fc\u00fcdke lumepalle v\u00e4ltida. Ja mida v\u00e4hem lumepalle, seda v\u00e4hem ressursse on teil vaja, et teha muudatusi kogu teie suurel infrastruktuuril. <\/li>\n<li>P\u00fcsivad muudatused. See t\u00e4hendab, et kui koodis on toimunud muudatusi, tuleb v\u00f5imalikult kiiresti viia teie infrastruktuur vastavusse nende muudatustega. Ei peaks olema olukorda, kus keegi tuleb kaks-kolm kuud hiljem vaatama Elasticsearchi, teeb Terraform plaani ja seal on palju muudatusi, mida ta ei oodanud. See v\u00f5tab palju aega, et k\u00f5ik uuesti korda seada. <\/li>\n<li>Testid ja automatiseerimine. Mida rohkem on teie kood kaetud testide ja funktsioonidega, seda kindlamad olete, et teete k\u00f5ike \u00f5igesti. Automaatne edastamine suurendab teie enesekindlust mitu korda. <\/li>\n<li>Testimise ja tootmis\u00fcmbritsioonide kood peab olema praktiliselt sama. Praktiliselt, sest tootmine on ikkagi natuke erinev ja seal on ikkagi m\u00f5ned n\u00fcansid, mis j\u00e4\u00e4vad testimisest v\u00e4lja. Kuid siiski, pluss-miinus saab seda tagada. <\/li>\n<li>Ja kui teil on v\u00e4ga palju Terraform-koodi ja selle koodi ajakohasena hoidmiseks kulub palju aega, pole kunagi liiga hilja refaktoreerida ja see heasse vormi tuua. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/68f3946536f44eed33939b234fb3ca0d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Muudatusteta infrastruktuur. AMI tarnimine graafiku j\u00e4rgi. <\/li>\n<li>Struktuur route53 jaoks, kui teil on palju kirjeid ja soovite, et need oleksid korrektses j\u00e4rjestuses. <\/li>\n<li>API m\u00e4\u00e4rangute piirangute \u00fcletamine. See on siis, kui Amazon \u00fctleb: \"K\u00f5ik, piisab, ma ei saa enam p\u00e4ringuid vastu v\u00f5tta, palun oodake.\" Ja pool kontorist ootab, kuni nad saavad oma infrastruktuuri k\u00e4ivitada. <\/li>\n<li>Spot instance'id. Amazon ei ole odav lahendus ja spot'id aitavad palju s\u00e4\u00e4sta. Sel teemal v\u00f5iks esitleda terve ettekande. <\/li>\n<li>Turvalisus ja IAM rollid. <\/li>\n<li>Kadunud ressursside otsimine, kui Amazonis on arusaamatute p\u00e4ritoluga instance'id, mis s\u00f6\u00f6vad raha. Isegi kui instance maksab 100-150 dollarit kuus \u2013 aastas on see \u00fcle 1000. Selliste ressursside leidmine on kasumlik \u00e4ri. <\/li>\n<li>Ja reserveeritud instance'id. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mustrid Terraformis segaduse ja k\u00e4sitsi rutiini vastu. Maksim Kostrijkin (Ixtens)\" src=\"\/wp-content\/uploads\/2020\/10\/69ddbf4c726bcc15aea1a1e2d67a3fc8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sellega ongi 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, kuid kuidas te lahendate probleemi, et mitu inimest saavad selle state-faili ja p\u00fc\u00fcavad kasutusele v\u00f5tta?<\/em><\/p>\n<p><\/p>\n<p>Esiteks, me ei kiirusta. Teiseks, meil on flags, millega teavitame, et t\u00f6\u00f6tame mingis koodijupil. See t\u00e4hendab, et 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 olid state-failid Git'is. See oli oluline, muidu keegi teeks state-faili ja pidime need k\u00e4sitsi kokku koguma, et k\u00f5ik j\u00e4tkuks. Praegu sellist probleemi ei ole. \u00dcldiselt lahendas Terraform selle \u00fclesande. Ja kui pidevalt midagi muutub, siis saab kasutada lukke, mis takistavad seda, mida te \u00fctlesite.<\/p>\n<p><\/p>\n<p><em>Kasutate te avatud versiooni v\u00f5i ettev\u00f5tte versiooni?<\/em><\/p>\n<p><\/p>\n<p>Mitte mingit ettev\u00f5tte versiooni, 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 luua mitteh\u00e4vitatavat instantsi. See on olemas ka Terraformis, Life Second bloki sees saab m\u00e4rkida muudatuste v\u00f5i h\u00e4vitamise t\u00f5kestamise.<\/em> <\/p>\n<p><\/p>\n<p>Aeg oli piiratud. Hea m\u00e4rkamine. <\/p>\n<p><\/p>\n<p><em>Soovisin veel k\u00fcsida kahte asja. Esiteks r\u00e4\u00e4kisite testimisest. Kas olete kasutanud mingeid teste teenuseid? Olen kuulnud Test Kitchen pluginast. V\u00f5ib-olla on veel midagi. Ja tahaksin veel k\u00fcsida Local Values kohta. Kuidas need p\u00f5him\u00f5tteliselt erinevad Input Variables'ist? Ja miks ma ei saa midagi ainult Local Values kaudu parameteriseerida? Olen proovinud selle teema kallal t\u00f6\u00f6tada, kuid ei ole sellega p\u00e4ris selgeks saanud.<\/em><\/p>\n<p><\/p>\n<p>Saame sellest ruumist p\u00f5hjalikumalt r\u00e4\u00e4kida. Testimisriistade osas on meil t\u00e4iesti omavalmistatud lahendused. Seal ei ole midagi sellist, mida saaks testida. Kuid \u00fcldiselt on v\u00f5imalusi, kus automaatsed testid loovad infrastruktuuri kusagil, kontrollivad, et see oleks korras, ja siis k\u00f5ik h\u00e4vitatakse koos raportiga, et teie infrastruktuur on endiselt heas seisukorras. Meil seda ei ole, sest testimine toimub igap\u00e4evaselt. Ja see piisab. Ja kui midagi hakkab katki minema, siis see hakkab katki minema, ilma et me peaksime seda kuskil veel kontrollima. <\/p>\n<p><\/p>\n<p>Local Values'i osas j\u00e4tkame vestlust ruumis. <\/p>\n<p><\/p>\n<p><em>Tere! Ait\u00e4h ettekande eest! See oli v\u00e4ga informatiivne. Sa \u00fctlesid, et teil on v\u00e4ga palju sarnast koodi infrastruktuuri kirjeldamiseks. Kas te ei ole kaalunud koodi genereerimise v\u00f5imalust?<\/em><\/p>\n<p><\/p>\n<p>Suurep\u00e4rane k\u00fcsimus, ait\u00e4h! Asi on selles, et kui me kasutame infrastruktuuri kui koodi, eeldame, et vaatame koodi ja m\u00f5istame, milline infrastruktuur selle koodi taga seisab. Kui kood genereeritakse, peame ette kujutama, milline kood genereeritakse, et m\u00f5ista, milline infrastruktuur seal on. Kas genereerime koodi, paneme selle edasi ja esimese m\u00f5ttega saame samu tulemusi. Seet\u00f5ttu l\u00e4ksime teed, nagu oleme kirjutanud, ja said, mida said. Pluss genereerijad tulid m\u00f5ned aega hiljem, kui olime alustanud. Ja oli juba liiga hilja seda muuta.<\/p>\n<p><\/p>\n<p><em>Kas oled kuulnud jsonnetist?<\/em><\/p>\n<p><\/p>\n<p>Ei. <\/p>\n<p><\/p>\n<p><em>Vaata, see on t\u00f5eliselt \u00e4ge asi. Ma n\u00e4en konkreetset kasutusjuhtu, kus seda saab rakendada ja andmestruktuure genereerida.<\/em> <\/p>\n<p><\/p>\n<p>Generaatorid on head, kui sul on nagu anekdootis habemeajamismasinast. Ehk siis esmakordselt on n\u00e4od erinevad, kuid hiljem on k\u00f5igil n\u00e4od \u00fchesugused. Generaatorid on t\u00f5eliselt head. Kuid meil on kahjuks n\u00e4od veidi erinevad. See on probleem. <\/p>\n<p><\/p>\n<p><em>Lihtsalt vaata. Ait\u00e4h!<\/em><\/p>\n<p><\/p>\n<p><em>Minu nimi on Maksim, ma olen Sberbankist. Te r\u00e4\u00e4kisite veidi sellest, et \u00fcritasite Terraformit programmeerimiskeele analoogiks tuua. Kas poleks lihtsam kasutada Ansible'i?<\/em><\/p>\n<p><\/p>\n<p>Need on v\u00e4ga erinevad asjad. Ka Ansible'i abil saab luua ressursse ja Puppetiga saab ressursse Amazonis luua. Kuid Terraform on sellele spetsialiseerunud. <\/p>\n<p><\/p>\n<p><em>Kas teil on ainult Amazon?<\/em><\/p>\n<p><\/p>\n<p>K\u00fcsimus ei ole selles, et meil on ainult Amazon. Meil on peaaegu ainult Amazon. Kuid v\u00f5tmek\u00fcsimus on selles, et Terraform m\u00e4letab. Ansible'iga, kui \u00fctled: \u201eT\u00f5sta mulle 5 instantsi\u201d, siis ta t\u00f5stab need \u00fcles, aga p\u00e4rast \u00fctled: \u201eN\u00fc\u00fcd on mul vaja 3\u201d. Terraform \u00fctleb: \u201eOkei, tapen 2\u201d, aga Ansible \u00fctleb: \u201eOkei, siin on 3\u201d. Kokku 8.<\/p>\n<p><\/p>\n<p><em>Tere! Ait\u00e4h teie ettekande eest! Oli v\u00e4ga huvitav kuulda Terraformist. Tahaksin kohe anda v\u00e4ikse kommentaari selle kohta, et Terraformil ei ole siiski stabiilset versiooni, seega suhelge Terraformiga v\u00e4ga ettevaatlikult.<\/em><\/p>\n<p><\/p>\n<p>Hea lusikas supi jaoks. Ehkki, kui vajate lahendust, siis m\u00f5nikord l\u00fckkate edasi ebastabiilse jne, kuid see t\u00f6\u00f6tab ja on meile abiks olnud. <\/p>\n<p><\/p>\n<p><em>K\u00fcsimus on selline. Kas te kasutate Remote backend'i, kasutate S3-d. Miks te ei kasuta ametlikku backend'i?<\/em><\/p>\n<p><\/p>\n<p>Ametlik?<\/p>\n<p><\/p>\n<p><em>Terraform Cloud.<\/em><\/p>\n<p><\/p>\n<p>Millal see ilmus?<\/p>\n<p><\/p>\n<p><em>Neli kuud tagasi.<\/em> <\/p>\n<p><\/p>\n<p>Kui ta oleks ilmunud neli aastat tagasi, oleksin ma ilmselt teie k\u00fcsimusele vastanud.<\/p>\n<p><\/p>\n<p><em>Seal on juba sisse ehitatud funktsioon, mis v\u00f5imaldab kasutada lukke ja hoida olekufaili. Proovige. Kuid ma ei ole seda ka testinud.<\/em><\/p>\n<p><\/p>\n<p>Reisime suures rongis, mis liigub suure kiirusel. Ja ei saa lihtsalt v\u00f5tta ja visata \u00e4ra mitut vagunit. <\/p>\n<p><\/p>\n<p><em>Te r\u00e4\u00e4kisite lumehelvestest, aga miks te ei kasutanud haru? Miks ei \u00f5nnestunud nii teha?<\/em><\/p>\n<p><\/p>\n<p>Meie l\u00e4henemine on selline, et kogu infrastruktuur on \u00fches hoidlas. Terraform, Puppet, k\u00f5ik skriptid, mis isegi mingil viisil selle juurde kuuluvad, on k\u00f5ik \u00fches hoidlas. Nii saame tagada, et j\u00e4rkj\u00e4rgulised muudatused on \u00fcksteise j\u00e4rel testitud. Kui see oleks hulk harusid, oleks sellist projekti praktiliselt v\u00f5imatu hooldada. Aastad m\u00f6\u00f6dub ja need t\u00f5ukuvad nii kaugele, et see on nagu karistus. See on see, millest tahaks enne refaktooringut p\u00f5geneda. <\/p>\n<p><\/p>\n<p><em>See t\u00e4hendab, et see ei t\u00f6\u00f6ta?<\/em><\/p>\n<p><\/p>\n<p>See ei t\u00f6\u00f6ta \u00fcldse.<\/p>\n<p><\/p>\n<p>Branchis l\u00f5ikasin kaustade slaidi. See t\u00e4hendab, et kui teha iga testplexi jaoks, n\u00e4iteks A meeskonna jaoks \u2014 neil on oma kaust, B meeskonna jaoks oma kaust, siis see ei toimi ka. Me tegime \u00fchtse testkeskkonna koodi, mis oli piisavalt paindlik, et sobida k\u00f5igile. See t\u00e4hendab, et me hooldasime \u00fchtset koodi. <\/p>\n<p><\/p>\n<p><em>Tere! Minu nimi on Jura! Ait\u00e4h ettekande eest! K\u00fcsimus moodulite kohta. Te \u00fctlete, et kasutate mooduleid. Kuidas te lahendate probleemi, kui \u00fches moodulis tehti muudatusi, mis ei \u00fchildu kellegi teise muudatustega? Kas te versioonite mooduleid v\u00f5i \u00fcritate kuidagi heilida, et vastata kahele n\u00f5udmisele?<\/em><\/p>\n<p><\/p>\n<p>See on suure lume kuhja probleem. See on see, millega me kannatame, kui mingi s\u00fc\u00fctu muudatus v\u00f5ib rikku teatud infrastruktur. Ja seda m\u00e4rgatakse ainult p\u00e4rast pikka aega.<\/p>\n<p><\/p>\n<p><em>Kas see t\u00e4hendab, et praegu ei ole lahendust?<\/em><\/p>\n<p><\/p>\n<p>Teete universaalsed moodulid. V\u00e4ltige lumehelbeid. Ja k\u00f5ik l\u00e4heb korda. Ettekanne teine pool r\u00e4\u00e4gib, kuidas seda v\u00e4ltida.<\/p>\n<p><\/p>\n<p><em>Tere! Ait\u00e4h ettekande eest! Sooviksin t\u00e4psustada. K\u00fcll on palju j\u00e4\u00e4nud, mille p\u00e4rast ma tulin. Kuidas on integreeritud Puppet ja rollide jaotamine?<\/em><\/p>\n<p><\/p>\n<p>Kasutaja andmed.<\/p>\n<p><\/p>\n<p><em>T. e. lihtsalt viskate faili v\u00e4lja ja siis t\u00f6\u00f6tlete seda kuidagi?<\/em><\/p>\n<p><\/p>\n<p>Kasutaja andmed \u2013 see on m\u00e4rk, st kui me teeme pildi klooni, siis k\u00e4ivitub Daemon, kes p\u00fc\u00fcab v\u00e4lja selgitada, kes ta on, ja loeb m\u00e4rkuse, et ta on koormustasakaalustaja.<\/p>\n<p><\/p>\n<p><em>T. e. see on mingi eraldi protsess, mis antakse edasi?<\/em><\/p>\n<p><\/p>\n<p>Me ei leiutanud seda. Me kasutame seda. <\/p>\n<p><\/p>\n<p><em>Tere! Mul on just k\u00fcsimus kasutaja andmete kohta. Te \u00fctlesite, et seal on probleeme, et keegi v\u00f5ib midagi valesti edastada. Kas on mingit v\u00f5imalust salvestada kasutaja andmed samasse Git'i, et oleks alati aru saada, millele kasutaja andmed viitavad?<\/em><\/p>\n<p><\/p>\n<p>User-data genereeritakse \u0161ablonist. See t\u00e4hendab, et seal on mingi hulk muutujaid. Ja Terraform genereerib l\u00f5pptulemuse. Seet\u00f5ttu ei saa lihtsalt vaadata \u0161abloni ja \u00f6elda, mis tuleb, sest k\u00f5ik probleemid on seotud sellega, et arendaja arvab, et ta edastab selles muutuja sees rea, aga seal tuleb massiiv. Ja tal on - hopp, kes see on, kes see on, j\u00e4rgmine rida, ja k\u00f5ik on katki. Kui see on uus ressurss ja inimene t\u00f5stab selle \u00fcles, n\u00e4eb, et midagi ei t\u00f6\u00f6ta, siis see lahendatakse kiiresti. Aga kui see on autoscale-grupp, mis on uuendatud, siis mingi hetk hakkavad autoscale-grupi instantsid asuma \u00fcksteise asemele. Ja hop, midagi ei t\u00f6\u00f6ta. See on t\u00f5eliselt kahju.<\/p>\n<p><\/p>\n<p><em>Kas selgub, et ainus lahendus on testimine?<\/em><\/p>\n<p><\/p>\n<p>Jah, te n\u00e4ete probleemi, te lisate sinna testimissteppe. See t\u00e4hendab, et ka v\u00e4ljundiga saab testida. V\u00f5ib-olla ei ole see nii mugav, aga ka siia saab mingid sildid panna - kontrollige, et User-data on siin naelutatud. <\/p>\n<p><\/p>\n<p><em>Minu nimi on Timur. On v\u00e4ga lahe, et on ettekandeid sellest, kuidas korralikult Terraformit korraldada.<\/em><\/p>\n<p><\/p>\n<p>Ma pole isegi alustanud.<\/p>\n<p><\/p>\n<p><em>Ma arvan, et j\u00e4rgmises konverentsis v\u00f5ib-olla tuleb see teema \u00fcles. Mul on lihtne k\u00fcsimus. Miks te kodeerite v\u00e4\u00e4rtuse eraldi moodulis, mitte ei kasuta tfvars, st mis on nende v\u00e4\u00e4rtuste mooduli eelised v\u00f5rreldes tfvars-iga?<\/em><\/p>\n<p><\/p>\n<p>St. kas ma pean siin (slaid: Production\/environment\/settings.tf) kirjutama: domain = variable, domain vpcnetwork, variable vpcnetwork ja samav\u00e4\u00e4rset stvars \u2013 et saada sama tulemuse?<\/p>\n<p><\/p>\n<p><em>Me ju teeme t\u00e4pselt nii. Viitame seadistuse allikale, n\u00e4iteks.<\/em><\/p>\n<p><\/p>\n<p>Sisuliselt on see nagu tfvars. Tfvars on v\u00e4ga mugav testimis\u00fcmbruses. Mul on tfvars suurte ja v\u00e4ikeste instances jaoks. Ja ma panin \u00fche faili kausta. Ja sain just seda, mida tahtsin. Kui me infrastruktuuri ehitame, soovime, et oleks v\u00f5imalik k\u00f5ike korraga n\u00e4ha ja aru saada. N\u00fc\u00fcd aga peab vaatama siia, siis j\u00e4lle tfvars-i.<\/p>\n<p><\/p>\n<p><em>Tuleb lihtsalt, et k\u00f5ik oleks \u00fches kohas?<\/em><\/p>\n<p><\/p>\n<p>Jah, tfvars on siis, kui teil on \u00fcks kood. Ja seda kasutatakse mitmes erinevas kohas, kus on eri n\u00fcansid. Siis te paneksite tfvars ja saaksite oma n\u00fcansid. Aga meie - see on infrastruktuur kui puhas kood. Vaata ja saa aru. <\/p>\n<p><\/p>\n<p><em>Tere! Olete silmitsi seisnud olukordadega, kus pilvuteenuse pakkuja sekkub sellesse, mida olete Terraformiga teinud? Oletame, et me redigeerime metaandmeid. Seal on ssh-v\u00f5tmed. Ja Google pidevalt p\u00f5histab sinna oma metaandmeid, oma v\u00f5tmeid. Ja Terraform \u00fctleb alati, et tal on muudatusi. P\u00e4rast iga jooksu, isegi kui midagi ei muutu, \u00fctleb ta alati, et ta kavatseb seda v\u00e4lja v\u00e4rskendada.<\/em><\/p>\n<p><\/p>\n<p>V\u00f5tmetega, kuid \u2013 jah, osa infrastruktuurist on sellise probleemiga m\u00f5jutatud, st Terraform ei saa midagi muuta. Me ei saa ka k\u00e4ega midagi muuta. Elame hetkel sellega.<\/p>\n<p><\/p>\n<p><em>St, olete sellise probleemiga silmitsi seisnud, kuid pole midagi v\u00e4lja m\u00f5elnud, ta lihtsalt 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 te lahendate probleemi sildi genereerimisega ..., kuidas te selle sisse edastate? Ma saan aru, et kasutate User \u2014 data, et m\u00e4\u00e4rata hosti nimi, rakendate Puppetit? Ja teine osa k\u00fcsimusest. Kuidas te lahendate selle k\u00fcsimuse SG-s, st kui genereerite SG-d, sadu \u00fchesuguseid instantsi, kuidas neid \u00f5igesti nimetada?<\/em><\/p>\n<p><\/p>\n<p>Needless instances are named nicely, while those that aren't necessary have the label indicating they are an autoscale group. In theory, these can be terminated to create a new one. <\/p>\n<p><\/p>\n<p>Regarding the tag issue, there isn\u2019t a problem per se, but rather a task. Our tags are extensively used because the infrastructure is large and costly. We need to track where the money goes, so tags help us untangle what expenditure is attributed to which aspect, allowing us to identify areas with high costs. <\/p>\n<p><\/p>\n<p>What was the other question about?<\/p>\n<p><\/p>\n<p><em>When SG creates a hundred instances, how do we differentiate them?<\/em><\/p>\n<p><\/p>\n<p>No, it's not necessary. Each instance has an agent that reports issues. If the agent indicates a problem, it knows about it, and at the very least, its IP address exists. That's already enough to act. Additionally, we use Consul for Discovery in places where Kubernetes isn\u2019t applicable, which also shows the IP address of the instance.<\/p>\n<p><\/p>\n<p><em>So, you are indeed focusing on the IP rather than the host name?<\/em><\/p>\n<p><\/p>\n<p>It's impossible to rely on the host name because there are too many. There are instance identifiers like AE, etc. You can locate it somewhere or input it in the search. <\/p>\n<p><\/p>\n<p><em>Tere! Ma sain aru, et Terraform on suurep\u00e4rane asi, mida on kohandatud pilvetehnoloogiate jaoks.<\/em> <\/p>\n<p><\/p>\n<p>Mitte ainult. <\/p>\n<p><\/p>\n<p><em>See k\u00fcsimus huvitab mind. Kui n\u00e4iteks otsustate massiliselt \u00fcle minna Bare Metal'ile koos k\u00f5igi oma instantsidega, kas tekib probleeme? V\u00f5i on vaja kasutada teisi tooteid, n\u00e4iteks eelnevalt mainitud Ansible'd?<\/em><\/p>\n<p><\/p>\n<p>Ansible tegeleb veidi teistsuguste asjadega. T\u00e4hendab, Ansible t\u00f6\u00f6tab siis, kui instants on juba k\u00e4ivitatud. Terraform t\u00f6\u00f6tab enne, kui instants k\u00e4ivitatakse. Bare Metal'ile \u00fcleminek \u2013 ei. <\/p>\n<p><\/p>\n<p><em>Praegu ei, aga \u00e4ri tuleb ja \u00fctleb: \"Teeme seda.\"<\/em><\/p>\n<p><\/p>\n<p>Teisele pilve teenusele \u00fcleminek \u2013 jah, aga siin on veidi teine asi. Peab kirjutama Terraform'i koodi selliselt, et teisele pilve teenusele \u00fcleminek oleks lihtsam. <\/p>\n<p><\/p>\n<p>Alguses seati eesm\u00e4rgiks, et kogu meie infrastruktuur oleks agnostiline, st sobiks igasugustele pilvedele, kuid mingil hetkel andis \u00e4ri alla ja \u00fctles: \"Okei, l\u00e4hiaastatel me ei l\u00e4he kuhugi, v\u00f5ime kasutada Amazon'i teenuseid.\"<\/p>\n<p><\/p>\n<p>Terraform v\u00f5imaldab luua Front-End t\u00f6id, konfigureerida PagerDuty't, data doc'i jne. Tal on v\u00e4ga palju funktsioone. Ta suudab praktiliselt kontrollida kogu maailma.<\/p>\n<p><\/p>\n<p><em>Ait\u00e4h ettekande eest! Olen juba nelja aasta jooksul Terraformiga tegelenud. Terraformile, infrastruktuurile ja deklaratiivsele kirjeldusele \u00fclemineku etapis sattusime olukorda, kus keegi tegi midagi k\u00e4sitsi, samal ajal kui sa proovisid teha plaani. Ja said seal mingi vea. Kuidas te selliseid probleeme lahendate? Kuidas leiate kadunud ressursid, mis olid m\u00e4rgitud?<\/em><\/p>\n<p><\/p>\n<p>Peamiselt k\u00e4sitsi ja visuaalselt, kui n\u00e4eme aruandes midagi kahtlast, anal\u00fc\u00fcsime, mis seal toimub, v\u00f5i lihtsalt k\u00f5rvaldame selle. \u00dcldiselt on koodi t\u00f5mbamised tavaline asi. <\/p>\n<p><\/p>\n<p><em>Kui esineb viga, teete te rollbacki? Kas olete proovinud sellist lahendust?<\/em><\/p>\n<p><\/p>\n<p>Ei, see on inimese otsus hetkel, kui ta n\u00e4eb probleemi.<\/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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\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\" \/>\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) 4.9.10\" \/>\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:description\" content=\"\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\" \/>\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\udd47Terraformi mustrid kaose ja k\u00e4sitsi rutiini vastu. Maksim Kostriikin (Ixtens) | ProHoster","description":"Tundub, et Terraformi arendajad pakuvad AWS-infrastruktuuri jaoks \u00fcsna mugavaid parimaid praktikaid. Ainult et on \u00fcks n\u00fcanss. Aja jooksul suureneb keskkondade arv, igas neist tekivad omap\u00e4rad. Peaaegu iga naaberriigi rakenduste virn on koopiat v\u00e4\u00e4rt. Ja Terraformi koodi tuleb hoolikalt kopeerida ja redigeerida vastavalt uutele n\u00f5udmistele v\u00f5i luua 'lumekevad'. Minu ettekand j\u00f5uab Terraformi mustritega.","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:description":"\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","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"},"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}]}}