{"id":87393,"date":"2020-07-08T01:42:02","date_gmt":"2020-07-07T23:42:02","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/sozdanie-masshtabiruemogo-api-na-spotovyh-instansah-aws"},"modified":"2020-07-08T01:42:02","modified_gmt":"2020-07-07T23:42:02","slug":"sozdanie-masshtabiruemogo-api-na-spotovyh-instansah-aws","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/sozdanie-masshtabiruemogo-api-na-spotovyh-instansah-aws","title":{"rendered":"Vytvorenie \u0161k\u00e1lovate\u013en\u00e9ho API na spotov\u00fdch in\u0161tanciach AWS","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ahojte! Vol\u00e1m sa Kirill, som CTO v Adapty. V\u00e4\u010d\u0161ina na\u0161ej architekt\u00fary je na AWS a dnes v\u00e1m uk\u00e1\u017eem, ako sme zn\u00ed\u017eili n\u00e1klady na servery trikr\u00e1t v\u010faka vyu\u017e\u00edvaniu spotov\u00fdch in\u0161tanci\u00ed v produk\u010dnom prostred\u00ed a tie\u017e, ako nastavi\u0165 ich automatick\u00e9 \u0161k\u00e1lovanie. Najprv bude preh\u013ead toho, ako to funguje, a potom podrobn\u00fd n\u00e1vod na spustenie.<\/p>\n<p><\/p>\n<h2 id=\"chto-takoe-spotovye-instansy\">\u010co s\u00fa to spotov\u00e9 in\u0161tancie?<\/h2>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/ec2\/spot\/\">Spotov\u00e9<\/a><\/noindex> in\u0161tancie s\u00fa servery in\u00fdch pou\u017e\u00edvate\u013eov AWS, ktor\u00e9 pr\u00e1ve teraz nevyu\u017e\u00edvaj\u00fa, a pred\u00e1vaj\u00fa ich s ve\u013ekou z\u013eavou (Amazon p\u00ed\u0161e a\u017e 90 %, z na\u0161ich sk\u00fasenost\u00ed ~3x, variantn\u00e9 v z\u00e1vislosti od regi\u00f3nu, AZ a typu in\u0161tancie). Ich hlavn\u00fd rozdiel od be\u017en\u00fdch je, \u017ee sa m\u00f4\u017eu kedyko\u013evek vypn\u00fa\u0165. Preto sme dlho pova\u017eovali, \u017ee ich je v poriadku pou\u017e\u00edva\u0165 pre v\u00fdvojov\u00e9 prostredia alebo pre \u00falohy na v\u00fdpo\u010det nie\u010doho, pri\u010dom sa medzi\u010dasom ulo\u017eia v\u00fdsledky na S3 alebo do datab\u00e1ze, ale nie pre produkciu. Existuj\u00fa extern\u00e9 rie\u0161enia, ktor\u00e9 umo\u017e\u0148uj\u00fa pou\u017e\u00edva\u0165 spoty v produkcii, ale pre n\u00e1\u0161 pr\u00edpad je tam ve\u013ea obmedzen\u00ed, a preto sme ich nezaviedli. Pr\u00edstup op\u00edsan\u00fd v \u010dl\u00e1nku funguje \u00faplne v r\u00e1mci \u0161tandardn\u00fdch funkci\u00ed AWS, bez dodato\u010dn\u00fdch skriptov, cronov a pod.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>\u010ealej prin\u00e1\u0161am nieko\u013eko sn\u00edmok obrazovky, ktor\u00e9 ukazuj\u00fa hist\u00f3riu cien spotov\u00fdch in\u0161tanci\u00ed.<\/p>\n<p><\/p>\n<p>m5.large v regi\u00f3ne eu-west-1 (\u00cdrsko). Cena je preva\u017ene stabiln\u00e1 po\u010das 3 mesiacov, moment\u00e1lne \u00faspora 2.9x.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvorenie \u0161k\u00e1lovate\u013en\u00e9ho API na spotov\u00fdch in\u0161tanciach AWS\" src=\"\/wp-content\/uploads\/2020\/07\/901a259955c386493557280489f582fe.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>m5.large v regi\u00f3ne us-east-1 (Severn\u00e1 Virginia). Cena sa neust\u00e1le men\u00ed po\u010das 3 mesiacov, moment\u00e1lne \u00faspora od 2.3x do 2.8x v z\u00e1vislosti od dostupnostnej z\u00f3ny.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvorenie \u0161k\u00e1lovate\u013en\u00e9ho API na spotov\u00fdch in\u0161tanciach AWS\" src=\"\/wp-content\/uploads\/2020\/07\/49c89430f03b2c7025355562d2873b6b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>t3.small v regi\u00f3ne us-east-1 (Severn\u00e1 Virginia). Cena je stabiln\u00e1 po\u010das 3 mesiacov, moment\u00e1lne \u00faspora 3.4x.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvorenie \u0161k\u00e1lovate\u013en\u00e9ho API na spotov\u00fdch in\u0161tanciach AWS\" src=\"\/wp-content\/uploads\/2020\/07\/2e139dcc6d44bd37caf9d75eb6ec4835.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"arhitektura-servisa\">Architekt\u00fara slu\u017eby<\/h2>\n<p><\/p>\n<p>Z\u00e1kladn\u00e1 architekt\u00fara slu\u017eby, o ktorej budeme hovori\u0165 v r\u00e1mci tohto \u010dl\u00e1nku, je zn\u00e1zornen\u00e1 na diagrame ni\u017e\u0161ie.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvorenie \u0161k\u00e1lovate\u013en\u00e9ho API na spotov\u00fdch in\u0161tanciach AWS\" src=\"\/wp-content\/uploads\/2020\/07\/d89bd595675400861360670adaacaf03.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"application-load-balancer--ec2-target-group--elastic-container-service\">Application Load Balancer \u2192 EC2 Target Group \u2192 Elastic Container Service<\/h3>\n<p><\/p>\n<p>Ako vyrovn\u00e1va\u010d za\u0165a\u017eenia sa pou\u017e\u00edva Application Load Balancer (ALB), ktor\u00fd odosiela po\u017eiadavky do EC2 Target Group (TG). TG je zodpovedn\u00e1 za to, aby otvorila porty na in\u0161tanci\u00e1ch pre ALB a spojila ich s portami kontajnerov Elastic Container Service (ECS). ECS je ekvivalent Kubernetes v AWS, ktor\u00fd sa zaober\u00e1 spr\u00e1vou Docker kontajnerov.<\/p>\n<p><\/p>\n<p>Na jednom in\u0161tanci m\u00f4\u017ee by\u0165 nieko\u013eko be\u017eiacich kontajnerov s rovnak\u00fdmi portami, preto ich nem\u00f4\u017eeme nastavi\u0165 pevne. ECS informuje TG, \u017ee sp\u00fa\u0161\u0165a nov\u00fa \u00falohu (v terminol\u00f3gii Kubernetes sa to naz\u00fdva pod), vykon\u00e1va kontrolu vo\u013en\u00fdch portov na in\u0161tancii a prirad\u00ed jeden z nich k sp\u00fa\u0161\u0165anej \u00falohe. TG tie\u017e pravidelne kontroluje, \u010di je in\u0161tancia a API na nej funk\u010dn\u00e9 pomocou health checku, a ak vid\u00ed nejak\u00e9 probl\u00e9my, prestane tam odosiela\u0165 po\u017eiadavky.<\/p>\n<p><\/p>\n<h3 id=\"ec2-auto-scaling-groups--ecs-capacity-providers\">EC2 Auto Scaling Groups + ECS Capacity Providers<\/h3>\n<p><\/p>\n<p>Na uvedenej diagramu nie je zobrazen\u00e1 slu\u017eba EC2 Auto Scaling Groups (ASG). Z n\u00e1zvu je jasn\u00e9, \u017ee zodpoved\u00e1 za \u0161k\u00e1lovanie in\u0161tanci\u00ed. Av\u0161ak do ned\u00e1vna v AWS neexistovala vstavan\u00e1 mo\u017enos\u0165 spravova\u0165 po\u010det spusten\u00fdch strojov z ECS. ECS umo\u017e\u0148oval \u0161k\u00e1lova\u0165 po\u010det \u00faloh, napr\u00edklad na z\u00e1klade vyu\u017eitia CPU, RAM alebo po\u010dtu po\u017eiadaviek. Ak v\u0161ak \u00falohy vy\u010derpali v\u0161etky vo\u013en\u00e9 in\u0161tancie, nov\u00e9 stroje sa automaticky nezvy\u0161ovali.<\/p>\n<p><\/p>\n<p>To sa zmenilo s pr\u00edchodom ECS Capacity Providers (ECS CP). Teraz je mo\u017en\u00e9 ka\u017ed\u00fa slu\u017ebu v ECS prepoji\u0165 s ASG, a ak sa \u00falohy nezmestia na be\u017eiacich in\u0161tanci\u00e1ch, nov\u00e9 sa spustia (ale v r\u00e1mci nastaven\u00fdch limitov ASG). To funguje aj naopak, ak ECS CP vid\u00ed ne\u010dinn\u00e9 in\u0161tancie bez \u00faloh, po\u0161le ASG pr\u00edkaz, aby ich vypnula. ECS CP m\u00e1 mo\u017enos\u0165 ur\u010di\u0165 cie\u013eov\u00e9 percento za\u0165a\u017eenia in\u0161tanci\u00ed, aby ur\u010dit\u00e9 mno\u017estvo strojov bolo v\u017edy vo\u013en\u00e9 na r\u00fdchle \u0161k\u00e1lovanie \u00faloh, o tom poviem viac nesk\u00f4r.<\/p>\n<p><\/p>\n<h3 id=\"ec2-launch-templates\">EC2 Launch Templates<\/h3>\n<p><\/p>\n<p>Posledn\u00e1 slu\u017eba, o ktorej poviem, predt\u00fdm ako prejdeme k podrobn\u00e9mu popisu vytvorenia tejto infra\u0161trukt\u00fary, s\u00fa EC2 Launch Templates. Umo\u017e\u0148uje vytvori\u0165 \u0161abl\u00f3nu, na z\u00e1klade ktorej sa bud\u00fa sp\u00fa\u0161\u0165a\u0165 v\u0161etky stroje, aby ste to nemuseli opakova\u0165 zaka\u017ed\u00fdm od nuly. Tu si m\u00f4\u017eete vybra\u0165 typ sp\u00fa\u0161\u0165anej ma\u0161iny, skupinu zabezpe\u010denia, obraz disku a mnoho in\u00fdch parametrov. M\u00f4\u017eete tie\u017e zada\u0165 pou\u017e\u00edvate\u013esk\u00e9 \u00fadaje, ktor\u00e9 bud\u00fa nahran\u00e9 na v\u0161etky sp\u00fa\u0161\u0165an\u00e9 in\u0161tancie. V pou\u017e\u00edvate\u013esk\u00fdch \u00fadajoch m\u00f4\u017eete sp\u00fa\u0161\u0165a\u0165 skripty, napr\u00edklad m\u00f4\u017eete upravi\u0165 obsah s\u00faboru <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/ecs-agent-config.html\">konfigur\u00e1cie ECS agenta<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Jedn\u00fdm z najd\u00f4le\u017eitej\u0161\u00edch parametrov konfigur\u00e1cie v r\u00e1mci tohto \u010dl\u00e1nku je <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/container-instance-spot.html\">ECS_ENABLE_SPOT_INSTANCE_DRAINING<\/a><\/noindex>=true. Ak je tento parametr povolen\u00fd, ke\u010f ECS dostane sign\u00e1l o tom, \u017ee sa bere spottov\u00fd in\u0161tanc, prev\u00e1dza v\u0161etky \u00falohy, ktor\u00e9 na \u0148om be\u017eia, do stavu Draining. \u017diadne nov\u00e9 \u00falohy nebud\u00fa priraden\u00e9 k tomuto in\u0161tancu, ak s\u00fa tu \u00falohy, ktor\u00e9 sa pr\u00e1ve chc\u00fa spusti\u0165, bud\u00fa zru\u0161en\u00e9. \u017diadosti z vyrovn\u00e1vacieho zariadenia tie\u017e prestan\u00fa prich\u00e1dza\u0165. Ozn\u00e1menie o odstr\u00e1nen\u00ed in\u0161tancu prich\u00e1dza 2 min\u00faty pred skuto\u010dn\u00fdm udalos\u0165ou. Preto, ak v\u00e1\u0161 servis nevykon\u00e1va \u00falohy dlh\u0161ie ako 2 min\u00faty a ni\u010d na disk neuklad\u00e1, m\u00f4\u017eete pou\u017e\u00edva\u0165 spottov\u00e9 in\u0161tancie bez straty d\u00e1t.<\/p>\n<p><\/p>\n<p>\u010co sa t\u00fdka disku \u2014 AWS ned\u00e1vno <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/about-aws\/whats-new\/2020\/04\/amazon-ecs-aws-fargate-support-amazon-efs-filesystems-generally-available\/#:~:text=To%20use%20EFS%20with%20ECS,or%20TLS%20encryption%20in%20transit.\">zrealizoval<\/a><\/noindex> mo\u017enos\u0165 pou\u017ei\u0165 Elastic File System (EFS) spolu s ECS, s touto sch\u00e9mou ani disk nie je prek\u00e1\u017ekou, ale to sme nesk\u00fa\u0161ali, preto\u017ee v z\u00e1sade disk nepotrebujeme na uchov\u00e1vanie stavu. Po predvolenom nastaven\u00ed po prijat\u00ed SIGINT (odoslan\u00e9 v momente prevodu \u00falohy do stavu Draining) bud\u00fa v\u0161etky prebiehaj\u00face \u00falohy zastaven\u00e9 za 30 sek\u00fand, aj ke\u010f sa nestihli dokon\u010di\u0165, tento \u010das je mo\u017en\u00e9 zmeni\u0165 pomocou parametra <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/ecs-agent-config.html\">ECS_CONTAINER_STOP_TIMEOUT<\/a><\/noindex>. Hlavn\u00e9 je, aby to nebolo nastaven\u00e9 na viac ako 2 min\u00faty pre spottov\u00e9 stroje.<\/p>\n<p><\/p>\n<h2 id=\"sozdanie-servisa\">Vytvorenie slu\u017eby<\/h2>\n<p><\/p>\n<p>Prenikneme priamo k vytvoreniu pop\u00edsanej slu\u017eby. Po\u010das procesu op\u00ed\u0161em nieko\u013eko u\u017eito\u010dn\u00fdch bodov, ktor\u00e9 neboli spomenut\u00e9 vy\u0161\u0161ie. V\u0161eobecne ide o krok za krokom n\u00e1vod, ale niektor\u00e9 ve\u013emi z\u00e1kladn\u00e9 alebo naopak ve\u013emi \u0161pecifick\u00e9 pr\u00edpady nebudem zva\u017eova\u0165. V\u0161etky \u010dinnosti sa vykon\u00e1vaj\u00fa vo vizu\u00e1lnej konzole AWS, ale je mo\u017en\u00e9 ich reprodukova\u0165 programovo pomocou CloudFormation alebo Terraform. V Adapty pou\u017e\u00edvame Terraform.<\/p>\n<p><\/p>\n<h3 id=\"ec2-launch-template\"><strong>\u0160abl\u00f3na spustenia EC2<\/strong><\/h3>\n<p><\/p>\n<p>V tejto slu\u017ebe sa vytv\u00e1ra konfigur\u00e1cia strojov, ktor\u00e9 bud\u00fa pou\u017e\u00edvan\u00e9. Spr\u00e1va \u0161abl\u00f3n sa deje v sekcii EC2 -&gt; Instances -&gt; Launch templates.<\/p>\n<p><\/p>\n<p><strong>Obraz strojov Amazon (AMI)<\/strong> \u2014 uv\u00e1dzame obraz disku, s ktor\u00fdm bud\u00fa sp\u00fa\u0161\u0165an\u00e9 v\u0161etky in\u0161tancie. Pre ECS vo v\u00e4\u010d\u0161ine pr\u00edpadov je d\u00f4le\u017eit\u00e9 pou\u017ei\u0165 optimalizovan\u00fd obraz od Amazonu. Pravidelne sa aktualizuje a obsahuje v\u0161etko potrebn\u00e9 na pr\u00e1cu s ECS. Ak chcete zisti\u0165 aktu\u00e1lne ID obrazu, nav\u0161t\u00edvte str\u00e1nku <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/ecs-optimized_AMI.html\">Amazon ECS-optimized AMIs<\/a><\/noindex>, vyberte pou\u017e\u00edvan\u00fd regi\u00f3n a skop\u00edrujte AMI ID pre\u0148. Napr\u00edklad, pre regi\u00f3n us-east-1 je aktu\u00e1lne v \u010dase p\u00edsania \u010dl\u00e1nku ID \u2014 <em>ami-00c7c1cf5bdc913ed<\/em>. Toto ID je potrebn\u00e9 vlo\u017ei\u0165 do bodu Ur\u010dte vlastn\u00fa hodnotu.<\/p>\n<p><\/p>\n<p><strong>Typ in\u0161tancie<\/strong> \u2014 vyberte typ in\u0161tancie. Zvo\u013ete ten, ktor\u00fd najlep\u0161ie vyhovuje va\u0161im potreb\u00e1m.<\/p>\n<p><\/p>\n<p><strong>K\u013e\u00fa\u010dov\u00fd p\u00e1r (prihl\u00e1senie)<\/strong> \u2014 zadajte certifik\u00e1t, pomocou ktor\u00e9ho sa m\u00f4\u017eete pripoji\u0165 k in\u0161tancii cez SSH, ak je to potrebn\u00e9.<\/p>\n<p><\/p>\n<p><strong>Nastavenia siete<\/strong> \u2014 zadajte parametre siete. <strong>Sie\u0165ov\u00e1 platforma<\/strong> vo v\u00e4\u010d\u0161ine pr\u00edpadov by mala by\u0165 Virtual Private Cloud (VPC). <strong>Bezpe\u010dnostn\u00e9 skupiny<\/strong> \u2014 bezpe\u010dnostn\u00e9 skupiny pre va\u0161e in\u0161tancie. Ke\u010f\u017ee budeme pou\u017e\u00edva\u0165 vyva\u017eova\u010d za\u0165a\u017eenia pred in\u0161tanciami, odpor\u00fa\u010dam uvies\u0165 sem skupinu, ktor\u00e1 povo\u013euje prich\u00e1dzaj\u00face pripojenia len z vyva\u017eova\u010da. To znamen\u00e1, \u017ee budete ma\u0165 2 bezpe\u010dnostn\u00e9 skupiny, jedna pre vyva\u017eova\u010d, ktor\u00e1 povo\u013euje prich\u00e1dzaj\u00face (inbound) pripojenia zo v\u0161etk\u00fdch adresov na portoch 80 (http) a 443 (https), a druh\u00e1 pre stroje, ktor\u00e1 povo\u013euje prich\u00e1dzaj\u00face pripojenia na ak\u00e9ko\u013evek porty zo skupiny vyva\u017eova\u010da. Odch\u00e1dzaj\u00face (outbound) pripojenia v oboch skupin\u00e1ch je potrebn\u00e9 otvori\u0165 cez TCP protokol na v\u0161etky porty pre v\u0161etky adresy. M\u00f4\u017eete obmedzi\u0165 porty a adresy pre odch\u00e1dzaj\u00face pripojenia, ale potom mus\u00edte neust\u00e1le monitorova\u0165, \u017ee sa pok\u00fa\u0161ate pripoji\u0165 niekde na uzavret\u00fd port.<\/p>\n<p><\/p>\n<p><strong>\u00dalo\u017eisko (zv\u00e4zky)<\/strong> \u2014 zadajte parametre diskov pre stroje. Ve\u013ekos\u0165 disku nem\u00f4\u017ee by\u0165 men\u0161ia ako t\u00e1, ktor\u00e1 je zadan\u00e1 v AMI, pre ECS optimalizovan\u00e9 \u2014 30 GiB.<\/p>\n<p><\/p>\n<p><strong>Pokro\u010dil\u00e9 podrobnosti<\/strong> \u2014 zadajte dodato\u010dn\u00e9 parametre.<\/p>\n<p><\/p>\n<p><strong>Mo\u017enos\u0165 n\u00e1kupu<\/strong> \u2014 chceme kupova\u0165 sporadick\u00e9 in\u0161tancie. Chceme, ale t\u00fato mo\u017enos\u0165 tu neza\u0161krtneme, nastav\u00edme to v Auto Scaling Group, tam je viac mo\u017enost\u00ed.<\/p>\n<p><\/p>\n<p><strong>IAM profil in\u0161tancie<\/strong> \u2014 zadajte \u00falohu, s ktorou sa bud\u00fa in\u0161tancie sp\u00fa\u0161\u0165a\u0165. Aby in\u0161tancie fungovali v ECS, potrebuj\u00fa pr\u00e1va, ktor\u00e9 obvykle patria k \u00falohe <em>ecsInstanceRole<\/em>. V niektor\u00fdch pr\u00edpadoch m\u00f4\u017ee by\u0165 vytvoren\u00e1, ak nie, tak tu <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/instance_IAM_role.html\">pr\u00edru\u010dka<\/a><\/noindex> o tom, ako to urobi\u0165. Po vytvoren\u00ed ju uv\u00e1dzate v \u0161abl\u00f3ne.<br \/>\n\u010ealej nasleduje ve\u013ea parametrov, vo v\u00e4\u010d\u0161ine pr\u00edpadov m\u00f4\u017eete necha\u0165 predvolen\u00e9 hodnoty, ale ka\u017ed\u00fd z nich m\u00e1 zrozumite\u013en\u00fd popis. V\u017edy zap\u00ednam parametre EBS-optimized instance a T2\/T3 Unlimited, ak sa pou\u017e\u00edvaj\u00fa <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSEC2\/latest\/UserGuide\/burstable-performance-instances.html\">burstable<\/a><\/noindex> in\u0161tancie.<\/p>\n<p><\/p>\n<p><strong>\u00dadaje pou\u017e\u00edvate\u013ea<\/strong> \u2014 zadajte pou\u017e\u00edvate\u013esk\u00e9 \u00fadaje. Budeme upravova\u0165 s\u00fabor <code>\/etc\/ecs\/ecs.config<\/code>, v ktorom je konfigur\u00e1cia agenta ECS.<br \/>\nPr\u00edklad toho, ako m\u00f4\u017ee vyzera\u0165 pou\u017e\u00edvate\u013esk\u00fd d\u00e1tum:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">#!\/bin\/bash\necho ECS_CLUSTER=DemoApiClusterProd &gt;&gt; \/etc\/ecs\/ecs.config\necho ECS_ENABLE_SPOT_INSTANCE_DRAINING=true &gt;&gt; \/etc\/ecs\/ecs.config\necho ECS_CONTAINER_STOP_TIMEOUT=1m &gt;&gt; \/etc\/ecs\/ecs.config\necho ECS_ENGINE_AUTH_TYPE=docker &gt;&gt; \/etc\/ecs\/ecs.config\necho &quot;ECS_ENGINE_AUTH_DATA={&quot;registry.gitlab.com&quot;:{&quot;username&quot;:&quot;username&quot;,&quot;password&quot;:&quot;password&quot;}}&quot; &gt;&gt; \/etc\/ecs\/ecs.config<\/code><\/pre>\n<p><\/p>\n<p><code>ECS_CLUSTER=DemoApiClusterProd<\/code> \u2014 parameter specifies that the instance belongs to a cluster with the specified name, meaning this cluster can host its tasks on this server. We haven't created a cluster yet, but we'll use this name when we do.<\/p>\n<p><\/p>\n<p><code>ECS_ENABLE_SPOT_INSTANCE_DRAINING=true<\/code> \u2014 parameter indicates that upon receiving a shutdown signal for a spot instance, all tasks on it should be transitioned to a Draining status.<\/p>\n<p><\/p>\n<p><code>ECS_CONTAINER_STOP_TIMEOUT=1m<\/code> \u2014 parameter indicates that after receiving the SIGINT signal, all tasks have 1 minute before they are terminated.<\/p>\n<p><\/p>\n<p><code>ECS_ENGINE_AUTH_TYPE=docker<\/code> \u2014 parameter specifies that the docker schema is used as the authorization mechanism.<\/p>\n<p><\/p>\n<p><code>ECS_ENGINE_AUTH_DATA=...<\/code> \u2014 connection parameters for a private container registry where your Docker images are stored. If it's public, no parameters need to be specified.<\/p>\n<p><\/p>\n<p>In this article, I will use a public image from Docker Hub, so no parameters need to be specified. <code>ECS_ENGINE_AUTH_TYPE<\/code> a <code>ECS_ENGINE_AUTH_DATA<\/code> are not needed.<\/p>\n<p><\/p>\n<p><strong>Good to know<\/strong>: it is recommended to regularly update the AMI, since new versions update Docker, Linux, ECS agent, etc. To remember this, you can <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/ECS-AMI-SubscribeTopic.html\">set up notifications<\/a><\/noindex> for the release of new versions. You can receive notifications via email and update manually, or you can write a Lambda function that will automatically create a new version of the Launch Template with the updated AMI.<\/p>\n<p><\/p>\n<h3 id=\"ec2-auto-scaling-group\"><strong>EC2 Auto Scaling Group<\/strong><\/h3>\n<p><\/p>\n<p>The Auto Scaling Group is responsible for launching and scaling instances. Management of groups occurs in the EC2 -&gt; Auto Scaling -&gt; Auto Scaling Groups section.<\/p>\n<p><\/p>\n<p><strong>Launch template<\/strong> \u2014 we select the template created in the previous step. We keep the default version.<\/p>\n<p><\/p>\n<p><strong>Purchase options and instance types<\/strong> \u2014 we specify the instance types for the cluster. Adhere to launch template uses the instance type from the Launch Template. Combine purchase options and instance types allows flexible configuration of instance types. We will use it.<\/p>\n<p><\/p>\n<p><strong>Optional On-Demand base<\/strong> \u2014 the number of regular, non-spot instances that will always run.<\/p>\n<p><\/p>\n<p><strong>On-Demand percentage above base<\/strong> \u2014 the percentage ratio of regular and spot instances; 50-50 will distribute evenly, 20-80 means that for each regular instance, 4 spot instances will be launched. In this example, I will specify 50-50, but in reality, we most often do 20-80, and in some cases, 0-100.<\/p>\n<p><\/p>\n<p><strong>Instance types<\/strong> \u2014 tu m\u00f4\u017eete uvies\u0165 \u010fal\u0161ie typy in\u0161tanci\u00ed, ktor\u00e9 sa bud\u00fa pou\u017e\u00edva\u0165 v klastri. Nikdy sme ich nepou\u017e\u00edvali, preto\u017ee tomu ve\u013emi nerozumiem. Mo\u017eno ide o limity pre konkr\u00e9tne typy in\u0161tanci\u00ed, ale tie sa jednoducho zvy\u0161uj\u00fa cez podporu. Ak pozn\u00e1te pou\u017eitie, r\u00e1d si pre\u010d\u00edtam v koment\u00e1roch)<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvorenie \u0161k\u00e1lovate\u013en\u00e9ho API na spotov\u00fdch in\u0161tanciach AWS\" src=\"\/wp-content\/uploads\/2020\/07\/c1ee742d2059674f39a53cac6b9f2347.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Sie\u0165<\/strong> \u2014 nastavenia siete, vyberte VPC a podsiete pre stroje, vo v\u00e4\u010d\u0161ine pr\u00edpadov je vhodn\u00e9 vybra\u0165 v\u0161etky dostupn\u00e9 podsiete.<\/p>\n<p><\/p>\n<p><strong>Vyrovn\u00e1vanie z\u00e1\u0165a\u017ee<\/strong> \u2014 nastavenia vyrovn\u00e1va\u010da za\u0165a\u017eenia, ale to urob\u00edme zvl\u00e1\u0161\u0165, tu ni\u010d nemen\u00edme. <strong>Zdravotn\u00e9 kontroly<\/strong> taktie\u017e bude nastaven\u00e9 nesk\u00f4r.<\/p>\n<p><\/p>\n<p><strong>Ve\u013ekos\u0165 skupiny<\/strong> \u2014 uv\u00e1dzame limity na po\u010det strojov v klastri a po\u017eadovan\u00fd po\u010det strojov pri \u0161tarte. Po\u010det strojov v klastri nikdy nebude men\u0161\u00ed ako minim\u00e1lne uveden\u00fd a v\u00e4\u010d\u0161\u00ed ako maxim\u00e1lny, aj ke\u010f by sa pod\u013ea metrik malo realizova\u0165 \u0161k\u00e1lovanie.<\/p>\n<p><\/p>\n<p><strong>Politiky \u0161k\u00e1lovania<\/strong> \u2014 parametre \u0161k\u00e1lovania, ale budeme \u0161k\u00e1lova\u0165 s oh\u013eadom na spusten\u00e9 ECS \u00falohy, preto nastav\u00edme \u0161k\u00e1lovanie nesk\u00f4r.<\/p>\n<p><\/p>\n<p><strong>Ochrana in\u0161tancie pred zmen\u0161en\u00edm<\/strong> \u2014 ochrana in\u0161tanci\u00ed pred odstr\u00e1nen\u00edm pri zni\u017eovan\u00ed. Zapneme to, aby ASG neodstr\u00e1nil stroj, na ktorom s\u00fa akt\u00edvne \u00falohy. Ochranu mo\u017eno vypn\u00fa\u0165 pre in\u0161tancie, na ktor\u00fdch nie s\u00fa \u00falohy, ECS Capacity Provider.<\/p>\n<p><\/p>\n<p><strong>Prida\u0165 zna\u010dky<\/strong> \u2014 m\u00f4\u017eete uvies\u0165 zna\u010dky pre in\u0161tancie (pre toto mus\u00ed by\u0165 za\u0161krtnut\u00e9 pol\u00ed\u010dko Tag new instances). Odpor\u00fa\u010dam uvies\u0165 zna\u010dku Name, tak v\u0161etky in\u0161tancie, ktor\u00e9 sa sp\u00fa\u0161\u0165aj\u00fa v r\u00e1mci skupiny, bud\u00fa ma\u0165 rovnak\u00e9 n\u00e1zvy, tak\u017ee ich bude pohodln\u00e9 sledova\u0165 v konzole.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvorenie \u0161k\u00e1lovate\u013en\u00e9ho API na spotov\u00fdch in\u0161tanciach AWS\" src=\"\/wp-content\/uploads\/2020\/07\/61fa0ccb38c11f61431db0938140efb7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Po vytvoren\u00ed skupiny ju otvorte a prejdite do sekcie Pokro\u010dil\u00e9 konfigur\u00e1cie, preto\u017ee po\u010das vytv\u00e1rania nie s\u00fa v konzole vidite\u013en\u00e9 v\u0161etky mo\u017enosti.<\/p>\n<p><\/p>\n<p><strong>Politiky ukon\u010denia<\/strong> \u2014 pravidl\u00e1, ktor\u00e9 sa ber\u00fa do \u00favahy pri odstra\u0148ovan\u00ed in\u0161tanci\u00ed. Aplikuj\u00fa sa v porad\u00ed. Zvy\u010dajne pou\u017e\u00edvame tak\u00e9, ako na obr\u00e1zku ni\u017e\u0161ie. Najprv sa odstra\u0148uj\u00fa in\u0161tancie s najstar\u0161\u00edm Launch Template (napr\u00edklad, ak sme aktualizovali AMI, vytvorila sa nov\u00e1 verzia, ale v\u0161etky in\u0161tancie sa stihli na \u0148u prepn\u00fa\u0165). Potom sa vyberaj\u00fa in\u0161tancie, ktor\u00e9 s\u00fa najbli\u017e\u0161ie k nasleduj\u00facej faktura\u010dnej hodine. A \u010falej sa vyberaj\u00fa najstar\u0161ie pod\u013ea d\u00e1tumu spustenia.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvorenie \u0161k\u00e1lovate\u013en\u00e9ho API na spotov\u00fdch in\u0161tanciach AWS\" src=\"\/wp-content\/uploads\/2020\/07\/8236624fe08a03f36aedc7665e18b060.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Good to know<\/strong>: na aktualiz\u00e1ciu v\u0161etk\u00fdch strojov v klastri, je vhodn\u00e9 pou\u017ei\u0165 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/autoscaling\/ec2\/userguide\/asg-instance-refresh.html\">Obnova in\u0161tancie<\/a><\/noindex>Ak spoj\u00edte toto s funkciou Lambda z predch\u00e1dzaj\u00faceho kroku, z\u00edskate \u00faplne automatizovan\u00fd syst\u00e9m aktualiz\u00e1cie in\u0161tanci\u00ed. Pred aktualiz\u00e1ciou v\u0161etk\u00fdch strojov je potrebn\u00e9 vypn\u00fa\u0165 ochranu proti zn\u00ed\u017eeniu po\u010dtu in\u0161tanci\u00ed pre v\u0161etky in\u0161tancie v skupine. Nie nastavenie v skupine, ale ochranu na samotn\u00fdch strojoch, \u010do sa rob\u00ed na karte Spr\u00e1va in\u0161tanci\u00ed.<\/p>\n<p><\/p>\n<h3 id=\"application-load-balancer-i-ec2-target-group\">Application Load Balancer a EC2 Target Group<\/h3>\n<p><\/p>\n<p>Vyv\u00e1\u017ei\u010d sa vytv\u00e1ra v sekcii EC2 \u2192 Load Balancing \u2192 Load Balancers. Pou\u017eijeme Application Load Balancer, porovnanie r\u00f4znych typov vyv\u00e1\u017ei\u010dov si m\u00f4\u017eete pre\u010d\u00edta\u0165 na <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/elasticloadbalancing\/features\/#compare\">str\u00e1nke slu\u017eby<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><strong>Zosil\u0148ova\u010de<\/strong> \u2014 m\u00e1 zmysel nastavi\u0165 porty 80 a 443 a vykona\u0165 presmerovanie z 80 na 443 pomocou pravidiel vyv\u00e1\u017ei\u010da.<\/p>\n<p><\/p>\n<p><strong>Z\u00f3ny dostupnosti<\/strong> \u2014 vo v\u00e4\u010d\u0161ine pr\u00edpadov vyber\u00e1me v\u0161etky z\u00f3ny dostupnosti.<\/p>\n<p><\/p>\n<p><strong>Nastavi\u0165 bezpe\u010dnostn\u00e9 nastavenia<\/strong> \u2014 tu sa uv\u00e1dza SSL certifik\u00e1t pre vyv\u00e1\u017ei\u010d, najpohodlnej\u0161ou mo\u017enos\u0165ou je <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/acm\/latest\/userguide\/gs-acm-request-public.html\">vytvori\u0165 certifik\u00e1t<\/a><\/noindex> v ACM. Rozdiely medzi <strong>politiky zabezpe\u010denia<\/strong> si m\u00f4\u017eete pre\u010d\u00edta\u0165 v <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/elasticloadbalancing\/latest\/classic\/elb-security-policy-table.html\">dokumen\u00e1cie<\/a><\/noindex>, m\u00f4\u017eete necha\u0165 vybran\u00e9 predvolen\u00e9 <code>ELBSecurityPolicy-2016-08<\/code>. Po vytvoren\u00ed vyv\u00e1\u017ei\u010da uvid\u00edte jeho <strong>N\u00e1zov DNS<\/strong>, na ktor\u00fd je potrebn\u00e9 nastavi\u0165 CNAME pre va\u0161u dom\u00e9nu. Napr\u00edklad, takto to vyzer\u00e1 v Cloudflare.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvorenie \u0161k\u00e1lovate\u013en\u00e9ho API na spotov\u00fdch in\u0161tanciach AWS\" src=\"\/wp-content\/uploads\/2020\/07\/899ff0f30df4117fc0ccd91af135def3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Bezpe\u010dnostn\u00e1 skupina<\/strong> \u2014 vytv\u00e1rame alebo vyber\u00e1me bezpe\u010dnostn\u00fa skupinu pre vyv\u00e1\u017ei\u010d, podrobnej\u0161ie o tom p\u00edsal vy\u0161\u0161ie v sekcii EC2 Launch Template \u2192 Nastavenia siete.<\/p>\n<p><\/p>\n<p><strong>Cie\u013eov\u00e1 skupina<\/strong> \u2014 vytv\u00e1rame skupinu, ktor\u00e1 zodpoved\u00e1 za smerovanie po\u017eiadaviek z vyv\u00e1\u017ei\u010da na stroje a kontroluje ich dostupnos\u0165, aby ich v pr\u00edpade probl\u00e9mov nahradila. <strong>Typ cie\u013ea<\/strong> mus\u00ed by\u0165 In\u0161tancia, <strong>Protokol<\/strong> a <strong>Port<\/strong> ak\u00e9ko\u013evek, ak pou\u017e\u00edvate HTTPS na komunik\u00e1ciu medzi vyv\u00e1\u017ei\u010dom a in\u0161tanciami, potom mus\u00edte na nich nahra\u0165 certifik\u00e1t. V r\u00e1mci tohto pr\u00edkladu to robi\u0165 nebudeme, jednoducho zostaneme pri porte 80.<\/p>\n<p><\/p>\n<p><strong>Zdravotn\u00e9 kontroly<\/strong> \u2014 parametre kontroly funk\u010dnosti slu\u017eby. V re\u00e1lnej slu\u017ebe by to mala by\u0165 samostatn\u00e1 po\u017eiadavka, ktor\u00e1 realizuje d\u00f4le\u017eit\u00e9 \u010dasti obchodnej logiky, v r\u00e1mci tohto pr\u00edkladu ponech\u00e1m nastavenia predvolene. Potom si m\u00f4\u017eete vybra\u0165 interval po\u017eiadaviek, \u010dasov\u00fd limit, k\u00f3dy \u00faspe\u0161n\u00fdch odpoved\u00ed a \u010fal\u0161ie. V na\u0161om pr\u00edklade uvedieme K\u00f3dy \u00faspechu 200-399, preto\u017ee Docker obraz, ktor\u00fd sa bude pou\u017e\u00edva\u0165, vracia k\u00f3d 304.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvorenie \u0161k\u00e1lovate\u013en\u00e9ho API na spotov\u00fdch in\u0161tanciach AWS\" src=\"\/wp-content\/uploads\/2020\/07\/e295ab1c3bf1dfe13c76b4942a31c7ee.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Zaregistrova\u0165 ciele<\/strong> \u2014 tu sa vyberaj\u00fa stroje pre skupinu, ale v na\u0161om pr\u00edpade sa touto \u010dinnos\u0165ou bude zaobera\u0165 ECS, tak\u017ee tento krok jednoducho presko\u010d\u00edme.<\/p>\n<p><\/p>\n<p><strong>Good to know<\/strong>: na \u00farovni vyv\u00e1\u017ei\u010da m\u00f4\u017eete povoli\u0165 logy, ktor\u00e9 bud\u00fa ukladan\u00e9 do S3 v ur\u010ditej <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/elasticloadbalancing\/latest\/application\/load-balancer-access-logs.html\">form\u00e1te<\/a><\/noindex>. Odtia ich mo\u017eno exportova\u0165 do extern\u00fdch slu\u017eieb na anal\u00fdzu, a tie\u017e je mo\u017en\u00e9 vykon\u00e1va\u0165 SQL dopyty priamo na \u00fadajoch v S3 pomocou <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/athena\/latest\/ug\/application-load-balancer-logs.html\">Athena<\/a><\/noindex>. Je to praktick\u00e9 a funguje to bez ak\u00e9hoko\u013evek dodato\u010dn\u00e9ho k\u00f3du. Odpor\u00fa\u010dam tie\u017e nastavi\u0165 odstra\u0148ovanie logov z bucketu S3 po uplynut\u00ed stanoven\u00e9ho obdobia.<\/p>\n<p><\/p>\n<h3 id=\"ecs-task-definition\">Defin\u00edcia \u00falohy ECS<\/h3>\n<p><\/p>\n<p>Na predch\u00e1dzaj\u00facich krokoch sme vytvorili v\u0161etko, \u010do sa t\u00fdka infra\u0161trukt\u00fary slu\u017eby, teraz prech\u00e1dzame k popisu kontajnerov, ktor\u00e9 budeme sp\u00fa\u0161\u0165a\u0165. Toto sa rob\u00ed v \u010dasti ECS \u2192 Defin\u00edcie \u00faloh.<\/p>\n<p><\/p>\n<p><strong>Kompatibilita typu spustenia<\/strong> \u2014 vyber\u00e1me EC2.<\/p>\n<p><\/p>\n<p><strong>IAM \u00faloha vykon\u00e1vania \u00falohy<\/strong> \u2014 vyber\u00e1me <code>ecsTaskExecutionRole<\/code>. S jej pomocou sa zapisuj\u00fa logy, poskytuje pr\u00edstup k tajn\u00fdm premenn\u00fdm a pod.<\/p>\n<p><\/p>\n<p>V \u010dasti Defin\u00edcie kontajnerov stla\u010d\u00edme Prida\u0165 kontajner.<\/p>\n<p><\/p>\n<p><strong>Obr\u00e1zok<\/strong> \u2014 odkaz na obraz s k\u00f3dom projektu, v r\u00e1mci tohto pr\u00edkladu pou\u017eijem verejn\u00fd obraz z Docker Hub <noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/r\/bitnami\/node-example\">bitnami\/node-example:0.0.1<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><strong>Limity pam\u00e4te<\/strong> \u2014 limity pam\u00e4te pre kontajner. <strong>Tvrd\u00fd limit<\/strong> \u2014 tvrd\u00fd limit, ak kontajner prekro\u010d\u00ed uveden\u00fa hodnotu, vykon\u00e1 sa pr\u00edkaz docker kill, kontajner okam\u017eite zomrie. <strong>M\u00e4kk\u00fd limit<\/strong> \u2014 m\u00e4kk\u00fd limit, kontajner m\u00f4\u017ee prekro\u010di\u0165 uveden\u00fa hodnotu, ale pri nasadzovan\u00ed \u00faloh na stroje sa zoh\u013eadn\u00ed tento parameter. Napr\u00edklad, ak m\u00e1 stroj 4 GiB RAM a m\u00e4kk\u00fd limit kontajnera je 2048 MiB, na tomto stroji m\u00f4\u017eu by\u0165 maxim\u00e1lne 2 spusten\u00e9 \u00falohy s t\u00fdmto kontajnerom. V skuto\u010dnosti je 4 GiB RAM o nie\u010do menej ako 4096 MiB, \u010do m\u00f4\u017eete vidie\u0165 na karte ECS Instances v klastri. M\u00e4kk\u00fd limit nem\u00f4\u017ee by\u0165 v\u00e4\u010d\u0161\u00ed ako tvrd\u00fd limit. Je d\u00f4le\u017eit\u00e9 si uvedomi\u0165, \u017ee ak m\u00e1 jedna \u00faloha nieko\u013eko kontajnerov, ich limity sa s\u010d\u00edtaj\u00fa.<\/p>\n<p><\/p>\n<p><strong>Mapovanie portov<\/strong> \u2014 v <strong>Hostite\u013esk\u00fd port<\/strong> uv\u00e1dzame 0, to znamen\u00e1, \u017ee port bude priraden\u00fd dynamicky, jeho bude sledova\u0165 cie\u013eov\u00e1 skupina. <strong>Port kontajnera<\/strong> \u2014 port, na ktorom be\u017e\u00ed va\u0161a aplik\u00e1cia, \u010dasto sa zad\u00e1va v pr\u00edkaze na vykonanie alebo prira\u010fuje v k\u00f3de va\u0161ej aplik\u00e1cie, Dockerfile at\u010f. Pre n\u00e1\u0161 pr\u00edklad pou\u017eijeme 3000, preto\u017ee je uveden\u00fd v <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bitnami\/bitnami-docker-node\/blob\/master\/example\/Dockerfile\">Dockerfile<\/a><\/noindex> pou\u017e\u00edvanom obraze.<\/p>\n<p><\/p>\n<p><strong>Kontrola zdravia<\/strong> \u2014 parametre kontroly funk\u010dnosti kontajnera, nezamie\u0148ajte s t\u00fdmi, ktor\u00e9 s\u00fa nastaven\u00e9 v cie\u013eovej skupine.<\/p>\n<p><\/p>\n<p><strong>Prostredie<\/strong> \u2014 nastavenia prostredia. <strong>CPU jednotky<\/strong> \u2014 podobne ako obmedzenia pam\u00e4te, len ide o procesor. Ka\u017ed\u00e9 jadro procesora predstavuje 1024 jednotiek, tak\u017ee ak m\u00e1 server dvojjadrov\u00fd procesor a na kontajneri je nastaven\u00e1 hodnota 512, potom m\u00f4\u017eu by\u0165 na jednom serveri spusten\u00e9 4 \u00falohy s t\u00fdmto kontajnerom. Jednotky CPU v\u017edy zodpovedaj\u00fa po\u010dtu jadier, nem\u00f4\u017ee ich by\u0165 o nie\u010do menej, ako je to v pr\u00edpade pam\u00e4te.<\/p>\n<p><\/p>\n<p><strong>Pr\u00edkaz<\/strong> \u2014 pr\u00edkaz na spustenie slu\u017eby vo vn\u00fatri kontajnera, v\u0161etky parametre s\u00fa uveden\u00e9 \u010diarkou. M\u00f4\u017ee to by\u0165 gunicorn, npm at\u010f. Ak nie je uveden\u00e9, bude pou\u017eit\u00e1 hodnota direkt\u00edvy CMD z Dockerfile. Uv\u00e1dzame <code>npm,start<\/code>.<\/p>\n<p><\/p>\n<p><strong>Premenn\u00e9 prostredia<\/strong> \u2014 premenn\u00e9 prostredia kontajnera. M\u00f4\u017eu to by\u0165 ako jednoduch\u00e9 textov\u00e9 \u00fadaje, tak aj tajn\u00e9 premenn\u00e9 z <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/specifying-sensitive-data-secrets.html\">Secrets Manager<\/a><\/noindex> alebo <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/specifying-sensitive-data-parameters.html\">Parameter Store<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><strong>Ukladanie a logovanie<\/strong> \u2014 tu nastav\u00edme logovanie v CloudWatch Logs (slu\u017eba pre logy od AWS). Na to sta\u010d\u00ed za\u0161krtn\u00fa\u0165 mo\u017enos\u0165 Auto-configure CloudWatch Logs. Po vytvoren\u00ed Task Definition sa automaticky vytvor\u00ed skupina logov v CloudWatch. Predvolene sa logy v nej uchov\u00e1vaj\u00fa neobmedzene, odpor\u00fa\u010dam zmeni\u0165 Retention period z Never Expire na po\u017eadovan\u00fa dobu. Toto sa rob\u00ed v CloudWatch Log groups, je potrebn\u00e9 klikn\u00fa\u0165 na aktu\u00e1lne obdobie a vybra\u0165 nov\u00e9.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvorenie \u0161k\u00e1lovate\u013en\u00e9ho API na spotov\u00fdch in\u0161tanciach AWS\" src=\"\/wp-content\/uploads\/2020\/07\/c9ad7ca39dfde9343be89eb9ab1aef10.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"ecs-cluster-i-ecs-capacity-provider\">ECS Cluster a ECS Capacity Provider<\/h3>\n<p><\/p>\n<p>Prejdeme do sekcie ECS \u2192 Clusters, aby sme vytvorili klastra. Ako \u0161abl\u00f3nu vyber\u00e1me EC2 Linux + Networking.<\/p>\n<p><\/p>\n<p><strong>N\u00e1zov klastra<\/strong> \u2014 ve\u013emi d\u00f4le\u017eit\u00e9, tu vytv\u00e1rame rovnak\u00e9 meno, ak\u00e9 je uveden\u00e9 v Launch Template v parametre <code>ECS_CLUSTER<\/code>, v na\u0161om pr\u00edpade \u2014 <code>DemoApiClusterProd<\/code>. Za\u0161krtneme mo\u017enos\u0165 Create an empty cluster. Volite\u013ene m\u00f4\u017eeme zapn\u00fa\u0165 Container Insights, aby sme sledovali metriky slu\u017eieb v CloudWatch. Ak ste v\u0161etko urobili spr\u00e1vne, v sekcii ECS Instances uvid\u00edte stroje, ktor\u00e9 boli vytvoren\u00e9 v Auto Scaling group.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvorenie \u0161k\u00e1lovate\u013en\u00e9ho API na spotov\u00fdch in\u0161tanciach AWS\" src=\"\/wp-content\/uploads\/2020\/07\/cd70062c9783ae359a2b27cbfc66cbe3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Prejdeme na kartu <strong>Capacity Providers<\/strong> a vytvor\u00edme nov\u00fd. Pripom\u00ednam, \u017ee je potrebn\u00fd na riadenie vytv\u00e1rania a vyp\u00ednania strojov v z\u00e1vislosti od po\u010dtu be\u017eiacich ECS \u00faloh. Je d\u00f4le\u017eit\u00e9 poznamena\u0165, \u017ee poskytovate\u013e m\u00f4\u017ee by\u0165 priraden\u00fd len k jednej skupine.<\/p>\n<p><\/p>\n<p><strong>Auto Scaling group<\/strong> \u2014 vyber\u00e1me predt\u00fdm vytvoren\u00fa skupinu.<\/p>\n<p><\/p>\n<p><strong>Spravovan\u00e9 \u0161k\u00e1lovanie<\/strong> \u2014 zapneme, aby poskytovate\u013e mohol \u0161k\u00e1lova\u0165 slu\u017ebu.<\/p>\n<p><\/p>\n<p><strong>Cie\u013eov\u00e1 kapacita %<\/strong> \u2014 ak\u00e9 percento za\u0165a\u017eenia strojov \u00falohami potrebujeme. Ak uvedieme 100 %, v\u0161etky stroje bud\u00fa v\u017edy za\u0165a\u017een\u00e9 be\u017eiacimi \u00falohami. Ak uvedieme 50 %, polovica strojov bude v\u017edy vo\u013en\u00e1. V takom pr\u00edpade, ak d\u00f4jde k prudk\u00e9mu n\u00e1rastu z\u00e1\u0165a\u017ee, nov\u00e9 \u00falohy okam\u017eite prejd\u00fa na vo\u013en\u00e9 stroje, bez potreby \u010daka\u0165 na roz\u0161\u00edrenie in\u0161tanci\u00ed.<\/p>\n<p><\/p>\n<p><strong>Spr\u00e1va ochrany pred zru\u0161en\u00edm<\/strong> \u2014 zapnut\u00edm tohto parametra umo\u017e\u0148ujete poskytovate\u013eovi odstr\u00e1ni\u0165 ochranu in\u0161tanci\u00ed pred vymazan\u00edm. K tomu d\u00f4jde, ak na zariaden\u00ed nie s\u00fa akt\u00edvne \u00falohy a umo\u017e\u0148uje to percento cie\u013eovej kapacity.<\/p>\n<p><\/p>\n<h3 id=\"ecs-service-i-nastroyka-masshtabirovaniya\">ECS Slu\u017eba a nastavenie \u0161k\u00e1lovania<\/h3>\n<p><\/p>\n<p>Posledn\u00fd krok :) Ak chcete vytvori\u0165 slu\u017ebu, mus\u00edte prejs\u0165 do predt\u00fdm vytvoren\u00e9ho klastra na kartu Slu\u017eby.<\/p>\n<p><\/p>\n<p><strong>Typ spustenia<\/strong> \u2014 potrebujete klikn\u00fa\u0165 na Prepn\u00fa\u0165 na strat\u00e9giu poskytovate\u013ea kapacity a vybra\u0165 predt\u00fdm vytvoren\u00e9ho poskytovate\u013ea.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvorenie \u0161k\u00e1lovate\u013en\u00e9ho API na spotov\u00fdch in\u0161tanciach AWS\" src=\"\/wp-content\/uploads\/2020\/07\/9d9dfdd8e333cce24bfb048ac84097e4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Defin\u00edcia \u00falohy<\/strong> \u2014 vyber\u00e1me predt\u00fdm vytvoren\u00fa Defin\u00edciu \u00falohy a jej rev\u00edziu.<\/p>\n<p><\/p>\n<p><strong>Meno slu\u017eby<\/strong> \u2014 aby sme sa nezamie\u0148ali, v\u017edy uv\u00e1dzame to ist\u00e9, ako Defin\u00edcia \u00falohy.<\/p>\n<p><\/p>\n<p><strong>Typ slu\u017eby<\/strong> \u2014 v\u017edy Replica.<\/p>\n<p><\/p>\n<p><strong>Po\u010det \u00faloh<\/strong> \u2014 po\u017eadovan\u00fd po\u010det akt\u00edvnych \u00faloh v slu\u017ebe. Tento parameter riadi \u0161k\u00e1lovanie, ale st\u00e1le ho treba zada\u0165.<\/p>\n<p><\/p>\n<p><strong>Minim\u00e1lne percento zdrav\u00fdch \u00faloh<\/strong> a <strong>Maxim\u00e1lne percento<\/strong> \u2014 ur\u010duj\u00fa spr\u00e1vanie \u00faloh pri nasaden\u00ed. Predvolen\u00e9 hodnoty s\u00fa 100 a 200, hovoria o tom, \u017ee v momente nasadenia sa po\u010det \u00faloh zv\u00fd\u0161i na dvojn\u00e1sobok a potom sa vr\u00e1ti na po\u017eadovan\u00e9. Ak m\u00e1te 1 \u00falohu, min=0 a max=100, vtedy pri nasaden\u00ed bude zru\u0161en\u00e1, a potom sa spust\u00ed nov\u00e1, to znamen\u00e1, \u017ee d\u00f4jde k prestoji. Ak funguje 1 \u00faloha, min=50, max=150, tak nasadenie sa v\u00f4bec neuskuto\u010dn\u00ed, preto\u017ee 1 \u00falohu nemo\u017eno rozdeli\u0165 na polovicu alebo zv\u00fd\u0161i\u0165 o polovicu.<\/p>\n<p><\/p>\n<p><strong>Typ nasadenia<\/strong> \u2014 nech\u00e1vame Rolling update.<\/p>\n<p><\/p>\n<p><strong>\u0160abl\u00f3ny umiestnenia<\/strong> \u2014 pravidl\u00e1 umiestnenia \u00faloh na strojoch. Predvolene je nastaven\u00e9 AZ Balanced Spread \u2014 to znamen\u00e1, \u017ee ka\u017ed\u00e1 nov\u00e1 \u00faloha bude umiestnen\u00e1 na nov\u00fa in\u0161tanciu, k\u00fdm sa neaktualizuj\u00fa stroje vo v\u0161etk\u00fdch z\u00f3nach dostupnosti. Zvy\u010dajne nastavujeme BinPack \u2014 CPU a Spread \u2014 AZ, pri takejto politike sa \u00falohy umiest\u0148uj\u00fa maxim\u00e1lne bl\u00edzko na jeden stroj pod\u013ea CPU. V pr\u00edpade potreby vytvorenia nov\u00e9ho stroja sa vytvor\u00ed v novej z\u00f3ne dostupnosti.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvorenie \u0161k\u00e1lovate\u013en\u00e9ho API na spotov\u00fdch in\u0161tanciach AWS\" src=\"\/wp-content\/uploads\/2020\/07\/6430bdf046fc5b970e0afbbf0d9ef65e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Typ vyrovn\u00e1va\u010da z\u00e1\u0165a\u017ee<\/strong> \u2014 vyber\u00e1me Application Load Balancer.<\/p>\n<p><\/p>\n<p><strong>IAM rola slu\u017eby<\/strong> \u2014 vyber\u00e1me <code>ecsServiceRole<\/code>.<\/p>\n<p><\/p>\n<p><strong>Meno vyrovn\u00e1va\u010da z\u00e1\u0165a\u017ee<\/strong> \u2014 vyber\u00e1me predt\u00fdm vytvoren\u00fd vyrovn\u00e1va\u010d.<\/p>\n<p><\/p>\n<p><strong>Obdobie grace pre kontrolu stavu<\/strong> \u2014 prest\u00e1vka pred vykonan\u00edm kontrol stavu po nasaden\u00ed novej \u00falohy, zvy\u010dajne nastavujeme 60 sek\u00fand.<\/p>\n<p><\/p>\n<p><strong>Kontajner na vyrovn\u00e1vanie z\u00e1\u0165a\u017ee<\/strong> \u2014 v polo\u017eke N\u00e1zov cie\u013eovej skupiny vyber\u00e1me predt\u00fdm vytvoren\u00fa skupinu, a v\u0161etko sa automaticky vypln\u00ed.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvorenie \u0161k\u00e1lovate\u013en\u00e9ho API na spotov\u00fdch in\u0161tanciach AWS\" src=\"\/wp-content\/uploads\/2020\/07\/c067868ff73c25c3d9b65e02be64f5c9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Automatick\u00e9 \u0161k\u00e1lovanie slu\u017eby<\/strong> \u2014 parametre \u0161k\u00e1lovania slu\u017eby. Vyber\u00e1me Konfigurova\u0165 automatick\u00e9 \u0161k\u00e1lovanie slu\u017eby na \u00fapravu po\u017eadovan\u00e9ho po\u010dtu va\u0161ej slu\u017eby. Zad\u00e1vame minim\u00e1lne a maxim\u00e1lne po\u010dty \u00faloh pri \u0161k\u00e1lovan\u00ed.<\/p>\n<p><\/p>\n<p><strong>IAM rola pre automatick\u00e9 \u0161k\u00e1lovanie slu\u017eby<\/strong> \u2014 vyber\u00e1me <code>AWSServiceRoleForApplicationAutoScaling_ECSService<\/code>.<\/p>\n<p><\/p>\n<p><strong>Automatick\u00e9 politiky \u0161k\u00e1lovania \u00faloh<\/strong> \u2014 pravidl\u00e1 pre \u0161k\u00e1lovanie. Existuj\u00fa 2 typy:<\/p>\n<p><\/p>\n<ol>\n<li><strong>Cie\u013eov\u00e9 sledovanie<\/strong> \u2014 sledovanie cie\u013eovej metriky (vyu\u017eitie CPU\/RAM alebo po\u010det po\u017eiadaviek na ka\u017ed\u00fd \u00faloha). Napr\u00edklad, chceme, aby priemern\u00e9 za\u0165a\u017eenie procesora bolo 85%, a ke\u010f presiahne t\u00fato hodnotu, nov\u00e9 \u00falohy sa bud\u00fa prid\u00e1va\u0165, k\u00fdm sa nedosiahne cie\u013eov\u00e1 hodnota. Ak je za\u0165a\u017eenie ni\u017e\u0161ie, \u00falohy sa naopak odstr\u00e1nia, pokia\u013e nie je zapnut\u00e1 ochrana pred zni\u017eovan\u00edm \u0161k\u00e1lovania (<strong>Vypn\u00fa\u0165 zni\u017eovanie \u0161k\u00e1lovania<\/strong>).<\/li>\n<li><strong>Krokov\u00e9 \u0161k\u00e1lovanie<\/strong> \u2014 reakcia na n\u00e1hodn\u00fa udalos\u0165. Tu m\u00f4\u017eete nastavi\u0165 reakciu na ak\u00fako\u013evek udalos\u0165 (CloudWatch Alarm), ke\u010f sa t\u00e1to udalos\u0165 vyskytne, m\u00f4\u017eete prida\u0165 alebo odstr\u00e1ni\u0165 uveden\u00e9 mno\u017estvo \u00faloh, alebo ur\u010di\u0165 presn\u00fd po\u010det \u00faloh.<\/li>\n<\/ol>\n<p><\/p>\n<p>Slu\u017eba m\u00f4\u017ee ma\u0165 nieko\u013eko pravidiel \u0161k\u00e1lovania, \u010do m\u00f4\u017ee by\u0165 u\u017eito\u010dn\u00e9, hlavn\u00e9 je sledova\u0165, aby si navz\u00e1jom nekolidovali.<\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Z\u00e1ver<\/h2>\n<p><\/p>\n<p>Ak ste sa riadili pokynmi a pou\u017eili rovnak\u00fd Docker obraz, va\u0161a slu\u017eba by mala vraca\u0165 t\u00fato str\u00e1nku.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvorenie \u0161k\u00e1lovate\u013en\u00e9ho API na spotov\u00fdch in\u0161tanciach AWS\" src=\"\/wp-content\/uploads\/2020\/07\/ac592e3194480ac8b347a3a1faf0cee0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ol>\n<li>Vytvorili sme \u0161abl\u00f3nu, pod\u013ea ktorej sa sp\u00fa\u0161\u0165aj\u00fa v\u0161etky stroje v slu\u017ebe. Taktie\u017e sme sa nau\u010dili aktualizova\u0165 stroje pri zmene \u0161abl\u00f3ny.<\/li>\n<li>Nastavili sme spracovanie sign\u00e1lu na zastavenie spotoch in\u0161tancie, tak\u017ee do jednej min\u00faty po jeho prijat\u00ed s\u00fa v\u0161etky pracuj\u00face \u00falohy odstr\u00e1nen\u00e9 z stroja, \u010d\u00edm sa ni\u010d nestr\u00e1ca a nepreru\u0161uje.<\/li>\n<li>Zalo\u017eili sme vyva\u017eova\u010d, aby sme rovnomerne rozlo\u017eili z\u00e1\u0165a\u017e medzi stroje.<\/li>\n<li>Vytvorili sme slu\u017ebu, ktor\u00e1 funguje na spotoch in\u0161tanci\u00e1ch, a t\u00fdm sa n\u00e1klady na stroje skracuj\u00fa pribli\u017ene trojn\u00e1sobne.<\/li>\n<li>Nastavili sme automatick\u00e9 \u0161k\u00e1lovanie oboma smermi, aby sme spracovali zv\u00fd\u0161en\u00e9 za\u0165a\u017eenie, ale z\u00e1rove\u0148 neplatili za ne\u010dinnos\u0165.<\/li>\n<li>Pou\u017e\u00edvame Capacity Provider, aby aplik\u00e1cia spravovala infra\u0161trukt\u00faru (stroje) a nie naopak.<\/li>\n<li>Sme skvel\u00ed.<\/li>\n<\/ol>\n<p><\/p>\n<p>Ak m\u00e1te predv\u00eddate\u013en\u00e9 v\u00fdkyvy za\u0165a\u017eenia, napr\u00edklad, ak sa propagujete vo ve\u013ekej e-mailovej kampani, m\u00f4\u017eete nastavi\u0165 \u0161k\u00e1lovanie pod\u013ea <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/autoscaling\/application\/userguide\/application-auto-scaling-scheduled-scaling.html\">rozvrhu<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Taktie\u017e je mo\u017en\u00e9 robi\u0165 \u0161k\u00e1lovanie na z\u00e1klade \u00fadajov z r\u00f4znych \u010dast\u00ed v\u00e1\u0161ho syst\u00e9mu. Napr\u00edklad, m\u00e1me funkciu <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.adapty.io\/promo-campaigns\">posielania individu\u00e1lnych promo pon\u00fak<\/a><\/noindex> u\u017e\u00edvate\u013eom mobilnej aplik\u00e1cie. Niekedy je kampa\u0148 rozoslan\u00e1 viac ako 1M osob\u00e1m. Po takejto rozosielke v\u017edy doch\u00e1dza k v\u00fdrazn\u00e9mu n\u00e1rastu dopytu na API, preto\u017ee ve\u013ea pou\u017e\u00edvate\u013eov sa naraz prihlasuje do aplik\u00e1cie. Tak\u017ee ak vid\u00edme, \u017ee v rade na odoslanie propaga\u010dn\u00fdch push notifik\u00e1ci\u00ed je ich v\u00fdrazne viac ako je \u0161tandard, m\u00f4\u017eeme okam\u017eite spusti\u0165 nieko\u013eko dodato\u010dn\u00fdch strojov a \u00faloh, aby sme sa pripravili na z\u00e1\u0165a\u017e.<\/p>\n<p><\/p>\n<p>Budem r\u00e1d, ak v koment\u00e1roch poviete zauj\u00edmav\u00e9 pr\u00edpady pou\u017eitia spotov\u00fdch in\u0161tanci\u00ed a ECS alebo nie\u010do o \u0161k\u00e1lovan\u00ed.<\/p>\n<p><\/p>\n<p>\u010coskoro bud\u00fa \u010dl\u00e1nky o tom, ako spracov\u00e1vame tis\u00edce analytick\u00fdch udalost\u00ed za sekundu na preva\u017ene serverless st Stacku (s peniazmi) a ako prebieha nasadenie slu\u017eieb pomocou GitLab CI a Terraform Cloud.<\/p>\n<p><\/p>\n<p>Sledujte n\u00e1s, bude to zauj\u00edmav\u00e9!<\/p>\n<p class=\"for_users_only_msg\">Len registrovan\u00ed pou\u017e\u00edvatelia sa m\u00f4\u017eu z\u00fa\u010dastni\u0165 prieskumu. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Prihl\u00e1ste sa<\/a><\/noindex>, pros\u00edm.<\/p>\n<h2 class=\"default-block__polling-title\">Pou\u017e\u00edvate spot instances v produkcii?<\/h2>\n<ul class=\"poll-result\">\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">22,2%<\/strong>\u00c1no6<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent  poll-result__data-percent_winner\">66,7%<\/strong>Nie18<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">11,1%<\/strong>Zistil som o nich z \u010dl\u00e1nku, pl\u00e1nujem ich pou\u017ei\u01653<\/p>\n<\/li>\n<\/ul>\n<p>    Hlasovalo 27 pou\u017e\u00edvate\u013eov. Zdr\u017ealo sa 5 pou\u017e\u00edvate\u013eov.<br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/509790\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041a\u0438\u0440\u0438\u043b\u043b, \u044f CTO \u0432 Adapty. \u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043d\u0430\u0448\u0435\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 AWS, \u0438 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b\u0438 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 3 \u0440\u0430\u0437\u0430 \u0437\u0430 \u0441\u0447\u0451\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043f\u043e\u0442\u043e\u0432\u044b\u0445 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432 \u043d\u0430 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0437\u043e\u0440 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":87394,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-87393","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.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041a\u0438\u0440\u0438\u043b\u043b, \u044f CTO \u0432 Adapty.\" \/>\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\/sk\/blog\/administrirovanie\/sozdanie-masshtabiruemogo-api-na-spotovyh-instansah-aws\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\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\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e API \u043d\u0430 \u0441\u043f\u043e\u0442\u043e\u0432\u044b\u0445 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430\u0445 AWS | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041a\u0438\u0440\u0438\u043b\u043b, \u044f CTO \u0432 Adapty.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/sozdanie-masshtabiruemogo-api-na-spotovyh-instansah-aws\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-07T23:42:02+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-07T23:42:02+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\udd47Vytvorenie \u0161k\u00e1lovate\u013en\u00e9ho API na spotov\u00fdch in\u0161tanci\u00e1ch AWS | ProHoster","description":"Ahojte v\u0161etci! Vol\u00e1m sa Kirill, som CTO v Adapty.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/sozdanie-masshtabiruemogo-api-na-spotovyh-instansah-aws","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e API \u043d\u0430 \u0441\u043f\u043e\u0442\u043e\u0432\u044b\u0445 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430\u0445 AWS | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041a\u0438\u0440\u0438\u043b\u043b, \u044f CTO \u0432 Adapty.","og:url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/sozdanie-masshtabiruemogo-api-na-spotovyh-instansah-aws","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-07T23:42:02+00:00","article:modified_time":"2020-07-07T23:42:02+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"87393","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:44:41","updated":"2022-09-28 14:12:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/87393","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=87393"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/87393\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/87394"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=87393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=87393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=87393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}