{"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\/sq\/blog\/administrirovanie\/terraformer-infrastructure-to-code","title":{"rendered":"Terraformer \u2014 Infrastruktur n\u00eb Kod","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Terraformer \u2014 Infrastruktur n\u00eb Kod\" src=\"\/wp-content\/uploads\/2019\/05\/d97414f6b4608dbb4ec7f582b7001773.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDo t\u00eb doja t\u00eb flisja p\u00ebr nj\u00eb mjet CLI t\u00eb ri q\u00eb kam shkruar p\u00ebr t\u00eb zgjidhur nj\u00eb problem t\u00eb vjet\u00ebr. <\/p>\n<h3>Problemi<\/h3>\n<p>\nTerraform ka koh\u00eb q\u00eb \u00ebsht\u00eb standard n\u00eb komunitetet DevOps\/Cloud\/IT. Nj\u00eb gj\u00eb shum\u00eb e dobishme dhe e vlefshme p\u00ebr t\u00eb menaxhuar infrastruktur\u00ebn si kod. Ka shum\u00eb avantazhe n\u00eb Terraform, por edhe shum\u00eb bifurkacione, thika t\u00eb mprehta dhe gryk\u00ebz. <br \/>\nMe Terraform \u00ebsht\u00eb shum\u00eb e leht\u00eb t\u00eb krijosh gj\u00ebra t\u00eb reja dhe m\u00eb pas t'i menaxhosh, t'i ndryshosh ose t'i fshish. \u00c7far\u00eb duhet t\u00eb b\u00ebjn\u00eb ata q\u00eb kan\u00eb nj\u00eb infrastruktur\u00eb t\u00eb madhe n\u00eb cloud dhe nuk \u00ebsht\u00eb krijuar p\u00ebrmes Terraform? Ta rishtysh dhe ta rikrijosh gjith\u00e7ka n\u00eb cloud \u00ebsht\u00eb disi e shtrenjt\u00eb dhe e pasigurt. <br \/>\nKam hasur nj\u00eb problem t\u00eb till\u00eb n\u00eb dy pun\u00eb, shembulli m\u00eb i thjesht\u00eb \u00ebsht\u00eb kur do t\u00eb doje q\u00eb gjith\u00e7ka t\u00eb ishte n\u00eb Git si skedar\u00eb Terraform, nd\u00ebrsa ke 250+ kasa dhe \u00ebsht\u00eb disi shum\u00eb t\u2019i shkruash ato p\u00ebr Terraform me dor\u00eb. <br \/>\nKa <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/hashicorp\/terraform\/issues\/581\">\u00e7\u00ebshtja<\/a><\/noindex> Prej vitit 2014 kishte nj\u00eb terrafom q\u00eb u mbyll n\u00eb vitin 2016 me shpres\u00ebn se do t\u00eb kishte import.<\/p>\n<p>N\u00eb p\u00ebrgjith\u00ebsi, gjith\u00e7ka \u00ebsht\u00eb si n\u00eb imazh, vet\u00ebm se nga e djathta n\u00eb t\u00eb majt\u00eb.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Paralajm\u00ebrime: Autori ka jetuar gjysm\u00ebn e jet\u00ebs jasht\u00eb Rusis\u00eb dhe shkruan pak n\u00eb rusisht. Kujdes: gabime n\u00eb ortografi.<\/p>\n<h3>Zgjidhjet<\/h3>\n<p>\n1. Ekziston nj\u00eb zgjidhje e gatshme dhe e vjet\u00ebr p\u00ebr AWS <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dtan4\/terraforming\">terraforming<\/a><\/noindex>. Kur p\u00ebrpiqesha t\u00eb merrja 250+ bucket-e t\u00eb mi p\u00ebrmes tij, kuptova se situata nuk ishte e mir\u00eb. AWS ka sjell\u00eb shum\u00eb opsione t\u00eb reja, por terraformimi nuk \u00ebsht\u00eb n\u00eb dijeni p\u00ebr to dhe n\u00eb p\u00ebrgjith\u00ebsi p\u00ebrdor Ruby. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dtan4\/terraforming\/blob\/master\/lib\/terraforming\/template\/tf\/s3.erb\">templet duken t\u00eb varf\u00ebra<\/a><\/noindex>. Pas 2 pasdite, d\u00ebrgova <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dtan4\/terraforming\/pull\/396\">Pull request<\/a><\/noindex> p\u00ebr t\u00eb shtuar m\u00eb shum\u00eb mund\u00ebsi atje dhe kuptova q\u00eb k\u00ebto zgjidhje nuk jan\u00eb t\u00eb p\u00ebrshtatshme fare. <br \/>\nSi funksionon terraformimi? Merr t\u00eb dh\u00ebnat nga SDK AWS dhe gjeneron tf dhe tfstate p\u00ebrmes templeteve. <br \/>\nK\u00ebtu jan\u00eb 3 probleme:<br \/>\n1. Do ket\u00eb gjithmon\u00eb nj\u00eb vones\u00eb n\u00eb p\u00ebrdit\u00ebsime<br \/>\n2. Nd\u00ebr datot\u00eb tf ndonj\u00ebher\u00eb dalin t\u00eb d\u00ebmtuara <br \/>\n3. tfstate grumbullohet ve\u00e7mas nga tf dhe nuk p\u00ebrputhet gjithmon\u00eb<br \/>\nN\u00eb fakt, \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb marr\u00ebsh nj\u00eb rezultat ku `terraform plan` thot\u00eb se nuk ka ndryshime.<\/p>\n<p>2. `terraform import` \u2014 \u00ebsht\u00eb nj\u00eb komand\u00eb e integruar n\u00eb terraform. Si funksionon? <br \/>\nShkruan nj\u00eb datotek\u00eb t\u00eb zbraz\u00ebt TF me emrin dhe tipin e burimit, pastaj ekzekuton `terraform import` dhe kalon ID-n\u00eb e burimit. terraform i drejtohet ofruesit, merr t\u00eb dh\u00ebnat dhe krijon nj\u00eb sked\u00eb tfstate. <br \/>\nK\u00ebtu jan\u00eb 3 probleme:<br \/>\n1. Marrim vet\u00ebm sked\u00ebn tfstate, nd\u00ebrsa tf mbetet e zbraz\u00ebt dhe duhet ta shkruajm\u00eb manualisht ose ta konvertojm\u00eb nga tfstate.<br \/>\n2. M\u00ebnyra e funksionimit \u00ebsht\u00eb vet\u00ebm p\u00ebr nj\u00eb burim \u00e7do her\u00eb dhe nuk mb\u00ebshtet t\u00eb gjitha burimet. Dhe \u00e7far\u00eb duhet t\u00eb b\u00ebj p\u00ebrs\u00ebri me 250+ bucket-e?<br \/>\n3. Duhet ditur ID e resurseve \u2014 pra duhet ta mb\u00ebshtjellim at\u00eb n\u00eb kod q\u00eb merr list\u00ebn e resurseve.<br \/>\nN\u00eb t\u00eb v\u00ebrtet\u00eb, rezultati \u00ebsht\u00eb pjesor dhe nuk shkall\u00ebzohet mir\u00eb.<\/p>\n<h3>Zgjidhja ime.<br \/>\n<\/h3>\n<p>K\u00ebrkesat:<br \/>\n1. Mund\u00ebsia p\u00ebr t\u00eb krijuar skedar\u00eb tf dhe tfstate p\u00ebr resurset. P\u00ebr shembull, shkarkoni t\u00eb gjitha baret \/ grupin e siguris\u00eb \/ balancuesin e ngarkes\u00ebs dhe q\u00eb `terraform plan` kthen se nuk ka ndryshime.<br \/>\n2. Duhet 2 cloud GCP + AWS.<br \/>\n3. Nj\u00eb zgjidhje globale q\u00eb leht\u00eb azhurnohet \u00e7do her\u00eb dhe nuk humb koh\u00eb p\u00ebr \u00e7do resurs p\u00ebr 3 dit\u00eb pune.<br \/>\n4. T\u00eb b\u00ebhet Open source \u2014 t\u00eb gjith\u00eb kan\u00eb nj\u00eb problem t\u00eb till\u00eb.<\/p>\n<p>Gjuha Go \u2014 sepse m\u00eb p\u00eblqen, dhe ka nj\u00eb bibliotek\u00eb p\u00ebr krijimin e skedave HCL q\u00eb p\u00ebrdoret n\u00eb terraform + shum\u00eb kod n\u00eb terraform q\u00eb mund t\u00eb jet\u00eb i dobish\u00ebm.<\/p>\n<h3>Rruga.<\/h3>\n<p>\nP\u00ebrpjekja e par\u00eb.<br \/>\nE fillova nj\u00eb variant t\u00eb thjesht\u00eb. Qasja n\u00eb cloud p\u00ebrmes SDK p\u00ebr burimin n\u00eb nevoj\u00eb dhe konvertimi i tij n\u00eb fusha p\u00ebr terraform. P\u00ebrpjekja vdiq menj\u00ebher\u00eb n\u00eb grupin e siguris\u00eb sepse nuk m\u00eb p\u00eblqeu t\u00eb konvertoja vet\u00ebm grupin e siguris\u00eb p\u00ebr 1.5 dit\u00eb (dhe ka shum\u00eb resurse). E gjat\u00eb dhe m\u00eb pas fushat mund t\u00eb ndryshojn\u00eb \/ shtohen.<\/p>\n<p>P\u00ebrpjekja e dyt\u00eb.<br \/>\nE bazuar n\u00eb idet\u00eb e p\u00ebrshkruara. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/hashicorp\/terraform\/issues\/15608\">k\u00ebtu<\/a><\/noindex>. Thjesht merrni dhe konvertoni tfstate n\u00eb tf. T\u00eb dh\u00ebnat atje jan\u00eb dhe fushat jan\u00eb t\u00eb nj\u00ebjta. Si t\u00eb merrni nj\u00eb tfstate t\u00eb plot\u00eb p\u00ebr shum\u00eb burime?? K\u00ebtu ndihmon komanda `terraform refresh`. Terraform merr t\u00eb gjitha burimet n\u00eb tfstate dhe, sipas ID-s\u00eb, nxjerr t\u00eb dh\u00ebnat dhe i shkruan t\u00eb gjitha n\u00eb tfstate. Pra, krijoni nj\u00eb tfstate t\u00eb zbraz\u00ebt vet\u00ebm me emrat dhe ID-t\u00eb, startoni `terraform refresh` dhe merrni tfstate t\u00eb plota. Hurra!<br \/>\nTani do t\u00eb merremi me shkruarjen rekursive t\u00eb konvertuesit p\u00ebr tfstate n\u00eb tf. P\u00ebr ata q\u00eb nuk e kan\u00eb lexuar ndonj\u00ebher\u00eb tfstate, ai \u00ebsht\u00eb JSON, por i ve\u00e7ant\u00eb. <br \/>\nK\u00ebtu \u00ebsht\u00eb pjesa e tij e r\u00ebnd\u00ebsishme atribute<\/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>\nK\u00ebtu ka:<br \/>\n1. id \u2014 string<br \/>\n2. metadata \u2014 array me madh\u00ebsi 1 dhe n\u00eb t\u00eb nj\u00eb objekt me fushat e p\u00ebrshkruara m\u00eb posht\u00eb<br \/>\n3. spec \u2014 hash me madh\u00ebsi 1 dhe n\u00eb t\u00eb \u00e7el\u00ebs, vler\u00eb<br \/>\nN\u00eb p\u00ebrmbledhje, formati \u00ebsht\u00eb arg\u00ebtues, gjith\u00e7ka mund t\u00eb shkoj\u00eb thell\u00eb n\u00eb disa nivele<\/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>\nN\u00eb p\u00ebrgjith\u00ebsi, n\u00ebse dikush do nj\u00eb detyr\u00eb programimi p\u00ebr intervista, thjesht k\u00ebrkoni nj\u00eb parser p\u00ebr k\u00ebt\u00eb \u00e7\u00ebshtje \ud83d\ude42<br \/>\nPas p\u00ebrpjekjeve t\u00eb gjata p\u00ebr t\u00eb shkruar nj\u00eb parser pa gabime, gjeta nj\u00eb pjes\u00eb t\u00eb tij n\u00eb kodin terraform, p\u00ebrkat\u00ebsisht pjes\u00ebn m\u00eb t\u00eb r\u00ebnd\u00ebsishme. Dhe gjith\u00e7ka dukej se funksiononte normalisht<\/p>\n<p>P\u00ebrpjekja tre<br \/>\nTerraform provider \u00ebsht\u00eb blloqe binare q\u00eb p\u00ebrmbajn\u00eb kodin me t\u00eb gjitha resurset dhe logjik\u00ebn p\u00ebr t\u00eb punuar me API-t\u00eb e krijuesve t\u00eb hap\u00ebsirave t\u00eb cloud. \u00c7do cloud ka provider-in e tij dhe terraform-i vet\u00ebm i th\u00ebrret ato p\u00ebrmes protokollit t\u00eb tij RPC midis dy proceseve.<br \/>\nTani vendosa t\u00eb shkoj direkt te terraform providers p\u00ebrmes thirrjeve RPC. K\u00ebshtu doli bukur dhe ofroi mund\u00ebsin\u00eb p\u00ebr t\u00eb nd\u00ebrruar terraform providers me m\u00eb t\u00eb rinjt\u00eb dhe p\u00ebr t\u00eb marr\u00eb mund\u00ebsi t\u00eb reja pa ndryshuar kodin. K\u00ebtu u zbulua gjithashtu se jo t\u00eb gjitha fushat n\u00eb tfstate duhet t\u00eb jen\u00eb n\u00eb tf, por si ta di k\u00ebt\u00eb? Vet\u00ebm t\u00eb k\u00ebrkoj provider-in p\u00ebr k\u00ebt\u00eb. M\u00eb pas filloi nj\u00eb tjet\u00ebr pornografi rekursive mbi nd\u00ebrtimin e shprehjeve t\u00eb rregullta, nj\u00eb angazhim me k\u00ebrkimin e fushave brenda tfstate n\u00eb t\u00eb gjitha nivelet e thell\u00eb.<\/p>\n<p>N\u00eb fund, doli nj\u00eb mjet CLI i dobish\u00ebm me nj\u00eb infrastruktur\u00eb t\u00eb p\u00ebrbashk\u00ebt p\u00ebr t\u00eb gjith\u00eb ofruesit e terraform-it dhe \u00ebsht\u00eb e leht\u00eb t\u00eb shtosh t\u00eb rinj. Po ashtu, shtimi i burimeve k\u00ebrkon pak kod. Plus, ka nj\u00eb s\u00ebr\u00eb ve\u00e7orish si lidhjet midis burimeve. Sigurisht, kishte shum\u00eb probleme t\u00eb ndryshme q\u00eb nuk mund t\u00eb p\u00ebrshkruhen t\u00eb gjitha.<br \/>\nE quajta kafsh\u00ebn Terrafomer. <\/p>\n<h3>Finali<\/h3>\n<p>\nMe ndihm\u00ebn e Terrafomer, generuam 500-700 mij\u00eb rreshta kodi tf + tfstate nga dy cloud. Arrit\u00ebm t\u00eb merrnim gj\u00ebra legacike dhe t\u00eb fillonim t'i preknim ato vet\u00ebm p\u00ebrmes terraform-it si n\u00eb idet\u00eb m\u00eb t\u00eb mira t\u00eb infrastruktur\u00ebs si kod. \u00cbsht\u00eb thjesht magjike kur merr nj\u00eb cloud t\u00eb madh dhe e merr at\u00eb p\u00ebrmes nj\u00eb komande n\u00eb form\u00ebn e skedar\u00ebve terraform t\u00eb gatsh\u00ebm. Pastaj grep\/replace\/git dhe k\u00ebshtu me radh\u00eb.<\/p>\n<p>E kam rregulluar dhe e kam sjell\u00eb n\u00eb rregull, kam marr\u00eb leje. E publikova n\u00eb GitHub p\u00ebr t\u00eb gjith\u00eb t\u00eb enjten (02.05.19). <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/GoogleCloudPlatform\/terraformer\">github.com\/GoogleCloudPlatform\/terraformer<\/a><\/noindex><br \/>\nKam marr\u00eb tashm\u00eb 600 yje, 2 pull requests p\u00ebr shtimin e mb\u00ebshtetjes p\u00ebr openstack dhe kubernetes. Komente t\u00eb mira. N\u00eb p\u00ebrgjith\u00ebsi, projekti \u00ebsht\u00eb i dobish\u00ebm p\u00ebr njer\u00ebzit.<br \/>\nE rekomandoj p\u00ebr t\u00eb gjith\u00eb ata q\u00eb d\u00ebshirojn\u00eb t\u00eb fillojn\u00eb t\u00eb punojn\u00eb me Terraform dhe t\u00eb mos rishkruajn\u00eb gjith\u00e7ka p\u00ebr k\u00ebt\u00eb. <br \/>\nDo t\u00eb jem i lumtur p\u00ebr pull requests, issues, stars.<\/p>\n<p>Demo<br \/>\n<noindex><img decoding=\"async\" alt=\"Terraformer \u2014 Infrastruktur n\u00eb Kod\" src=\"\/wp-content\/uploads\/2019\/05\/76f10055b9106590f72c4e22e4d4e6d5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/noindex><br \/>\n<br \/>Burimi: <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\/sq\/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=\"sq_AL\" \/>\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\/sq\/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 Infrastruktur\u00eb n\u00eb Kod | ProHoster","description":"D\u00ebshiroj t\u00eb flas p\u00ebr mjetin e ri CLI q\u00eb kam shkruar p\u00ebr t\u00eb zgjidhur nj\u00eb problem t\u00eb vjet\u00ebr. Problemi me Terraform ka koh\u00eb q\u00eb \u00ebsht\u00eb b\u00ebr\u00eb standard n\u00eb komunitetin DevOps\/Cloud\/IT. \u00cbsht\u00eb nj\u00eb gj\u00eb shum\u00eb e dobishme dhe praktike p\u00ebr t\u00eb u angazhuar me infrastruktur\u00ebn si kod. Ka shum\u00eb bukuri n\u00eb Terraform, si dhe shum\u00eb thika, gajle dhe gryk\u00eb. Me Terraform \u00ebsht\u00eb shum\u00eb e leht\u00eb t\u00eb b\u00ebsh gj\u00ebra t\u00eb reja.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/terraformer-infrastructure-to-code","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/33123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=33123"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/33123\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/24869"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=33123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=33123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=33123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}