{"id":52367,"date":"2019-11-07T00:00:00","date_gmt":"2019-11-06T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/pereshel-s-terraform-na-cloudformation-i-pozhalel"},"modified":"2020-02-18T14:00:04","modified_gmt":"2020-02-18T11:00:04","slug":"pereshel-s-terraform-na-cloudformation-i-pozhalel","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/pereshel-s-terraform-na-cloudformation-i-pozhalel","title":{"rendered":"Pre\u0161ao sam s Terraform-a na CloudFormation \u2014 i po\u017ealio se","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Predstavljanje infrastrukture kao koda u ponovljivom tekstualnom formatu najbolja je praksa za sustave koju nije potrebno dodatno obja\u0161njavati. Ova praksa poznata je pod nazivom <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Infrastructure_as_code\">Infrastructure as Code<\/a><\/noindex>, a za njeno ostvarivanje, posebno u AWS-u, postoje dva popularna alata: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/\">Terraform<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/cloudformation\/\">CloudFormation<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Pre\u0161ao sam s Terraform-a na CloudFormation \u2014 i po\u017ealio se\" src=\"\/wp-content\/uploads\/2019\/11\/e33084fb81ca06107b341eef01e69adc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Uspore\u0111ujem iskustva s Terraformom i CloudFormationom<\/em><\/p>\n<p><\/p>\n<p>Prije nego \u0161to sam do\u0161ao u <noindex><a rel=\"nofollow\" href=\"https:\/\/www.twitch.tv\/\">Twitch<\/a><\/noindex> (poznat i kao <noindex><a rel=\"nofollow\" href=\"https:\/\/www.businessinsider.com\/amazon-buys-twitch-2014-8\">Amazon Jr.<\/a><\/noindex>) radio sam <noindex><a rel=\"nofollow\" href=\"https:\/\/www.signalfx.com\/\">u jednom startupu<\/a><\/noindex> i tri godine koristio Terraform. Na novom mjestu tako\u0111er sam aktivno koristio Terraform, a zatim je tvrtka odlu\u010dila pre\u0107i na sve a la Amazon, uklju\u010duju\u0107i CloudFormation. Temeljito sam razvijao najbolje prakse i za jedan i za drugi alat, te ih koristio u vrlo slo\u017eenim radnim procesima \u0161irom organizacije. Kasnije, nakon pa\u017eljivog razmatranja posljedica prelaska s Terrform na CloudFormation, uvjerio sam se da je Terraform, vjerovatno, najbolji izbor za organizaciju.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"terraform-uzhasnyy\">Terraform U\u017easno<\/h2>\n<p><\/p>\n<h3 id=\"beta-versiya-po\">Beta verzija softvera<\/h3>\n<p><\/p>\n<p>Terraform jo\u0161 uvijek nema verziju 1.0, i to je veliki razlog za ne kori\u0161tenje. Otada kada sam ga prvi put probao, jako se promijenio, ali tada je <code>terraform apply<\/code> \u010cesto se kvario nakon nekoliko a\u017euriranja ili jednostavno nakon nekoliko godina kori\u0161tenja. Rekao bih da je \"sada sve druga\u010dije\", ali... svi to izgleda govore, zar ne? Ima promjena koje nisu kompatibilne s prethodnim verzijama, iako su prikladne, a \u010dak je i osje\u0107aj kao da je sintaksa i apstrakcije skladi\u0161ta resursa sada kako treba. Alat se \u010dini da je stvarno postao bolji, ali... :-0<\/p>\n<p><\/p>\n<p>S druge strane, AWS se dobro potrudio odr\u017eavaju\u0107i kompatibilnost s prethodnim verzijama. Sve je vjerojatno zato \u0161to njihove usluge \u010desto temeljito testiraju unutar organizacije i tek potom, preimenuju\u0107i ih, objavljuju. Tako da je \"dobro se potrudio\" jo\u0161 blaga izjava. Odr\u017eavanje kompatibilnosti s prethodnim verzijama API-a za tako raznoliku i slo\u017eenu sustav poput AWS-a nevjerojatno je te\u0161ko. Svatko tko je ikada morao odr\u017eavati javne API-e koji se koriste tako \u0161iroko, treba razumjeti koliko je te\u0161ko to raditi toliko godina. A pona\u0161anje CloudFormation-a, koliko se sje\u0107am, nikada se nije promijenilo tijekom godina.<\/p>\n<p><\/p>\n<h3 id=\"znakomsya-noga-eto-pulya\">Poznaj nogu... to je metak<\/h3>\n<p><\/p>\n<p>Koliko ja znam, ukloniti resurs <strong>stranog<\/strong> Uvo\u0111enje resursa u CloudFormation stog iz svog CF stoga nije mogu\u0107e. Sli\u010dno tome, Terraform omogu\u0107ava uvoz postoje\u0107ih resursa u svoj stog. Funkcija je, moglo bi se re\u0107i, zapanjuju\u0107a, ali s velikom snagom dolazi i velika odgovornost. Jednom kada se resurs uvede u stog, dok radi\u0161 sa svojim stogom, taj resurs ne mo\u017ee\u0161 obrisati ili promeniti. Jednom nas je to ko\u0161talo. Na Twitch sajtu, neko, ne misle\u0107i ni\u0161ta lo\u0161e, slu\u010dajno je uveo ne\u010diju AWS sigurnosnu grupu u svoj vlastiti Terraform stog. Unio je nekoliko komandi i... sigurnosna grupa (zajedno s dolaznim prometom) nestala je.<\/p>\n<p><\/p>\n<h2 id=\"terraform-velikiy\">Terraform Veliki<\/h2>\n<p><\/p>\n<h3 id=\"vosstanovlenie-iz-nepolnyh-sostoyaniy\">Obnova iz nedovr\u0161enih stanja<\/h3>\n<p><\/p>\n<p>Ponekad CloudFormation ne mo\u017ee u potpunosti pre\u0107i iz jednog stanja u drugo. Pritom \u0107e se truditi da se vrati na prethodno. Na\u017ealost, to nije uvek izvodljivo. Te\u0161ko je kasnije debagovati ono \u0161to se dogodilo \u2014 nikada ne zna\u0161 ho\u0107e li CloudFormation biti sretan zbog svojih 'hakiranja' \u2014 \u010dak i ako radi\u0161 na popravci. A ho\u0107e li se mo\u0107i vratiti na prethodno stanje, ne zna dobro i po defaultu uzima \u010dasima \u010dekaju\u0107i \u010dudo.<\/p>\n<p><\/p>\n<p>Terraform, s druge strane, sklone je da se obnavlja nakon neuspelih prelaza na mnogo elegantniji na\u010din i nudi pro\u0161irene alate za debagovanje.<\/p>\n<p><\/p>\n<h3 id=\"bolee-yasnye-izmeneniya-v-sostoyaniya-dokumenta\">Jasnije promene u stanjima dokumenta<\/h3>\n<p><\/p>\n<blockquote><p>\"Dobro, ravnote\u017eni teret, ti se mijenja\u0161. Ali kako?\"<\/p>\n<p>\u2014 zabrinuti in\u017eenjer, spreman pritisnuti gumb \"prihvati\".<\/p><\/blockquote>\n<p>Ponekad moram napraviti neke manipulacije s ravnote\u017enim ure\u0111ajem u CloudFormation stogu \u2014 na primer, dodati broj porta ili promeniti sigurnosnu grupu. CloudFormation slabo prikazuje promene. Ja, kao na iglama, prekontroliram yaml datoteku deset puta, da budem siguran da nisam ne\u0161to va\u017eno obrisao, a suvi\u0161no dodao.<\/p>\n<p><\/p>\n<p>Terraform je u tom smislu mnogo transparentniji. Ponekad \u010dak i previ\u0161e transparentan (pro\u010ditaj: dodaje nervozu). Na sre\u0107u, u najnoviju verziju su uklju\u010dili pobolj\u0161ano prikazivanje promena \u2014 sada se ta\u010dno vidi \u0161ta se menja.<\/p>\n<p><\/p>\n<h3 id=\"gibkost\">Fleksibilnost<\/h3>\n<p><\/p>\n<blockquote><p>Pi\u0161ite softver obrnutim redosledom.<\/p><\/blockquote>\n<p>Izravo re\u010deno, najva\u017enija odrednica dugovje\u010dnog softvera je sposobnost prilago\u0111avanja promjenama. Svaki softver treba pisati od kraja. Naj\u010de\u0161\u0107e sam se zbunio \u0161to sam uzeo \"jednostavnu\" uslugu, a zatim po\u010deo uklapati sve u jedinstveni CloudFormation ili Terraform okvir. I, naravno, nakon mjeseci otkrivao sam da sam sve krivo shvatio, a usluga zapravo nije jednostavna! Tada sam trebao nekako podijeliti veliki okvir na manje dijelove. Kada radite s CloudFormation-om, to je mogu\u0107e samo ako prvo ponovo stvorite postoje\u0107i okvir, a ja to, sa svojim bazama podataka, ne radim. Terraform je, pak, omogu\u0107avao da se razdvoji okvir i razlo\u017ei na razumljivije manje dijelove.<\/p>\n<p><\/p>\n<h3 id=\"moduli-v-git\">Moduli u git<\/h3>\n<p><\/p>\n<p>Dijeliti Terraform kod me\u0111u brojnim stogovima puno je lak\u0161e nego kod CloudFormation. S Terraformom mo\u017eete staviti kod u git repozitorij i pristupati mu koriste\u0107i semanti\u010dko upravljanje verzijama. Svako tko ima pristup tom repozitoriju mo\u017ee ponovno koristiti zajedni\u010dki kod. Ekvivalent CloudFormation-a je S3, ali on nema iste prednosti i nema razloga da se uop\u0107e odreknete gita u korist S3.<\/p>\n<p><\/p>\n<p>Organizacija je rasla i sposobnost dijeljenja zajedni\u010dkih stogova dostigla je kriti\u010dnu razinu. S Terraformom to dolazi lako i prirodno, dok vas CloudFormation tjera da presko\u010dite kroz obru\u010de prije nego \u0161to dobijete ne\u0161to sli\u010dno.<\/p>\n<p><\/p>\n<h3 id=\"operations-as-code\">Operacije kao kod<\/h3>\n<p><\/p>\n<blockquote><p>\"Zascripirati i gotovo\".<\/p>\n<p>- in\u017eenjer tri godine prije nego \u0161to je izumio Terraform.<\/p><\/blockquote>\n<p>Kada je rije\u010d o razvoju softvera, Go ili Java program nije samo kod.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Pre\u0161ao sam s Terraform-a na CloudFormation \u2014 i po\u017ealio se\" src=\"\/wp-content\/uploads\/2019\/11\/a5c61fd318b9b5aa62ebb69e38ca1b0e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Kod kao kod<\/em><\/p>\n<p><\/p>\n<p>Tu je i infrastruktura na kojoj to radi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Pre\u0161ao sam s Terraform-a na CloudFormation \u2014 i po\u017ealio se\" src=\"\/wp-content\/uploads\/2019\/11\/301c0323baa18563f05503e701af069b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Infrastructure as Code<\/em><\/p>\n<p><\/p>\n<p>Ali odakle ona dolazi? Kako je pratiti? Gdje je va\u0161 kod? Trebaju li programeri dozvolu za pristup?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Pre\u0161ao sam s Terraform-a na CloudFormation \u2014 i po\u017ealio se\" src=\"\/wp-content\/uploads\/2019\/11\/5cb0b6f720682b7bb6d5f485287b618b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Operacije kao kod<\/em><\/p>\n<p><\/p>\n<blockquote><p>Biti softverski programer ne zna\u010di samo pisati kod.<\/p><\/blockquote>\n<p>Nije samo AWS: vjerojatno koristite usluge drugih davatelja. SignalFx, PagerDuty ili Github. Mo\u017eda imate vlastiti Jenkins server za CI\/CD ili unutarnju Grafana kontrolnu plo\u010du za pra\u0107enje. Infra kao kod bira se iz raznih razloga, a svaki je jednako va\u017ean za sve vezano uz softver.<\/p>\n<p><\/p>\n<p>Kad sam radio u Twitchu, ubrzavali smo usluge unutar mije\u0161anih integriranih sustava i AWS Amazon-a. Proizvodili smo i odr\u017eavali brojne mikrousluge, pove\u0107avaju\u0107i operativne tro\u0161kove. Diskusije su se odvijale otprilike ovako:<\/p>\n<p><\/p>\n<ul>\n<li><strong>Ja<\/strong>: \u010cekaj, to je previ\u0161e koraka za pokretanje jednog mikroservisa. Trebat \u0107e mi ova stvar da otvorim AWS ra\u010dun (prijelazili smo na 2 ra\u010duna na <strong>mikroservis<\/strong>), zatim ova \u2014 za postavljanje obavijesti, jo\u0161 ova \u2014 za repozitorij koda, i ova \u2014 za listu adresa e-po\u0161te, pa i ova...<\/li>\n<li><strong>Kontakt<\/strong>: Skriptirat \u0107emo i gotovo.<\/li>\n<li><strong>Ja<\/strong>: Dobro, ali sam skript \u0107e se promijeniti. Trebat \u0107e na\u010din kako provjeriti da su sve te ugra\u0111ene stvari od amazona u aktualnom stanju.<\/li>\n<li><strong>Kontakt<\/strong>: Zvu\u010di dobro. I za to \u0107emo napisati skript.<\/li>\n<li><strong>Ja<\/strong>: Odli\u010dno! A sigurno \u0107e trebati i parametre. Ho\u0107e li ih primiti?<\/li>\n<li><strong>Kontakt<\/strong>: Ho\u0107e, kamo bi oti\u0161ao!<\/li>\n<li><strong>Ja<\/strong>: Proces se mo\u017ee promijeniti, izgubit \u0107e se unatrag kompatibilnost. Bit \u0107e potreban neki semanti\u010dki kontrola verzija.<\/li>\n<li><strong>Kontakt<\/strong>: Sjajna ideja!<\/li>\n<li><strong>Ja<\/strong>: Alate mo\u017eemo mijenjati ru\u010dno, unutar korisni\u010dkog su\u010delja. Trebat \u0107e nam na\u010din da to provjeravamo i ispravljamo.<\/li>\n<\/ul>\n<p><\/p>\n<p><em>\u20263 godine kasnije:<\/em><\/p>\n<p><\/p>\n<ul>\n<li><strong>Kontakt<\/strong>: I uspjeli smo napraviti terraform.<\/li>\n<\/ul>\n<p><\/p>\n<p>Moral pri\u010de je da \u010dak i ako ste <strong>do u\u0161iju u svemu amazonskom.<\/strong>, i dalje koristite ne\u0161to \u0161to nije od AWS-a, a ti servisi imaju stanje koje koristi jezik za konfiguraciju kako bi to stanje sinkronizirali.<\/p>\n<p><\/p>\n<h3 id=\"cloudformation-lambda-vs-git-moduli-terraform\">CloudFormation lambda vs git-moduli terraform<\/h3>\n<p><\/p>\n<p>lambda je CloudFormation rje\u0161enje za pitanje korisni\u010dke logike. Pomo\u0107u lambda mo\u017eete <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSCloudFormation\/latest\/UserGuide\/macros-example.html\">izraditi makroe<\/a><\/noindex> ili <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSCloudFormation\/latest\/UserGuide\/walkthrough-custom-resources-lambda-lookup-amiids.html\">korisni\u010dka resursa<\/a><\/noindex>. Ovaj pristup predstavlja dodatne slo\u017eenosti koje ne postoje u semanti\u010dkom kontroliranju verzija git modula u Terraformu. Najva\u017eniji problem za mene postalo je upravljanje dozvolama za sve te korisni\u010dke lambda (a to su desetine AWS ra\u010duna). Drugi problem po va\u017enosti bio je onaj tipa \u201e\u0161to je bilo prije \u2014 koko\u0161 ili jaje?\u201c: bio je povezan s kodom lambda. Ova funkcija \u2014 infrastruktura i kod, i ona sama treba nadzor i a\u017euriranja. Posljednji \u010davao u kov\u010deg bila je pote\u0161ko\u0107a u semanti\u010dkom a\u017euriranju promjena u kodu lambda; tako\u0111er je bilo potrebno u\u010diniti da se akcije stoga ne mijenjaju izme\u0111u pokretanja, osim ako za to ne dobiju izravnu naredbu.<\/p>\n<p><\/p>\n<p>Sje\u0107am se da sam jednom po\u017eelio stvoriti kanarinski deployment za Elastic Beanstalk s klasi\u010dnim ravnote\u017eom optere\u0107enja. Najlak\u0161e bi bilo napraviti drugo raspore\u0111ivanje za EB pored proizvodnog okru\u017eenja, poduzimaju\u0107i jo\u0161 jedan korak: spoji automatski skalabilnu grupu kanarinskog rasporeda s LB rasporedom u proizvodno okru\u017eenje. A budu\u0107i da Terraform koristi <noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/docs\/providers\/aws\/r\/elastic_beanstalk_environment.html#autoscaling_groups\">ASG beantalk kao izlaz<\/a><\/noindex>, to zahtijeva 4 dodatne linije koda u Terraformu. Kada sam pitao postoji li usporedivo rje\u0161enje u CloudFormationu, pokazali su mi cijeli repozitorij u gitu s sustavom raspore\u0111ivanja i ostalim: i sve to \u2014 zbog onih jadnih 4 linije koda u Terraformu.<\/p>\n<p><\/p>\n<h3 id=\"on-luchshe-obnaruzhivaet-dreyf\">Bolje otkriva drift<\/h3>\n<p><\/p>\n<blockquote><p>Provjerite jesu li stvarnost i o\u010dekivanja uskla\u0111eni.<\/p><\/blockquote>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/blogs\/aws\/new-cloudformation-drift-detection\/\">Otkrivanje drifta<\/a><\/noindex> \u2014 vrlo mo\u0107na funkcija operations as code, jer poma\u017ee osigurati da stvarnost odgovara o\u010dekivanjima. Dostupna je i s CloudFormationom i s Terraformom. No, kako se radna okru\u017eenja pove\u0107avaju, otkrivanje drifta u CloudFormationu davalo je sve vi\u0161e la\u017enih upozorenja.<\/p>\n<p><\/p>\n<p>S Terraformom imate mnogo naprednije lifecycle hookove za otkrivanje drifta. Na primjer, unosite naredbu <noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/docs\/configuration\/resources.html#ignore_changes\">ignore_changes<\/a><\/noindex> direktno u definiciji ECS zadatka, ako \u017eelite ignorirati promjene u definiciji odre\u0111enog zadatka, ne zanemaruju\u0107i pri tome promjene u cijelom ECS rasporedu.<\/p>\n<p><\/p>\n<h2 id=\"cdk-i-buduschee-cloudformation\">CDK i budu\u0107nost CloudFormationa<\/h2>\n<p><\/p>\n<p>CloudFormation je te\u0161ko upravljati na velikim, me\u0111uinfrastrukturnim razmjerima. Mnogi od ovih problema su prepoznati, a alat treba stvari poput <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/en_pv\/cdk\/latest\/guide\/home.html\">aws-cdk<\/a><\/noindex>, struktura za definiranje cloud infrastrukture u kodu i njezino izvo\u0111enje kroz AWS CloudFormation. Bit \u0107e zanimljivo vidjeti \u0161to \u010deka aws-cdk u budu\u0107nosti, ali \u0107e mu biti te\u0161ko natjecati se s drugim prednostima Terraform-a; bit \u0107e potrebne globalne promjene da bi CloudFormation postao konkurentan.<\/p>\n<p><\/p>\n<h3 id=\"chtoby-terraform-ne-razocharoval\">Da Terraform ne razo\u010dara<\/h3>\n<p><\/p>\n<blockquote><p>To je \u201einfrastruktura kao KOD\u201c, a ne \u201ekao tekst\u201c.<\/p><\/blockquote>\n<p>Moj prvi dojam o Terraformu bio je prili\u010dno lo\u0161. Mislim da jednostavno nisam razumio pristup. Gotovo svi in\u017eenjeri prvotno ga nesvjesno do\u017eivljavaju kao tekstualni format koji treba pretvoriti u \u017eeljenu infrastrukturu. NE TREBA TAKO.<\/p>\n<p><\/p>\n<h3 id=\"propisnye-istiny-horoshey-razrabotki-po-otnosyatsya-i-k-terraform\">Osnovne istine dobre razvoja softvera primjenjuju se i na Terraform.<\/h3>\n<p><\/p>\n<p>Vidjela sam kako mnoge prakse za pisanje dobrog koda bivaju ignorirane u Terraformu. Godinama ste u\u010dili da postanete dobar programer. Ne odri\u010dite se tog iskustva samo zato \u0161to radite s Terraformom. Istinite tvrdnje dobre softverske izvedbe primjenjuju se i na Terraform.<\/p>\n<p><\/p>\n<h3 id=\"kak-uzh-kod-i-ne-zadokumentirovat\">Kako mo\u017eete kodirati i ne dokumentirati?<\/h3>\n<p><\/p>\n<p>Nai\u0161la sam na ogromne Terraform stackove potpuno bez dokumentacije. Kako mo\u017eete pisati kod na stranicama \u2014 potpuno bez dokumentacije? Dodajte dokumentaciju koja obja\u0161njava va\u0161 <strong>kod<\/strong> Terraform (naglasak ovdje na rije\u010d \u201ekod\u201c), za\u0161to je ovaj odjeljak toliko va\u017ean i \u0161to radite.<\/p>\n<p><\/p>\n<h3 id=\"kak-mozhno-razvorachivat-servisy-kotorye-nekogda-byli-odnoy-bolshoy-funkciey-main\">Kako mo\u017eete implementirati usluge koje su nekada bile jedna velika funkcija main()?<\/h3>\n<p><\/p>\n<p>Nai\u0161la sam na vrlo slo\u017eene Terraform stackove predstavljene kao jedan modul. Za\u0161to softver ne izvodimo na taj na\u010din? Za\u0161to razbiti velike funkcije na manje? Isti razlozi vrijede i za Terraform. Ako je va\u0161 modul prevelik \u2014 trebate ga podijeliti na manje module.<\/p>\n<p><\/p>\n<h3 id=\"razve-vasha-kompaniya-ne-polzuetsya-bibliotekami\">Zar va\u0161a tvrtka ne koristi knji\u017enice?<\/h3>\n<p><\/p>\n<p>Vidjela sam kako in\u017eenjeri, pokre\u0107u\u0107i novi projekt pomo\u0107u Terraform-a, glupavo kopiraju velike dijelove iz drugih projekata u svoje, a zatim ih ure\u0111uju dok ne po\u010dnu raditi. Da li biste vi u svojoj firmi radili tako s \u201eproizvodnim\u201c kodom? Nismo bez razloga uveli upotrebu biblioteka. Da, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=PAAkCSZUG1c&amp;t=9m28s\">ne mora sve biti knji\u017enica,<\/a><\/noindex> ali gdje bismo bili bez zajedni\u010dkih knji\u017enica uop\u0107e?!<\/p>\n<p><\/p>\n<h3 id=\"razve-vy-ne-polzuetes-pep8-ili-gofmt\">Zar ne koristite PEP8 ili gofmt?<\/h3>\n<p><\/p>\n<p>U ve\u0107ini jezika postoji standardna prihva\u0107ena shema formatiranja. U Pythonu je to PEP8. U Gou \u2014 gofmt. Terraform ima svoju: <code>terraform fmt<\/code>. Koristite slobodno! <\/p>\n<p><\/p>\n<h3 id=\"vy-stanete-polzovatsya-react-ne-znaya-javascript\">Ho\u0107ete li koristiti React, a da ne znate JavaScript?<\/h3>\n<p><\/p>\n<p>Terraform moduli mogu pojednostaviti neki dio slo\u017eene infrastrukture koju gradite, ali to ne zna\u010di da se o njoj uop\u0107e ne morate razumjeti. \u017delite li ispravno koristiti Terraform bez razumijevanja resursa? Odrubljujete: vrijeme \u0107e prolaziti, a vi nikada ne\u0107ete savladati Terraform.<\/p>\n<p><\/p>\n<h3 id=\"vy-kodite-singltonami-ili-vnedryaya-zavisimosti\">Pisnete li singleton-e ili uvodite zavisnosti?<\/h3>\n<p><\/p>\n<p>Uvo\u0111enje zavisnosti je priznata najbolja praksa za razvoj softvera, koju preferiraju singltoni. Kako \u0107e to koristiti u Terraformu? Susretao sam Terraform module koji zavise od udaljenog stanja. Umesto da pi\u0161ete module koji izvla\u010de iz udaljenog stanja, napi\u0161ite modul koji prima parametre. A zatim prenesite te parametre u modul.<\/p>\n<p><\/p>\n<h3 id=\"vashi-biblioteki-delayut-desyat-veschey-horosho-ili-odnu---otlichno\">Va\u0161e biblioteke rade deset stvari dobro ili jednu \u2014 odli\u010dno?<\/h3>\n<p><\/p>\n<p>Najbolje funkcioni\u0161u biblioteke fokusirane na jednu zadatak koju izvode odli\u010dno. Umesto da pi\u0161ete velike Terraform module koji poku\u0161avaju da rade sve odjednom, sastavite ih od delova koji dobro obavljaju ne\u0161to jedno. A zatim ih kombinujte kako treba.<\/p>\n<p><\/p>\n<h3 id=\"kak-vy-proizvodite-izmeneniya-v-bibliotekah-bez-obratnoy-sovmestimosti\">Kako vr\u0161ite promene u bibliotekama bez unazadne kompatibilnosti?<\/h3>\n<p><\/p>\n<p>Op\u0161tem Terraform modu, kao i obi\u010dnoj biblioteci, potrebno je nekako obavestiti korisnike o promenama bez unazadne kompatibilnosti. Kada se dogode takve promene u bibliotekama, to iritira, a isto tako iritira kada se promene bez unazadne kompatibilnosti vr\u0161e u Terraform modulima. Preporu\u010duje se kori\u0161\u0107enje git tagova i semver prilikom kori\u0161\u0107enja Terraform modula.<\/p>\n<p><\/p>\n<h3 id=\"proizvodstvennyy-servis-zapuschen-u-vas-na-noutbuke-ili-v-datacentre\">Da li je va\u0161 proizvodni servis pokrenut na laptopu ili u data centru?<\/h3>\n<p><\/p>\n<p>Hashicorp ima alate poput <noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/docs\/cloud\/index.html\">terraform cloud<\/a><\/noindex> za pokretanje va\u0161eg terraforma. Ove centralizovane usluge olak\u0161avaju upravljanje, reviziju i odobravanje promena terraforma.<\/p>\n<p><\/p>\n<h3 id=\"razve-vy-ne-pishete-testy\">Zar ne pi\u0161ete testove?<\/h3>\n<p><\/p>\n<p>In\u017eenjeri priznaju da je kod potrebno testirati, ali \u010desto zanemaruju provjere dok rade s Terraform-om. Za infrastrukturu to mo\u017ee biti pogubno. Savjetujem \u201etestirati\u201c ili \u201estvarati primjere\u201c stoga uz kori\u0161tenje modula koji se mogu ispravno implementirati radi provjere tijekom CI\/CD-a.<\/p>\n<p><\/p>\n<h3 id=\"terraform-i-mikroservisy\">Terraform i mikroservisi<\/h3>\n<p><\/p>\n<blockquote><p>\u017divot i smrt kompanija koje se oslanjaju na mikroservise zavise od brzine, a\u017euriranja i uni\u0161tavanja novih mikroserviskih radnih stekova.<\/p><\/blockquote>\n<p>Naj\u010de\u0161\u0107i negativni aspekt povezan sa mikroservisnim arhitekturama, koji se ne mo\u017ee izbe\u0107i, vezan je za rad, a ne za kod. Ako percipirate Terraform samo kao na\u010din automatizacije infrastrukturnog dela mikroservisne arhitekture, li\u0161avate se pravih prednosti ovog sistema. Sada ve\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=HcmPi7-IVQo\">sve \u2014 kao kod<\/a><\/noindex>.<\/p>\n<p>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/474546\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u0434\u0430 \u0432 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u2014 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043b\u0443\u0447\u0448\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043c\u044b\u0448\u0435\u0432\u043e\u0437\u0438\u0442\u044c. \u0417\u0430 \u044d\u0442\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0439 \u0437\u0430\u043a\u0440\u0435\u043f\u0438\u043b\u043e\u0441\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u2014 Infrastructure as Code, \u0438 \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u0434\u043b\u044f \u0435\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 AWS, \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430: Terraform \u0438 CloudFormation. \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Terraform \u0438 CloudFormation \u0414\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0430 \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-52367","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u0434\u0430 \u0432 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u2014 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043b\u0443\u0447\u0448\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043c\u044b\u0448\u0435\u0432\u043e\u0437\u0438\u0442\u044c.\" \/>\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\/hr\/blog\/administrirovanie\/pereshel-s-terraform-na-cloudformation-i-pozhalel\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\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\u0435\u0440\u0435\u0448\u0435\u043b \u0441 Terraform \u043d\u0430 CloudFormation \u2014 \u0438 \u043f\u043e\u0436\u0430\u043b\u0435\u043b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u0434\u0430 \u0432 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u2014 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043b\u0443\u0447\u0448\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043c\u044b\u0448\u0435\u0432\u043e\u0437\u0438\u0442\u044c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/pereshel-s-terraform-na-cloudformation-i-pozhalel\" \/>\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-11-06T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:00:04+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\udd47Pre\u0161ao sam s Terraform-a na CloudFormation - i po\u017ealio se | ProHoster","description":"Predstavljanje infrastrukture kao koda u ponovljivom tekstualnom formatu je odli\u010dna praksa za sisteme koja ne zahteva dodatno mu\u010denje.","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/pereshel-s-terraform-na-cloudformation-i-pozhalel","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\u0435\u0440\u0435\u0448\u0435\u043b \u0441 Terraform \u043d\u0430 CloudFormation \u2014 \u0438 \u043f\u043e\u0436\u0430\u043b\u0435\u043b | ProHoster","og:description":"\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u0434\u0430 \u0432 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u2014 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043b\u0443\u0447\u0448\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043c\u044b\u0448\u0435\u0432\u043e\u0437\u0438\u0442\u044c.","og:url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/pereshel-s-terraform-na-cloudformation-i-pozhalel","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-11-06T21:00:00+00:00","article:modified_time":"2020-02-18T11:00:04+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"52367","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-24 03:23:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:44:44","updated":"2026-01-24 03:23:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/52367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=52367"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/52367\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=52367"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=52367"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=52367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}