{"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\/cs\/blog\/administrirovanie\/pereshel-s-terraform-na-cloudformation-i-pozhalel","title":{"rendered":"P\u0159e\u0161el jsem z Terraformu na CloudFormation \u2013 a litoval jsem.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Prezentace infrastruktury jako k\u00f3du v opakovateln\u00e9m textov\u00e9m form\u00e1tu je jednoduch\u00e1 osv\u011bd\u010den\u00e1 praxe pro syst\u00e9my, se kter\u00fdmi nemus\u00edte m\u00edt probl\u00e9my. Tato praxe nese n\u00e1zev \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Infrastructure_as_code\">Infrastruktura jako k\u00f3d<\/a><\/noindex>, a zat\u00edmco pro jej\u00ed implementaci, zejm\u00e9na v AWS, existuj\u00ed dva popul\u00e1rn\u00ed n\u00e1stroje: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/\">Terraform<\/a><\/noindex> a <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/cloudformation\/\">CloudFormation<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"P\u0159e\u0161el jsem z Terraformu na CloudFormation \u2013 a litoval jsem.\" src=\"\/wp-content\/uploads\/2019\/11\/e33084fb81ca06107b341eef01e69adc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Porovn\u00e1v\u00e1m zku\u0161enosti s Terraform a CloudFormation<\/em><\/p>\n<p><\/p>\n<p>P\u0159ed p\u0159\u00edchodem do <noindex><a rel=\"nofollow\" href=\"https:\/\/www.twitch.tv\/\">Twitch<\/a><\/noindex> (tak\u00e9 zn\u00e1m\u00e9 jako <noindex><a rel=\"nofollow\" href=\"https:\/\/www.businessinsider.com\/amazon-buys-twitch-2014-8\">Amazon Jr.<\/a><\/noindex>) jsem pracoval <noindex><a rel=\"nofollow\" href=\"https:\/\/www.signalfx.com\/\">v jednom startupu<\/a><\/noindex> a p\u0159ibli\u017en\u011b t\u0159i roky jsem pou\u017e\u00edval Terraform. Na nov\u00e9m m\u00edst\u011b jsem tak\u00e9 pln\u011b vyu\u017e\u00edval Terraform, a pak firma prosadila p\u0159echod na v\u0161echno jako Amazon, v\u010detn\u011b CloudFormation. Usilovn\u011b jsem vyv\u00edjel osv\u011bd\u010den\u00e9 praktiky pro ob\u011b platformy a pou\u017e\u00edval oba n\u00e1stroje v velmi slo\u017eit\u00fdch pracovn\u00edch procesech na \u00farovni organizace. Pozd\u011bji, po pe\u010dliv\u00e9m zv\u00e1\u017een\u00ed d\u016fsledk\u016f p\u0159echodu z Terraform na CloudFormation, jsem dosp\u011bl k n\u00e1zoru, \u017ee Terraform je pravd\u011bpodobn\u011b nejlep\u0161\u00ed volbou pro organizaci.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"terraform-uzhasnyy\">Terraform je hrozn\u00fd<\/h2>\n<p><\/p>\n<h3 id=\"beta-versiya-po\">Beta verze softwaru<\/h3>\n<p><\/p>\n<p>Terraform je\u0161t\u011b ani nevydal verzi 1.0, co\u017e je p\u00e1dn\u00fd d\u016fvod ho nepou\u017e\u00edvat. Od doby, kdy jsem ho poprv\u00e9 vyzkou\u0161el, se v\u00fdrazn\u011b zm\u011bnil, ale tehdy je\u0161t\u011b <code>terraform apply<\/code> \u010dasto selhal po n\u011bkolika aktualizac\u00edch nebo prost\u011b po p\u00e1r letech pou\u017e\u00edv\u00e1n\u00ed. \u0158ekl bych, \u017ee \u201ete\u010f u\u017e je v\u0161echno jinak\u201c, ale\u2026 tak to asi \u0159\u00edkaj\u00ed v\u0161ichni, co? Jsou tu zm\u011bny, kter\u00e9 nejsou kompatibiln\u00ed s p\u0159edchoz\u00edmi verzemi, i kdy\u017e jsou na m\u00edst\u011b, a dokonce je pocit, \u017ee syntaxe a abstrakce \u00falo\u017ei\u0161t\u011b zdroj\u016f jsou te\u010f na spr\u00e1vn\u00e9m m\u00edst\u011b. N\u00e1stroj se zd\u00e1 b\u00fdt opravdu lep\u0161\u00ed, ale\u2026 :-0<\/p>\n<p><\/p>\n<p>Na druhou stranu se AWS opravdu sna\u017eila udr\u017eet kompatibilitu s p\u0159edchoz\u00edmi verzemi. V\u0161echno asi proto, \u017ee jejich slu\u017eby jsou \u010dasto d\u016fkladn\u011b testov\u00e1ny uvnit\u0159 organizace a teprve pot\u00e9, co je p\u0159ejmenuj\u00ed, je zve\u0159ej\u0148uj\u00ed. Tak\u017ee \u201eud\u011blali dobrou pr\u00e1ci\u201c je je\u0161t\u011b slab\u00e9 slovo. Udr\u017eovat kompatibilitu s p\u0159edchoz\u00edmi verzemi API pro tak rozmanit\u00fd a slo\u017eit\u00fd syst\u00e9m, jako je AWS, je neuv\u011b\u0159iteln\u011b obt\u00ed\u017en\u00e9. Ka\u017ed\u00fd, kdo musel udr\u017eovat ve\u0159ejn\u011b p\u0159\u00edstupn\u00e1 API, kter\u00e1 se pou\u017e\u00edvaj\u00ed tak\u00e9 \u0161iroce, by m\u011bl rozum\u011bt tomu, jak t\u011b\u017ek\u00e9 to je d\u011blat po tolik let. A chov\u00e1n\u00ed CloudFormation se podle m\u00e9 pam\u011bti za ta l\u00e9ta nikdy nezm\u011bnilo.<\/p>\n<p><\/p>\n<h3 id=\"znakomsya-noga-eto-pulya\">Seznam se, noha\u2026 to je kulka<\/h3>\n<p><\/p>\n<p>Jak v\u00edm, odstranit zdroj <strong>ciz\u00edho<\/strong> Z vlastn\u00edho CF stacku nen\u00ed mo\u017en\u00e9 importovat CloudFormation stack. Podobn\u011b je to i s Terraformem. Ten umo\u017e\u0148uje importovat existuj\u00edc\u00ed zdroje do sv\u00e9ho stacku. Tato funkce je, d\u00e1 se \u0159\u00edci, \u00fa\u017easn\u00e1, ale s velkou silou p\u0159ich\u00e1z\u00ed i velk\u00e1 odpov\u011bdnost. Jakmile je zdroj p\u0159id\u00e1n do stacku, nen\u00ed mo\u017en\u00e9 tento zdroj b\u011bhem pr\u00e1ce se sv\u00fdm stackem odstranit nebo zm\u011bnit. Jednou jsem na to doplatil. Na webu Twitch n\u011bkdo, ani\u017e by m\u011bl \u0161patn\u00e9 \u00famysly, omylem importoval ciz\u00ed skupinu zabezpe\u010den\u00ed AWS do sv\u00e9ho vlastn\u00edho Terraform stacku. Zadal p\u00e1r p\u0159\u00edkaz\u016f a\u2026 skupina zabezpe\u010den\u00ed (spolu s p\u0159\u00edchoz\u00edm provozem) zmizela.<\/p>\n<p><\/p>\n<h2 id=\"terraform-velikiy\">Terraform Velk\u00fd<\/h2>\n<p><\/p>\n<h3 id=\"vosstanovlenie-iz-nepolnyh-sostoyaniy\">Obnova z ne\u00fapln\u00fdch stav\u016f<\/h3>\n<p><\/p>\n<p>N\u011bkdy CloudFormation nem\u016f\u017ee \u00fapln\u011b p\u0159ej\u00edt z jednoho stavu do druh\u00e9ho. Sna\u017e\u00ed se vr\u00e1tit k p\u0159edchoz\u00edmu stavu. Je \u0161koda, \u017ee to nen\u00ed v\u017edy provediteln\u00e9. Opravit to, co z\u016fstalo, b\u00fdv\u00e1 d\u011bsiv\u00e9 \u2014 nikdy nev\u00edte, zda CloudFormation ocen\u00ed, \u017ee ho hackuj\u00ed \u2014 i kdy\u017e jen pro opravu. A zda se vr\u00e1t\u00ed k p\u0159edchoz\u00edmu stavu, to moc nedok\u00e1\u017ee odhadnout a ve v\u00fdchoz\u00edm nastaven\u00ed vis\u00ed hodiny v o\u010dek\u00e1v\u00e1n\u00ed z\u00e1zraku.<\/p>\n<p><\/p>\n<p>Terraform m\u00e1 naopak elegantn\u011bj\u0161\u00ed zp\u016fsob, jak se zotavit po ne\u00fasp\u011b\u0161n\u00fdch p\u0159echodech, a nab\u00edz\u00ed roz\u0161\u00ed\u0159enou lad\u00edc\u00ed sadu.<\/p>\n<p><\/p>\n<h3 id=\"bolee-yasnye-izmeneniya-v-sostoyaniya-dokumenta\">Jasn\u011bj\u0161\u00ed zm\u011bny ve st\u00e1tn\u00edch dokumentech<\/h3>\n<p><\/p>\n<blockquote><p>\u201eDob\u0159e, balancer zat\u00ed\u017een\u00ed, ty se m\u011bn\u00ed\u0161. Ale jak?\u201c<\/p>\n<p>\u2014znepokojen\u00fd in\u017een\u00fdr, p\u0159ipraven\u00fd stisknout tla\u010d\u00edtko \u201ep\u0159ijmout\u201c.<\/p><\/blockquote>\n<p>N\u011bkdy pot\u0159ebuji prov\u00e9st n\u011bjak\u00e9 manipulace s load balancerem ve stacku CloudFormation \u2014 nap\u0159\u00edklad p\u0159idat \u010d\u00edslo portu nebo zm\u011bnit skupinu zabezpe\u010den\u00ed. CloudFormation zm\u011bny zn\u00e1zor\u0148uje slab\u011b. J\u00e1, jako na trn\u00ed, desetkr\u00e1t kontroluji yaml soubor, abych se ujistil, \u017ee jsem nic podstatn\u00e9ho neodstranil a \u017ee jsem nic zbyte\u010dn\u00e9ho nep\u0159idal.<\/p>\n<p><\/p>\n<p>Terraform je v tomto ohledu mnohem transparentn\u011bj\u0161\u00ed. N\u011bkdy je a\u017e p\u0159\u00edli\u0161 pr\u016fhledn\u00fd (\u010dti: otravn\u00fd). Na\u0161t\u011bst\u00ed byla do posledn\u00ed verze p\u0159id\u00e1na vylep\u0161en\u00e1 vizualizace zm\u011bn \u2014 nyn\u00ed je p\u0159esn\u011b vid\u011bt, co se m\u011bn\u00ed.<\/p>\n<p><\/p>\n<h3 id=\"gibkost\">Flexibilita<\/h3>\n<p><\/p>\n<blockquote><p>Pi\u0161te software od konce.<\/p><\/blockquote>\n<p>\u0158e\u010deno p\u0159\u00edmo, nejd\u016fle\u017eit\u011bj\u0161\u00ed vlastnost\u00ed dlouhov\u011bk\u00e9ho softwaru je schopnost p\u0159izp\u016fsobit se zm\u011bn\u00e1m. Jak\u00fdkoli software pi\u0161te odzadu. J\u00e1 jsem se nej\u010dast\u011bji sp\u00e1lil na tom, \u017ee jsem vzal \u201ejednoduchou\u201c slu\u017ebu a pak se sna\u017eil propa\u0161ovat v\u0161echno do jedin\u00e9ho stacku CloudFormation nebo Terraform. A samoz\u0159ejm\u011b, po m\u011bs\u00edc\u00edch se uk\u00e1zalo, \u017ee jsem v\u0161echno pochopil \u0161patn\u011b, a slu\u017eba vlastn\u011b nen\u00ed jednoduch\u00e1! A tak pot\u0159ebuji n\u011bjak\u00fdm zp\u016fsobem rozd\u011blit velk\u00fd stack na mal\u00e9 komponenty. Kdy\u017e pracujete s CloudFormation, je to mo\u017en\u00e9 pouze po p\u0159edchoz\u00edm znovuvytvo\u0159en\u00ed st\u00e1vaj\u00edc\u00edho stacku, co\u017e j\u00e1 se sv\u00fdmi DB ned\u011bl\u00e1m. Terraform mi v\u0161ak umo\u017enil dissect stack a rozd\u011blit ho na srozumiteln\u011bj\u0161\u00ed men\u0161\u00ed \u010d\u00e1sti.<\/p>\n<p><\/p>\n<h3 id=\"moduli-v-git\">Moduly v git<\/h3>\n<p><\/p>\n<p>Sd\u00edlen\u00ed k\u00f3du Terraform mezi mnoha z\u00e1sobn\u00edky je mnohem jednodu\u0161\u0161\u00ed ne\u017e sd\u00edlen\u00ed k\u00f3du CloudFormation. S Terraformem m\u016f\u017eete um\u00edstit k\u00f3d do repozit\u00e1\u0159e git a odkazovat na n\u011bj pomoc\u00ed s\u00e9mantick\u00e9 kontroly verz\u00ed. Ka\u017ed\u00fd, kdo m\u00e1 p\u0159\u00edstup k tomuto repozit\u00e1\u0159i, m\u016f\u017ee op\u011btovn\u011b pou\u017e\u00edt sd\u00edlen\u00fd k\u00f3d. Ekvivalent od CloudFormation je S3, ale ten nem\u00e1 stejn\u00e9 v\u00fdhody, a nen\u00ed \u017e\u00e1dn\u00fd d\u016fvod, pro\u010d bychom m\u011bli vzd\u00e1t git ve prosp\u011bch S3.<\/p>\n<p><\/p>\n<p>Organizace rostla a schopnost sd\u00edlet spole\u010dn\u00e9 z\u00e1sobn\u00edky dos\u00e1hla kritick\u00e9 \u00farovn\u011b. S Terraformem je to snadn\u00e9 a p\u0159irozen\u00e9, zat\u00edmco CloudFormation v\u00e1s donut\u00ed sk\u00e1kat p\u0159es obru\u010de, ne\u017e budete m\u00edt n\u011bco podobn\u00e9ho.<\/p>\n<p><\/p>\n<h3 id=\"operations-as-code\">Operations as code<\/h3>\n<p><\/p>\n<blockquote><p>\u201eZaskriptujeme a hotovo\u201c.<\/p>\n<p>- in\u017een\u00fdr t\u0159i roky p\u0159edt\u00edm, ne\u017e vynalezl kolo Terraform.<\/p><\/blockquote>\n<p>Kdy\u017e se mluv\u00ed o v\u00fdvoji softwaru, tak Go nebo program v Jav\u011b nen\u00ed prost\u011b jen k\u00f3d.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"P\u0159e\u0161el jsem z Terraformu na CloudFormation \u2013 a litoval jsem.\" src=\"\/wp-content\/uploads\/2019\/11\/a5c61fd318b9b5aa62ebb69e38ca1b0e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Code as Code<\/em><\/p>\n<p><\/p>\n<p>V\u017edy\u0165 tu je i infrastruktura, na kter\u00e9 to b\u011b\u017e\u00ed.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"P\u0159e\u0161el jsem z Terraformu na CloudFormation \u2013 a litoval jsem.\" src=\"\/wp-content\/uploads\/2019\/11\/301c0323baa18563f05503e701af069b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Infrastruktura jako k\u00f3d<\/em><\/p>\n<p><\/p>\n<p>Ale odkud se tam vzala? Jak ji monitorovat? Kde \u017eije v\u00e1\u0161 k\u00f3d? Pot\u0159ebuj\u00ed v\u00fdvoj\u00e1\u0159i povolen\u00ed k p\u0159\u00edstupu?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"P\u0159e\u0161el jsem z Terraformu na CloudFormation \u2013 a litoval jsem.\" src=\"\/wp-content\/uploads\/2019\/11\/5cb0b6f720682b7bb6d5f485287b618b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Operations as Code<\/em><\/p>\n<p><\/p>\n<blockquote><p>B\u00fdt v\u00fdvoj\u00e1\u0159em softwaru nen\u00ed jen o psan\u00ed k\u00f3du.<\/p><\/blockquote>\n<p>Nejen AWS: ur\u010dit\u011b vyu\u017e\u00edv\u00e1te slu\u017eby i dal\u0161\u00edch poskytovatel\u016f. SignalFx, PagerDuty nebo Github. Mo\u017en\u00e1 m\u00e1te intern\u00ed server Jenkins pro CI\/CD nebo intern\u00ed \u0159\u00eddic\u00ed panel Grafana pro monitoring. Infra as Code je vyb\u00edr\u00e1no z r\u016fzn\u00fdch d\u016fvod\u016f, a ka\u017ed\u00fd z nich je stejn\u011b d\u016fle\u017eit\u00fd pro v\u0161e, co se t\u00fdk\u00e1 softwaru.<\/p>\n<p><\/p>\n<p>Kdy\u017e jsem pracoval v Twitchi, zrychlovali jsme slu\u017eby uvnit\u0159 sm\u00ed\u0161en\u00fdch zabudovan\u00fdch syst\u00e9m\u016f a syst\u00e9m\u016f AWS Amazon. Vyr\u00e1b\u011bli jsme a udr\u017eovali spoustu mikroslu\u017eeb, \u010d\u00edm\u017e jsme zvy\u0161ovali provozn\u00ed n\u00e1klady. Diskuze prob\u00edhaly p\u0159ibli\u017en\u011b v tomto duchu:<\/p>\n<p><\/p>\n<ul>\n<li><strong>J\u00e1<\/strong>: Sakra, je to docela dost d\u0159iny na start jedn\u00e9 mikroslu\u017eby. Tohle budu muset pou\u017e\u00edt k zalo\u017een\u00ed \u00fa\u010dtu AWS (\u0161ly jsme k 2 \u00fa\u010dt\u016fm na <strong>mikroslu\u017ebu<\/strong>), potom tento \u2014 na nastaven\u00ed upozorn\u011bn\u00ed, je\u0161t\u011b tento \u2014 pro repozit\u00e1\u0159 k\u00f3du, a tento \u2014 pro seznam emailov\u00fdch adres, no a tenhle\u2026<\/li>\n<li><strong>Lead<\/strong>: Naps\u00e1me skript a hotovo.<\/li>\n<li><strong>J\u00e1<\/strong>: Dob\u0159e, ale samotn\u00fd skript se zm\u011bn\u00ed. Bude pot\u0159eba naj\u00edt zp\u016fsob, jak ov\u011b\u0159it, \u017ee v\u0161echny tyto integrovan\u00e9 kousky od Amazonu maj\u00ed aktu\u00e1ln\u00ed stav.<\/li>\n<li><strong>Lead<\/strong>: Zn\u00ed to dob\u0159e. A pro to nap\u00ed\u0161eme skript.<\/li>\n<li><strong>J\u00e1<\/strong>: Skv\u011ble! A skriptu bude jist\u011b pot\u0159eba je\u0161t\u011b p\u0159edat parametry. P\u0159ijme je?<\/li>\n<li><strong>Lead<\/strong>: Jasn\u011b, \u017ee p\u0159ijme, co by jinak d\u011blal!<\/li>\n<li><strong>J\u00e1<\/strong>: Proces se m\u016f\u017ee zm\u011bnit, dojde ke ztr\u00e1t\u011b zp\u011btn\u00e9 kompatibility. Bude pot\u0159eba n\u011bjak\u00fd semantick\u00fd kontroln\u00ed syst\u00e9m verz\u00ed.<\/li>\n<li><strong>Lead<\/strong>: Skv\u011bl\u00fd n\u00e1pad!<\/li>\n<li><strong>J\u00e1<\/strong>: N\u00e1stroje lze zm\u011bnit ru\u010dn\u011b, uvnit\u0159 u\u017eivatelsk\u00e9ho rozhran\u00ed. Pot\u0159ebujeme zp\u016fsob, jak to kontrolovat a opravovat.<\/li>\n<\/ul>\n<p><\/p>\n<p><em>\u20263 roky pot\u00e9:<\/em><\/p>\n<p><\/p>\n<ul>\n<li><strong>Lead<\/strong>: A vznikl n\u00e1m terraform.<\/li>\n<\/ul>\n<p><\/p>\n<p>Mor\u00e1lka p\u0159\u00edb\u011bhu je takov\u00e1: i kdy\u017e jste <strong>po u\u0161i ve v\u0161ech v\u011bcech od Amazonu<\/strong>, stejn\u011b pou\u017e\u00edv\u00e1te n\u011bco, co nen\u00ed od AWS, a tyto slu\u017eby maj\u00ed stav, kter\u00fd pou\u017e\u00edv\u00e1 jazyk pro konfiguraci, aby tento stav synchronizoval.<\/p>\n<p><\/p>\n<h3 id=\"cloudformation-lambda-vs-git-moduli-terraform\">CloudFormation lambda vs git-moduly terraform<\/h3>\n<p><\/p>\n<p>lambda je \u0159e\u0161en\u00ed CloudFormation pro ot\u00e1zku u\u017eivatelsk\u00e9 logiky. Pomoc\u00ed lambda lze <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSCloudFormation\/latest\/UserGuide\/macros-example.html\">vytv\u00e1\u0159et makra<\/a><\/noindex> nebo <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSCloudFormation\/latest\/UserGuide\/walkthrough-custom-resources-lambda-lookup-amiids.html\">u\u017eivatelsk\u00fd zdroj<\/a><\/noindex>. Takov\u00fd p\u0159\u00edstup p\u0159edstavuje dal\u0161\u00ed slo\u017eitosti, kter\u00e9 se nevyskytuj\u00ed v semantick\u00e9m \u0159\u00edzen\u00ed verz\u00ed modul\u016f git v Terraform. Nejv\u011bt\u0161\u00edm probl\u00e9mem pro m\u011b bylo \u0159\u00edzen\u00ed opr\u00e1vn\u011bn\u00ed pro v\u0161echny tyto u\u017eivatelsk\u00e9 lambdy (a to jsou des\u00edtky \u00fa\u010dt\u016f AWS). Druh\u00fdm nejd\u016fle\u017eit\u011bj\u0161\u00edm probl\u00e9mem byla ot\u00e1zka \u201eco bylo d\u0159\u00edv \u2013 slepice nebo vejce?\u201c: ta se t\u00fdkala k\u00f3du lambdy. Tato funkce sama \u2014 infrastruktura a k\u00f3d \u2014 pot\u0159ebuje sledov\u00e1n\u00ed a aktualizace. Posledn\u00edm h\u0159eb\u00edkem do rakve byla obt\u00ed\u017enost v semantick\u00e9m aktualizaci zm\u011bn k\u00f3du lambdy; nav\u00edc bylo pot\u0159eba zajistit, aby se akce stacku bez p\u0159\u00edm\u00e9ho p\u0159\u00edkazu nem\u011bnily mezi spu\u0161t\u011bn\u00edmi.<\/p>\n<p><\/p>\n<p>Pamatuji si, jak jsem jednou cht\u011bl vytvo\u0159it kan\u00e1rkovou verzi nasazen\u00ed pro prost\u0159ed\u00ed Elastic Beanstalk s tradi\u010dn\u00edm load balancerem. Nejjednodu\u0161\u0161\u00ed by bylo prov\u00e9st druh\u00e9 nasazen\u00ed EB vedle produk\u010dn\u00edho prost\u0159ed\u00ed a ud\u011blat je\u0161t\u011b krok: zkombinovat automaticky \u0161k\u00e1lovatelnou skupinu kan\u00e1rkov\u00e9ho nasazen\u00ed s LB nasazen\u00edm do produk\u010dn\u00edho prost\u0159ed\u00ed. A proto\u017ee Terraform pou\u017e\u00edv\u00e1 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/docs\/providers\/aws\/r\/elastic_beanstalk_environment.html#autoscaling_groups\">ASG beantalk jako v\u00fdstup<\/a><\/noindex>, to bude vy\u017eadovat 4 nav\u00edc \u0159\u00e1dky k\u00f3du v Terraformu. Kdy\u017e jsem se ptal, zda neexistuje srovnateln\u00e9 \u0159e\u0161en\u00ed v CloudFormation, uk\u00e1zali mi celou repozit\u00e1\u0159 v gitu s kontejnerem pro nasazen\u00ed a dal\u0161\u00edmi: a to v\u0161e \u2014 pro n\u011bco, co bychom mohli ud\u011blat se \u0161\u0165astn\u00fdmi 4 \u0159\u00e1dky k\u00f3du v Terraformu.<\/p>\n<p><\/p>\n<h3 id=\"on-luchshe-obnaruzhivaet-dreyf\">Lep\u0161\u00ed detekce odchylky<\/h3>\n<p><\/p>\n<blockquote><p>Ujist\u011bte se, \u017ee realita odpov\u00edd\u00e1 o\u010dek\u00e1v\u00e1n\u00edm.<\/p><\/blockquote>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/blogs\/aws\/new-cloudformation-drift-detection\/\">Detekce odchylky<\/a><\/noindex> \u2014 velmi v\u00fdkonn\u00e1 funkce operations as code, proto\u017ee pom\u00e1h\u00e1 zajistit, \u017ee realita odpov\u00edd\u00e1 o\u010dek\u00e1v\u00e1n\u00edm. Je dostupn\u00e1 jak v CloudFormation, tak v Terraformu. Ale s rostouc\u00ed velikost\u00ed pracovn\u00edho stacku byla detekce odchylky v CloudFormation st\u00e1le v\u00edce chybn\u00fdch detekc\u00ed.<\/p>\n<p><\/p>\n<p>S Terraformem m\u00e1te mnohem pokro\u010dilej\u0161\u00ed hooky \u017eivotn\u00edho cyklu pro detekci odchylky. Nap\u0159\u00edklad zad\u00e1te p\u0159\u00edkaz <noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/docs\/configuration\/resources.html#ignore_changes\">ignore_changes<\/a><\/noindex> p\u0159\u00edmo v definici \u00falohy ECS, pokud chcete ignorovat zm\u011bny v definici konkr\u00e9tn\u00ed \u00falohy, ani\u017e byste p\u0159itom ignorovali zm\u011bny ve v\u0161ech nasazen\u00edch ECS.<\/p>\n<p><\/p>\n<h2 id=\"cdk-i-buduschee-cloudformation\">CDK a budoucnost CloudFormation<\/h2>\n<p><\/p>\n<p>CloudFormation se t\u011b\u017eko spravuje ve velk\u00fdch, meziinfrastrukturn\u00edch m\u011b\u0159\u00edtk\u00e1ch. Mnoh\u00e9 z t\u011bchto obt\u00ed\u017e\u00ed byly uzn\u00e1ny a n\u00e1stroji chyb\u00ed takov\u00e9 v\u011bci jako <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/en_pv\/cdk\/latest\/guide\/home.html\">aws-cdk<\/a><\/noindex>, struktura pro definici cloudov\u00e9 infrastruktury v k\u00f3du a jej\u00ed proveden\u00ed prost\u0159ednictv\u00edm AWS CloudFormation. Bude zaj\u00edmav\u00e9 vid\u011bt, co \u010dek\u00e1 aws-cdk v budoucnu, ale t\u011b\u017eko konkurovat jin\u00fdm v\u00fdhod\u00e1m Terraformu; k pos\u00edlen\u00ed CloudFormation budou zapot\u0159eb\u00ed glob\u00e1ln\u00ed zm\u011bny.<\/p>\n<p><\/p>\n<h3 id=\"chtoby-terraform-ne-razocharoval\">Aby Terraform nezklamal<\/h3>\n<p><\/p>\n<blockquote><p>To je p\u0159ece \u201einfrastruktura jako K\u00d3D\u201c, ne \u201ejako text\u201c.<\/p><\/blockquote>\n<p>Prvn\u00ed dojem z Terraformu na m\u011b ud\u011blal dost \u0161patn\u00fd. Mysl\u00edm, \u017ee jsem jednodu\u0161e nepochopil p\u0159\u00edstup. Prakticky v\u0161ichni in\u017een\u00fd\u0159i ho na poprv\u00e9 nev\u011bdomky vn\u00edmaj\u00ed jako textov\u00fd form\u00e1t, kter\u00fd je t\u0159eba p\u0159etvo\u0159it na po\u017eadovanou infrastrukturu. NED\u011aLEJTE TO TAK.<\/p>\n<p><\/p>\n<h3 id=\"propisnye-istiny-horoshey-razrabotki-po-otnosyatsya-i-k-terraform\">Z\u00e1kladn\u00ed principy dobr\u00e9ho softwarov\u00e9ho v\u00fdvoje plat\u00ed i pro Terraform<\/h3>\n<p><\/p>\n<p>Vid\u011bl jsem, jak mnoho praktik, kter\u00e9 se pou\u017e\u00edvaj\u00ed pro vytv\u00e1\u0159en\u00ed dobr\u00e9ho k\u00f3du, je ignorov\u00e1no v Terraformu. U\u010dili jste se roky, abyste se stali dobr\u00fdm program\u00e1torem. Nez\u0159ekn\u011bte se t\u00e9to zku\u0161enosti jen proto, \u017ee pracujete s Terraformem. Z\u00e1kladn\u00ed pravdy dobr\u00e9ho v\u00fdvoje softwaru se vztahuj\u00ed i na Terraform.<\/p>\n<p><\/p>\n<h3 id=\"kak-uzh-kod-i-ne-zadokumentirovat\">Jak m\u016f\u017eete napsat k\u00f3d a nedokumentovat ho?<\/h3>\n<p><\/p>\n<p>Setkal jsem se s obrovsk\u00fdmi stacky Terraformu bez jak\u00e9koli dokumentace. Jak lze ps\u00e1t k\u00f3d po str\u00e1nk\u00e1ch \u2014 \u00fapln\u011b bez dokumentace? P\u0159id\u00e1vejte dokumentaci, kter\u00e1 vysv\u011btluje v\u00e1\u0161 <strong>k\u00f3d<\/strong> Terraform (d\u016fraz zde na slovo \u201ek\u00f3d\u201c), pro\u010d je tato \u010d\u00e1st tak d\u016fle\u017eit\u00e1, a co d\u011bl\u00e1te.<\/p>\n<p><\/p>\n<h3 id=\"kak-mozhno-razvorachivat-servisy-kotorye-nekogda-byli-odnoy-bolshoy-funkciey-main\">Jak lze nasazovat slu\u017eby, kter\u00e9 byly kdysi jednou velkou funkc\u00ed main()?<\/h3>\n<p><\/p>\n<p>Setkal jsem se s velmi slo\u017eit\u00fdmi stacky Terraformu, prezentovan\u00fdmi jako jedin\u00fd modul. Pro\u010d takto nen nasazujeme software? Pro\u010d rozd\u011blujeme velk\u00e9 funkce na men\u0161\u00ed? Ty sam\u00e9 odpov\u011bdi plat\u00ed i pro Terraform. Pokud je v\u00e1\u0161 modul p\u0159\u00edli\u0161 velk\u00fd \u2014 je t\u0159eba ho rozd\u011blit na men\u0161\u00ed moduly.<\/p>\n<p><\/p>\n<h3 id=\"razve-vasha-kompaniya-ne-polzuetsya-bibliotekami\">Nepou\u017e\u00edv\u00e1 va\u0161e spole\u010dnost knihovny?<\/h3>\n<p><\/p>\n<p>Vid\u011bl jsem, jak in\u017een\u00fd\u0159i, kdy\u017e rozj\u00ed\u017ed\u011bli nov\u00fd projekt pomoc\u00ed Terraform, prost\u011b kop\u00edrovali a vkl\u00e1dali obrovsk\u00e9 kusy z jin\u00fdch projekt\u016f do sv\u00fdch vlastn\u00edch a pak je upravovali, dokud to neza\u010dalo fungovat. U v\u00e1s ve firm\u011b byste takhle pracovali s \u201eproduk\u010dn\u00edm\u201c k\u00f3dem? Tak\u00e9 p\u0159ece nepou\u017e\u00edv\u00e1me knihovny jen tak. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=PAAkCSZUG1c&amp;t=9m28s\">ne v\u0161echno by m\u011blo b\u00fdt knihovnou,<\/a><\/noindex> ale kam bychom se bez spole\u010dn\u00fdch knihoven dostali?!<\/p>\n<p><\/p>\n<h3 id=\"razve-vy-ne-polzuetes-pep8-ili-gofmt\">Nepou\u017e\u00edv\u00e1te PEP8 nebo gofmt?<\/h3>\n<p><\/p>\n<p>Ve v\u011bt\u0161in\u011b jazyk\u016f existuje standardn\u00ed akceptovan\u00fd form\u00e1tovac\u00ed sch\u00e9ma. V Pythonu je to PEP8. V Go \u2014 gofmt. Terraform m\u00e1 sv\u016fj: <code>terraform fmt<\/code>. Pou\u017e\u00edvejte ho s radost\u00ed! <\/p>\n<p><\/p>\n<h3 id=\"vy-stanete-polzovatsya-react-ne-znaya-javascript\">Budete pou\u017e\u00edvat React, ani\u017e byste znali JavaScript?<\/h3>\n<p><\/p>\n<p>Moduly Terraformu mohou zjednodu\u0161it \u010d\u00e1st va\u0161\u00ed slo\u017eit\u00e9 infrastruktury, ale to neznamen\u00e1, \u017ee v tom nemus\u00edte m\u00edt v\u016fbec \u017e\u00e1dn\u00e9 znalosti. Chcete spr\u00e1vn\u011b pou\u017e\u00edvat Terraform bez porozum\u011bn\u00ed zdroj\u016fm? Jste odsuzov\u00e1ni k ne\u00fasp\u011bchu: \u010das ub\u011bhne a vy se Terraform stejn\u011b nenau\u010d\u00edte.<\/p>\n<p><\/p>\n<h3 id=\"vy-kodite-singltonami-ili-vnedryaya-zavisimosti\">K\u00f3dujete singletony, nebo vkl\u00e1d\u00e1n\u00edm z\u00e1vislost\u00ed?<\/h3>\n<p><\/p>\n<p>Zavislosti jsou uzn\u00e1vanou nejlep\u0161\u00ed prax\u00ed pro v\u00fdvoj softwaru, kterou preferuj\u00ed singletony. Jak to pom\u016f\u017ee v Terraformu? Setkal jsem se s moduly Terraform, kter\u00e9 z\u00e1vis\u00ed na vzd\u00e1len\u00e9m stavu. M\u00edsto toho, abyste psali moduly, kter\u00e9 extrahuj\u00ed ze vzd\u00e1len\u00e9ho stavu, napi\u0161te modul, kter\u00fd p\u0159ij\u00edm\u00e1 parametry. A pot\u00e9 tyto parametry p\u0159ed\u00e1vejte do modulu.<\/p>\n<p><\/p>\n<h3 id=\"vashi-biblioteki-delayut-desyat-veschey-horosho-ili-odnu---otlichno\">Va\u0161e knihovny d\u011blaj\u00ed deset v\u011bc\u00ed dob\u0159e nebo jednu \u2013 skv\u011ble?<\/h3>\n<p><\/p>\n<p>Nejl\u00e9pe funguj\u00ed knihovny, kter\u00e9 se soust\u0159ed\u00ed na jeden \u00fakol, kter\u00fd vykon\u00e1vaj\u00ed na v\u00fdbornou. M\u00edsto psan\u00ed velk\u00fdch modul\u016f Terraform, kter\u00e9 se sna\u017e\u00ed d\u011blat v\u0161echno najednou, skl\u00e1dajte je do \u010d\u00e1st\u00ed, kter\u00e9 d\u011blaj\u00ed n\u011bco jednoho dob\u0159e. A pot\u00e9 je kombinujte tak, jak je pot\u0159eba.<\/p>\n<p><\/p>\n<h3 id=\"kak-vy-proizvodite-izmeneniya-v-bibliotekah-bez-obratnoy-sovmestimosti\">Jak prov\u00e1d\u00edte zm\u011bny v knihovn\u00e1ch bez zp\u011btn\u00e9 kompatibility?<\/h3>\n<p><\/p>\n<p>Obecn\u00e9mu modulu Terraform, stejn\u011b jako b\u011b\u017en\u00e9 knihovn\u011b, je t\u0159eba n\u011bjak\u00fdm zp\u016fsobem sd\u011blit u\u017eivatel\u016fm o zm\u011bn\u00e1ch bez zp\u011btn\u00e9 kompatibility. Kdy\u017e doch\u00e1z\u00ed k takov\u00fdmto zm\u011bn\u00e1m v knihovn\u00e1ch, je to frustruj\u00edc\u00ed, a stejn\u011b tak je frustruj\u00edc\u00ed, kdy\u017e se ve modules Terraform prov\u00e1d\u011bj\u00ed zm\u011bny bez zp\u011btn\u00e9 kompatibility. Doporu\u010duje se pou\u017e\u00edvat git tags a semver p\u0159i pou\u017eit\u00ed modul\u016f Terraform.<\/p>\n<p><\/p>\n<h3 id=\"proizvodstvennyy-servis-zapuschen-u-vas-na-noutbuke-ili-v-datacentre\">Je v\u00e1\u0161 produk\u010dn\u00ed slu\u017eba spu\u0161t\u011bna na notebooku nebo v datov\u00e9m centru?<\/h3>\n<p><\/p>\n<p>Hashicorp m\u00e1 n\u00e1stroje jako <noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/docs\/cloud\/index.html\">terraform cloud<\/a><\/noindex> pro spu\u0161t\u011bn\u00ed va\u0161eho terraform. Tyto centralizovan\u00e9 slu\u017eby usnad\u0148uj\u00ed spr\u00e1vu, audit a schvalov\u00e1n\u00ed zm\u011bn terraform.<\/p>\n<p><\/p>\n<h3 id=\"razve-vy-ne-pishete-testy\">Nep\u00ed\u0161ete snad testy?<\/h3>\n<p><\/p>\n<p>In\u017een\u00fd\u0159i uzn\u00e1vaj\u00ed, \u017ee k\u00f3d je pot\u0159eba testovat, ale \u010dasto na kontroly ka\u0161lou, kdy\u017e pracuj\u00ed s Terraform. Pro infrastrukturu to p\u0159in\u00e1\u0161\u00ed zr\u00e1dn\u00e9 momenty. Doporu\u010duji \u201etestovat\u201c nebo \u201evytv\u00e1\u0159et p\u0159\u00edklady\u201c stack\u016f pomoc\u00ed modul\u016f, kter\u00e9 lze spr\u00e1vn\u011b nasadit pro ov\u011b\u0159en\u00ed b\u011bhem CI\/CD.<\/p>\n<p><\/p>\n<h3 id=\"terraform-i-mikroservisy\">Terraform a mikroservisy<\/h3>\n<p><\/p>\n<blockquote><p>\u017divot a smrt firem s mikroservisn\u00edm p\u0159\u00edstupem z\u00e1vis\u00ed na rychlosti, aktualizaci a destrukci nov\u00fdch pracovn\u00edch stack\u016f mikroservis\u016f.<\/p><\/blockquote>\n<p>Nejroz\u0161\u00ed\u0159en\u011bj\u0161\u00edm negativn\u00edm aspektem spojen\u00fdm s mikroservisn\u00edmi architekturami, od kter\u00e9ho se nelze zbavit, je pr\u00e1ce, nikoli k\u00f3d. Pokud vn\u00edm\u00e1te Terraform pouze jako zp\u016fsob automatizace pouze infrastrukturn\u00ed str\u00e1nky mikroservisn\u00ed architektury, p\u0159ipravujete se o skute\u010dn\u00e9 v\u00fdhody tohoto syst\u00e9mu. Nyn\u00ed u\u017e <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=HcmPi7-IVQo\">v\u0161echno \u2013 jako k\u00f3d<\/a><\/noindex>.<\/p>\n<p>Zdroj: <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.3 - 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\/cs\/blog\/administrirovanie\/pereshel-s-terraform-na-cloudformation-i-pozhalel\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\/cs\/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\udd47P\u0159e\u0161el jsem z Terraformu na CloudFormation \u2014 a litoval jsem | ProHoster","description":"P\u0159edstavov\u00e1n\u00ed infrastruktury jako k\u00f3du ve snadno opakovateln\u00e9m textov\u00e9m form\u00e1tu je nejlep\u0161\u00ed prax\u00ed pro syst\u00e9my, se kter\u00fdmi se nemus\u00edte pot\u00fdkat.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/pereshel-s-terraform-na-cloudformation-i-pozhalel","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/52367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=52367"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/52367\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=52367"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=52367"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=52367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}