{"id":33123,"date":"2019-10-31T21:50:52","date_gmt":"2019-10-31T18:50:52","guid":{"rendered":"https:\/\/prohoster.info\/blog\/terraformer-infrastructure-to-code\/"},"modified":"2019-10-31T21:50:52","modified_gmt":"2019-10-31T18:50:52","slug":"terraformer-infrastructure-to-code","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/terraformer-infrastructure-to-code","title":{"rendered":"Terraformer \u2013 Infra struktuur Koodiks","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Terraformer \u2013 Infra struktuur Koodiks\" src=\"\/wp-content\/uploads\/2019\/05\/d97414f6b4608dbb4ec7f582b7001773.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTahan r\u00e4\u00e4kida uuest CLI t\u00f6\u00f6riistast, mille ma olen loonud \u00fche vana probleemi lahendamiseks. <\/p>\n<h3>Probleem<\/h3>\n<p>\nTerraform on juba pikka aega olnud standard DevOps\/Cloud\/IT kogukonnas. See on v\u00e4ga mugav ja kasulik t\u00f6\u00f6riist infrastruktuuri kui koodi haldamiseks. Terraformil on palju eeliseid, aga ka palju harusid, teravaid noad ja hunnikuid, millega tuleb arvestada. <br \/>\nTerraformiga on uute asjade loomine ja nende haldamine, muutmine v\u00f5i kustutamine v\u00e4ga mugav. Aga mis teha neil, kellel on suur infrastruktuur pilves, mis ei ole loodud l\u00e4bi Terraformi? K\u00f5igi asjade \u00fcmberkirjutamine ja uuesti loomine on kallis ja ebatervislik. <br \/>\nOlen sellise probleemiga kokku puutunud kahel t\u00f6\u00f6l. Lihtsaim n\u00e4ide on, kui soovid, et k\u00f5ik oleks Gitis Terraformi failide kujul, aga sul on 250+ \u00e4mber ja nende k\u00e4sitsi kirjutamine Terraformi jaoks on lihtsalt liiga palju. <br \/>\nOn <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/hashicorp\/terraform\/issues\/581\">probleem<\/a><\/noindex> Probleem on olnud Terraformis alates 2014. aastast, mille nad sulgesid 2016. aastal lootuses, et lisatakse impordi funktsioon.<\/p>\n<p>Kokkuv\u00f5ttes on k\u00f5ik nagu pildil, ainult vasakult paremale.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Hoiatused: Autor on pool elu elanud v\u00e4ljaspool Venemaad ja kirjutab vene keeles harva. Ole ettevaatlikud \u00f5igekirja vigade suhtes.<\/p>\n<h3>Lahendused<\/h3>\n<p>\n1. On olemas vanad ja t\u00f6\u00f6tavad lahendused AWS jaoks. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dtan4\/terraforming\">terraforming<\/a><\/noindex>. Kui ma proovisin sellele ligi p\u00e4\u00e4seda, et saada oma 250+ \u00e4mbrit, sain aru, et seal on k\u00f5ik halvasti. AWS on juba pikka aega lisanud palju uusi valikuid, kuid terraforming ei tea neist ja seda on kirjutatud Ruby's. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dtan4\/terraforming\/blob\/master\/lib\/terraforming\/template\/tf\/s3.erb\">mallid n\u00e4evad vaesed v\u00e4lja<\/a><\/noindex>. P\u00e4rast kella 2 \u00f5htul saatsin <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dtan4\/terraforming\/pull\/396\">Pull request<\/a><\/noindex> , et lisada sinna rohkem v\u00f5imalusi ja sain aru, et selline lahendus ei sobi \u00fcldse. <br \/>\nKuidas terraforming t\u00f6\u00f6tab? Ta v\u00f5tab AWS SDK-st andmed ja genereerib tf ja tfstate mallide kaudu. <br \/>\nSiin on 3 probleemi:<br \/>\n1. Seal hakkab alati olema ajakohasuse mahaj\u00e4\u00e4mus.<br \/>\n2. tf failid tulevad vahel vigased. <br \/>\n3. tfstate koostatakse eraldi tf-st ja need ei sobi alati kokku.<br \/>\n\u00dcldiselt on keeruline saada tulemust, kus `terraform plan` \u00fctleb, et muudatusi ei ole.<\/p>\n<p>2. `terraform import` \u2014 sisseehitatud k\u00e4sk terraformis. Kuidas see t\u00f6\u00f6tab? <br \/>\nSa kirjutad t\u00fchja TF faili, millel on ressursi nimi ja t\u00fc\u00fcp, seej\u00e4rel k\u00e4ivitad `terraform import` ja edastad ressursi ID. Terraform p\u00f6\u00f6rdub pakkuja poole, saadab andmed ja loob tfstate faili. <br \/>\nSiin on 3 probleemi:<br \/>\n1. Saame ainult tfstate faili, samas tf j\u00e4\u00e4b t\u00fchjaks, selle tuleb k\u00e4sitsi kirjutada v\u00f5i konvertida tfstate-st.<br \/>\n2. Suudab t\u00f6\u00f6tada ainult \u00fche ressursiga iga kord ja ei toeta k\u00f5iki ressursse. Ja mida ma pean uuesti tegema 250+ \u00e4mbri puhul?<br \/>\n3. Peab teada ressursside ID-d \u2014 see t\u00e4hendab, et tuleb kirjutada kood, mis hangib ressursside nimekirja.<br \/>\nTegelikult on tulemus osaliselt l\u00f5plik ja ei skaala h\u00e4sti.<\/p>\n<h3>Minu lahendus.<br \/>\n<\/h3>\n<p>N\u00f5uded:<br \/>\n1. V\u00f5imalus luua tf ja tfstate faile ressurssidest. N\u00e4iteks alla laadida k\u00f5ik bucket'id \/ turver\u00fchmad \/ koormusbalansseerijad ning mis `terraform plan` tagastab, et muudatusi ei ole.<br \/>\n2. Vaja on kaht pilve: GCP + AWS.<br \/>\n3. Globaalne lahendus, mida on lihtne uuendada iga kord, ja ei pea kulutama iga ressursi puhul kolm p\u00e4eva t\u00f6\u00f6d.<br \/>\n4. Teha avatud l\u00e4htekoodiga \u2014 probleem, millega k\u00f5ik silmitsi seisavad.<\/p>\n<p>Go keel \u2014 seet\u00f5ttu, et ma armastan seda, ja sellel on raamatukogu HCL failide loomiseks, mida kasutatakse terraformis + palju kasulikku koodi terraformis.<\/p>\n<h3>Tee.<\/h3>\n<p>\nEsimene katse.<br \/>\nAlustasin lihtsa variandiga. P\u00f6\u00f6rdumine pilve SDK kaudu vajaliku ressursi poole ja selle konverteerimine terraformi v\u00e4ljadeks. Katse suri kohe turver\u00fchma t\u00f5ttu, kuna mulle ei meeldinud 1,5 p\u00e4eva konverteerida ainult turver\u00fchma (ressursse on palju). Liiga pikk ja siis v\u00f5ivad v\u00e4ljad muutuda \/ lisanduda.<\/p>\n<p>Teine katse.<br \/>\nP\u00f5hineb kirjelduse ideel. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/hashicorp\/terraform\/issues\/15608\">siin<\/a><\/noindex>. Lihtsalt v\u00f5tke ja konverteerige tfstate tf-ks. K\u00f5ik andmed on seal olemas ja v\u00e4ljad samad. Kuidas saada t\u00e4ielik tfstate paljude ressursside jaoks?? Siin tuleb appi k\u00e4sk `terraform refresh`. Terraform v\u00f5tab k\u00f5ik ressursid tfstate-st ja t\u00f5mbab nende andmed ID j\u00e4rgi ning kirjutab need k\u00f5ik tfstate-sse. Nii et loome t\u00fchja tfstate ainult nimede ja ID-dega, k\u00e4ivitame `terraform refresh` ja saame t\u00e4ielikud tfstate-d. Hurraa!<br \/>\nN\u00fc\u00fcd tegeleme rekursiivse pornot\u00f6\u00f6stuse kirjutamisega konverteri jaoks tfstate-st tf-ks. Neile, kes pole kunagi tfstate-d lugenud, on see JSON, aga eriline. <br \/>\nSiin on selle oluline osa atribuudid<\/p>\n<pre><code class=\"javascript\"> \"attributes\": {\n                            \"id\": \"default\/backend-logging-load-deployment\",\n                            \"metadata.#\": \"1\",\n                            \"metadata.0.annotations.%\": \"0\",\n                            \"metadata.0.generate_name\": \"\",\n                            \"metadata.0.generation\": \"24\",\n                            \"metadata.0.labels.%\": \"1\",\n                            \"metadata.0.labels.app\": \"backend-logging\",\n                            \"metadata.0.name\": \"backend-logging-load-deployment\",\n                            \"metadata.0.namespace\": \"default\",\n                            \"metadata.0.resource_version\": \"109317427\",\n                            \"metadata.0.self_link\": \"\/apis\/apps\/v1\/namespaces\/default\/deployments\/backend-logging-load-deployment\",\n                            \"metadata.0.uid\": \"300ecda1-4138-11e9-9d5d-42010a8400b5\",\n                            \"spec.#\": \"1\",\n                            \"spec.0.min_ready_seconds\": \"0\",\n                            \"spec.0.paused\": \"false\",\n                            \"spec.0.progress_deadline_seconds\": \"600\",\n                            \"spec.0.replicas\": \"1\",\n                            \"spec.0.revision_history_limit\": \"10\",\n                            \"spec.0.selector.#\": \"1\",\n<\/code><\/pre>\n<p>\nSiin on:<br \/>\n1. id \u2014 string<br \/>\n2. metadata \u2014 massiiv, mille suurus on 1 ja milles on objekt allj\u00e4rgnevas kirjelduses<br \/>\n3. spec \u2014 hash, mille suurus on 1 ja milles on key,value<br \/>\nKokkuv\u00f5ttes on see tore formaat, k\u00f5ik v\u00f5ib olla ka mitmel tasemel<\/p>\n<pre><code class=\"javascript\">                   \"spec.#\": \"1\",\n                            \"spec.0.min_ready_seconds\": \"0\",\n                            \"spec.0.paused\": \"false\",\n                            \"spec.0.progress_deadline_seconds\": \"600\",\n                            \"spec.0.replicas\": \"1\",\n                            \"spec.0.revision_history_limit\": \"10\",\n                            \"spec.0.selector.#\": \"1\",\n                            \"spec.0.selector.0.match_expressions.#\": \"0\",\n                            \"spec.0.selector.0.match_labels.%\": \"1\",\n                            \"spec.0.selector.0.match_labels.app\": \"backend-logging-load\",\n                            \"spec.0.strategy.#\": \"0\",\n                            \"spec.0.template.#\": \"1\",\n                            \"spec.0.template.0.metadata.#\": \"1\",\n                            \"spec.0.template.0.metadata.0.annotations.%\": \"0\",\n                            \"spec.0.template.0.metadata.0.generate_name\": \"\",\n                            \"spec.0.template.0.metadata.0.generation\": \"0\",\n                            \"spec.0.template.0.metadata.0.labels.%\": \"1\",\n                            \"spec.0.template.0.metadata.0.labels.app\": \"backend-logging-load\",\n                            \"spec.0.template.0.metadata.0.name\": \"\",\n                            \"spec.0.template.0.metadata.0.namespace\": \"\",\n                            \"spec.0.template.0.metadata.0.resource_version\": \"\",\n                            \"spec.0.template.0.metadata.0.self_link\": \"\",\n                            \"spec.0.template.0.metadata.0.uid\": \"\",\n                            \"spec.0.template.0.spec.#\": \"1\",\n                            \"spec.0.template.0.spec.0.active_deadline_seconds\": \"0\",\n                            \"spec.0.template.0.spec.0.container.#\": \"1\",\n                            \"spec.0.template.0.spec.0.container.0.args.#\": \"3\"<\/code><\/pre>\n<p>\nKes kokku, kes tahab intervjule programmeerimis\u00fclesannet, k\u00fcsige lihtsalt parseri kirjutamist selle jaoks \ud83d\ude42<br \/>\nP\u00e4rast pikki katseid kirjutada parserit ilma vigadeta leidsin osa sellest terraformi koodist, nimelt k\u00f5ige olulisema osa. Ja k\u00f5ik n\u00e4is t\u00f6\u00f6tavat normaalselt.<\/p>\n<p>Katse kolm<br \/>\nterraform provider \u2013 need on binaarsed failid, mis sisaldavad koodi k\u00f5igi ressursside ja loogika jaoks, et t\u00f6\u00f6tada pilve API-dega. Igal pilvel on oma provider ja terraform kutsub neid lihtsalt oma RPC protokolli kaudu kahe protsessi vahel.<br \/>\nN\u00fc\u00fcd otsustasin p\u00f6\u00f6rduda otse terraform providerite poole l\u00e4bi RPC kutsete. See osutus ilusaks ja v\u00f5imaldas vahetada terraform providerid v\u00e4rskemate vastu, saades uusi v\u00f5imalusi, ilma koodi muutmata. Samuti selgus, et k\u00f5ik v\u00e4ljad tfstate'is ei pruugi olla tf-is, aga kuidas seda teada saada? Ainult k\u00fcsides providerilt selle kohta. Siis algas veel \u00fcks rekursiivne pornograafia regulaarsete v\u00e4ljendite koostamisega ja v\u00e4ljade otsimisega tfstate'i s\u00fcgavamates kihtides.<\/p>\n<p>L\u00f5puks saime kasuliku CLI t\u00f6\u00f6riista, millel on \u00fchine infrastruktuur k\u00f5igi terraformi pakkujate jaoks ja uut saab lihtsasti lisada. Samuti v\u00f5tavad ressursside lisamine v\u00e4he koodi. Pluss erinevad lisafunktsioonid, n\u00e4iteks ressursside vahelised \u00fchendused. Muidugi oli palju erinevaid probleeme, mida k\u00f5iki ei saaks kirjeldada.<br \/>\nNimeks sai Terrafomer. <\/p>\n<h3>Finaal<\/h3>\n<p>\nKasutades Terrafomerit, genereerisime 500\u2013700 tuhat rida tf + tfstate koodi kahe pilve vahel. Suutsime v\u00f5tta p\u00e4randiga asju ja alustada nende muutmist ainult terraformi kaudu, nagu parimates infrastruktuuri koodi ideedes. Lihtsalt maagia, kui v\u00f5tad tohutu pilve ja saad k\u00e4su abil t\u00f6\u00f6tavad terraformi failid. Edasi grep\/replace\/git ja nii edasi.<\/p>\n<p>Kalkuleerisin ja viisin korda, sain load. V\u00e4ljastasin reedel (02.05.19) GitHubis k\u00f5igile. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/GoogleCloudPlatform\/terraformer\">github.com\/GoogleCloudPlatform\/terraformer<\/a><\/noindex><br \/>\nSain juba 600 t\u00e4hte, 2 pull requesti openstacki ja kubernetes'e toe lisamiseks. H\u00e4id \u00fclevaateid. \u00dcldiselt on projekt kasulik inimestele.<br \/>\nSoovitan k\u00f5igile, kes soovivad alustada Terraformiga t\u00f6\u00f6tamist, ilma et peaksid k\u00f5ike selleks \u00fcmber kirjutama. <br \/>\nOlen r\u00f5\u00f5mus pull requestide, probleemide, ja t\u00e4htede \u00fcle.<\/p>\n<p>Demos<br \/>\n<noindex><img decoding=\"async\" alt=\"Terraformer \u2013 Infra struktuur Koodiks\" src=\"\/wp-content\/uploads\/2019\/05\/76f10055b9106590f72c4e22e4d4e6d5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/noindex><br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/450410\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0425\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043d\u043e\u0432\u044b\u0439 CLI tool \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0440\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 Terraform \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0441\u0442\u0430\u043b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \u0432 Devops\/Cloud\/IT \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435. \u0412\u0435\u0449\u044c \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0447\u0442\u043e\u0431 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u0441\u044f infrastructure as code. \u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u0435\u0439 \u0432 Terraform \u0430 \u0442\u0430\u043a \u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u0432\u0438\u043b\u043e\u043a, \u043e\u0441\u0442\u0440\u044b\u0445 \u043d\u043e\u0436\u0435\u0439 \u0438 \u0433\u0440\u0430\u0431\u043b\u0435\u0439. \u0421 Terraform \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0449\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24869,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-33123","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.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0425\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043d\u043e\u0432\u044b\u0439 CLI tool \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0440\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 Terraform \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0441\u0442\u0430\u043b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \u0432 Devops\/Cloud\/IT \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435. \u0412\u0435\u0449\u044c \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0447\u0442\u043e\u0431 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u0441\u044f infrastructure as code. \u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u0435\u0439 \u0432 Terraform \u0430 \u0442\u0430\u043a \u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u0432\u0438\u043b\u043e\u043a, \u043e\u0441\u0442\u0440\u044b\u0445 \u043d\u043e\u0436\u0435\u0439 \u0438 \u0433\u0440\u0430\u0431\u043b\u0435\u0439. \u0421 Terraform \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0449\u0438\" \/>\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\/terraformer-infrastructure-to-code\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Terraformer \u2014 Infrastructure To Code | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0425\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043d\u043e\u0432\u044b\u0439 CLI tool \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0440\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 Terraform \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0441\u0442\u0430\u043b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \u0432 Devops\/Cloud\/IT \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435. \u0412\u0435\u0449\u044c \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0447\u0442\u043e\u0431 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u0441\u044f infrastructure as code. \u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u0435\u0439 \u0432 Terraform \u0430 \u0442\u0430\u043a \u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u0432\u0438\u043b\u043e\u043a, \u043e\u0441\u0442\u0440\u044b\u0445 \u043d\u043e\u0436\u0435\u0439 \u0438 \u0433\u0440\u0430\u0431\u043b\u0435\u0439. \u0421 Terraform \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0449\u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/terraformer-infrastructure-to-code\" \/>\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=\"2019-10-31T18:50:52+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:50:52+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\udd47Terraformer \u2014 Infrastructure To Code | ProHoster","description":"Tahaksin r\u00e4\u00e4kida uuest CLI-t\u00f6\u00f6riistast, mille ma kirjutasin, et lahendada vana probleemi. Probleem Terraformist on juba pikka aega olnud standard Devopsi\/Cloud\/IT kogukonnas. See on v\u00e4ga mugav ja kasulik infrastruktuuri kodeerimisega tegelemiseks. Terraformis on palju plusse, aga ka palju harude, teravate noade ja takistuste kohti. Terraformiga on v\u00e4ga mugav uusi asju teha.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/terraformer-infrastructure-to-code","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\udd47Terraformer \u2014 Infrastructure To Code | ProHoster","og:description":"\u0425\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043d\u043e\u0432\u044b\u0439 CLI tool \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0440\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 Terraform \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0441\u0442\u0430\u043b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \u0432 Devops\/Cloud\/IT \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435. \u0412\u0435\u0449\u044c \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0447\u0442\u043e\u0431 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u0441\u044f infrastructure as code. \u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u0435\u0439 \u0432 Terraform \u0430 \u0442\u0430\u043a \u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u0432\u0438\u043b\u043e\u043a, \u043e\u0441\u0442\u0440\u044b\u0445 \u043d\u043e\u0436\u0435\u0439 \u0438 \u0433\u0440\u0430\u0431\u043b\u0435\u0439. \u0421 Terraform \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0449\u0438","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/terraformer-infrastructure-to-code","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":"2019-10-31T18:50:52+00:00","article:modified_time":"2019-10-31T18:50:52+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"33123","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":"2026-01-21 14:02:48","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:46:23","updated":"2026-01-21 14:02:48","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/33123","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=33123"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/33123\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/24869"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=33123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=33123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=33123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}