{"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\/cs\/blog\/administrirovanie\/sozdanie-masshtabiruemogo-api-na-spotovyh-instansah-aws","title":{"rendered":"Vytvo\u0159en\u00ed \u0161k\u00e1lovateln\u00e9ho API na spotov\u00fdch instanc\u00edch AWS","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ahoj v\u0161ichni! Jmenuji se Kirill, jsem CTO ve spole\u010dnosti Adapty. V\u011bt\u0161ina na\u0161\u00ed architektury b\u011b\u017e\u00ed na AWS, a dnes v\u00e1m pov\u00edm, jak jsme sn\u00ed\u017eili n\u00e1klady na servery t\u0159ikr\u00e1t d\u00edky pou\u017eit\u00ed spot instanc\u00ed v produk\u010dn\u00edm prost\u0159ed\u00ed, a tak\u00e9 jak je nastavit pro automatick\u00e9 \u0161k\u00e1lov\u00e1n\u00ed. Nejprve bude p\u0159ehled toho, jak to funguje, a pot\u00e9 podrobn\u00fd n\u00e1vod na spu\u0161t\u011bn\u00ed.<\/p>\n<p><\/p>\n<h2 id=\"chto-takoe-spotovye-instansy\">Co jsou to spot instance?<\/h2>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/ec2\/spot\/\">Spot<\/a><\/noindex> instance jsou servery od jin\u00fdch u\u017eivatel\u016f AWS, kter\u00e9 v tuto chv\u00edli nepracuj\u00ed, a ti je prod\u00e1vaj\u00ed s velkou slevou (Amazon uv\u00e1d\u00ed a\u017e 90%, z na\u0161\u00ed zku\u0161enosti ~3x, m\u011bn\u00ed se v z\u00e1vislosti na regionu, AZ a typu instance). Hlavn\u00ed rozd\u00edl oproti b\u011b\u017en\u00fdm je, \u017ee se mohou kdykoliv vypnout. Proto jsme dlouho pova\u017eovali, \u017ee je spr\u00e1vn\u00e9 je pou\u017e\u00edvat pro v\u00fdvojov\u00e1 prost\u0159ed\u00ed, nebo pro \u00falohy, kter\u00e9 n\u011bco po\u010d\u00edtaj\u00ed, s ukl\u00e1d\u00e1n\u00edm meziprodukt\u016f na S3 nebo do datab\u00e1ze, ale ne pro produkci. Existuj\u00ed t\u0159et\u00ed strany, kter\u00e9 umo\u017e\u0148uj\u00ed pou\u017e\u00edvat spoty v produkci, ale v na\u0161em p\u0159\u00edpad\u011b tam bylo mnoho workaround\u016f, tak\u017ee jsme je neimplementovali. P\u0159\u00edstup popsan\u00fd v \u010dl\u00e1nku funguje \u00fapln\u011b v r\u00e1mci standardn\u00edho funk\u010dn\u00edho rozsahu AWS, bez dodate\u010dn\u00fdch skript\u016f, cron\u016f atd.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>N\u00e1sleduj\u00edc\u00ed uv\u00e1d\u00edm n\u011bkolik screenshot\u016f, kter\u00e9 ukazuj\u00ed historii cen spot instanc\u00ed.<\/p>\n<p><\/p>\n<p>m5.large v regionu eu-west-1 (Irsko). Cena je p\u0159ev\u00e1\u017en\u011b stabiln\u00ed po dobu 3 m\u011bs\u00edc\u016f, aktu\u00e1ln\u011b \u00faspora 2.9x.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvo\u0159en\u00ed \u0161k\u00e1lovateln\u00e9ho API na spotov\u00fdch instanc\u00edch AWS\" src=\"\/wp-content\/uploads\/2020\/07\/901a259955c386493557280489f582fe.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>m5.large v regionu us-east-1 (Severn\u00ed Virginie). Cena se neust\u00e1le m\u011bn\u00ed po dobu 3 m\u011bs\u00edc\u016f, aktu\u00e1ln\u011b \u00faspora od 2.3x do 2.8x v z\u00e1vislosti na dostupnostn\u00ed z\u00f3n\u011b.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvo\u0159en\u00ed \u0161k\u00e1lovateln\u00e9ho API na spotov\u00fdch instanc\u00edch AWS\" src=\"\/wp-content\/uploads\/2020\/07\/49c89430f03b2c7025355562d2873b6b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>t3.small v regionu us-east-1 (Severn\u00ed Virginie). Cena je stabiln\u00ed po dobu 3 m\u011bs\u00edc\u016f, aktu\u00e1ln\u011b \u00faspora 3.4x.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvo\u0159en\u00ed \u0161k\u00e1lovateln\u00e9ho API na spotov\u00fdch instanc\u00edch AWS\" src=\"\/wp-content\/uploads\/2020\/07\/2e139dcc6d44bd37caf9d75eb6ec4835.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"arhitektura-servisa\">Architektura slu\u017eby<\/h2>\n<p><\/p>\n<p>Z\u00e1kladn\u00ed architektura slu\u017eby, o kter\u00e9 se budeme bavit v r\u00e1mci tohoto \u010dl\u00e1nku, je zn\u00e1zorn\u011bna na diagramu n\u00ed\u017ee.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvo\u0159en\u00ed \u0161k\u00e1lovateln\u00e9ho API na spotov\u00fdch instanc\u00edch 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>Jako vyva\u017eova\u010d se pou\u017e\u00edv\u00e1 Application Load Balancer (ALB), kter\u00fd sm\u011bruje po\u017eadavky do EC2 Target Group (TG). TG zaji\u0161\u0165uje, \u017ee otev\u0159e na instanc\u00edch porty pro ALB a propoj\u00ed je s porty kontejner\u016f Elastic Container Service (ECS). ECS je obdobou Kubernetes v AWS, kter\u00fd se zab\u00fdv\u00e1 spr\u00e1vou Docker kontejner\u016f.<\/p>\n<p><\/p>\n<p>Na jednom instance m\u016f\u017ee b\u00fdt n\u011bkolik b\u011b\u017e\u00edc\u00edch kontejner\u016f se stejn\u00fdmi porty, a proto je nen\u00ed mo\u017en\u00e9 pevn\u011b nastavit. ECS informuje TG, \u017ee spou\u0161t\u00ed novou \u00falohu (v terminologii Kubernetes se tomu \u0159\u00edk\u00e1 pod), prov\u00e1d\u00ed kontrolu voln\u00fdch port\u016f na instanci a p\u0159i\u0159ad\u00ed jeden z nich pro spu\u0161t\u011bnou \u00falohu. TG tak\u00e9 pravideln\u011b kontroluje, zda instance a API na n\u00ed funguj\u00ed pomoc\u00ed health checku, a pokud zjist\u00ed n\u011bjak\u00e9 probl\u00e9my, p\u0159estane na n\u011b odes\u00edlat po\u017eadavky.<\/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 v\u00fd\u0161e uveden\u00e9m diagramu nen\u00ed zobrazen slu\u017eba EC2 Auto Scaling Groups (ASG). Z n\u00e1zvu je jasn\u00e9, \u017ee zodpov\u00edd\u00e1 za \u0161k\u00e1lov\u00e1n\u00ed instanc\u00ed. Do ned\u00e1vna v\u0161ak AWS nem\u011blo vestav\u011bnou mo\u017enost \u0159\u00eddit po\u010det b\u011b\u017e\u00edc\u00edch stroj\u016f z ECS. ECS umo\u017e\u0148ovalo \u0161k\u00e1lovat po\u010det \u00faloh, nap\u0159\u00edklad podle vyu\u017eit\u00ed CPU, RAM nebo po\u010dtu po\u017eadavk\u016f. Ale pokud \u00falohy zabraly v\u0161echny voln\u00e9 instance, nov\u00e9 stroje se automaticky nezvedaly.<\/p>\n<p><\/p>\n<p>To se zm\u011bnilo s p\u0159\u00edchodem ECS Capacity Providers (ECS CP). Nyn\u00ed lze ka\u017ed\u00fd servis v ECS propojit s ASG, a pokud se \u00falohy nevejdou na b\u011b\u017e\u00edc\u00ed instance, nov\u00e1 instance se zvednou (ale v r\u00e1mci stanoven\u00fdch limit\u016f ASG). To funguje i naopak; pokud ECS CP vid\u00ed nevyu\u017e\u00edvan\u00e9 instance bez \u00faloh, vyd\u00e1 p\u0159\u00edkaz ASG, aby je vypnula. ECS CP m\u00e1 mo\u017enost nastavit c\u00edlov\u00e9 procento vyt\u00ed\u017een\u00ed instanc\u00ed, aby bylo v\u017edy k dispozici ur\u010dit\u00e9 mno\u017estv\u00ed stroj\u016f pro rychl\u00e9 \u0161k\u00e1lov\u00e1n\u00ed \u00faloh, o tom budu mluvit pozd\u011bji.<\/p>\n<p><\/p>\n<h3 id=\"ec2-launch-templates\">EC2 Launch Templates<\/h3>\n<p><\/p>\n<p>Posledn\u00ed slu\u017eba, o kter\u00e9 budu hovo\u0159it, ne\u017e se p\u0159ejde k podrobn\u00e9mu popisu vytv\u00e1\u0159en\u00ed t\u00e9to infrastruktury, je EC2 Launch Templates. Umo\u017e\u0148uje vytvo\u0159it \u0161ablonu, podle kter\u00e9 budou v\u0161echny stroje spou\u0161t\u011bny, abychom nemuseli ka\u017ed\u00fd krok opakovat od za\u010d\u00e1tku. Zde lze vybrat typ spou\u0161t\u011bn\u00e9ho stroje, bezpe\u010dnostn\u00ed skupinu, obraz disku a mnoho dal\u0161\u00edch parametr\u016f. Tak\u00e9 je mo\u017en\u00e9 zadat u\u017eivatelsk\u00e1 data, kter\u00e1 budou nahr\u00e1na na v\u0161echny spu\u0161t\u011bn\u00e9 instance. V u\u017eivatelsk\u00fdch datech lze spou\u0161t\u011bt skripty, nap\u0159\u00edklad lze upravit obsah souboru <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/ecs-agent-config.html\">konfigurace ECS agenta<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Jedn\u00edm z nejd\u016fle\u017eit\u011bj\u0161\u00edch parametr\u016f konfigurace v r\u00e1mci tohoto \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. Pokud je tento parametr povolen, jakmile ECS obdr\u017e\u00ed sign\u00e1l, \u017ee je prostorov\u00fd instance odebr\u00e1n, p\u0159evede v\u0161echny \u00fakoly b\u011b\u017e\u00edc\u00ed na n\u011bm do stavu Draining. \u017d\u00e1dn\u00e9 nov\u00e9 \u00fakoly nebudou na tuto instanci p\u0159i\u0159azeny, pokud jsou \u00fakoly, kter\u00e9 se pr\u00e1v\u011b cht\u011bj\u00ed na n\u011bj rozvinout, zru\u0161eny. Po\u017eadavky z vyrovn\u00e1va\u010de zat\u00ed\u017een\u00ed tak\u00e9 p\u0159est\u00e1vaj\u00ed p\u0159ich\u00e1zet. Notifikace o odstran\u011bn\u00ed instance p\u0159ich\u00e1z\u00ed 2 minuty p\u0159ed skute\u010dn\u00fdm ud\u00e1lost\u00ed. Pokud tedy v\u00e1\u0161 servis neprov\u00e1d\u00ed \u00fakoly d\u00e9le ne\u017e 2 minuty a nic neuchov\u00e1v\u00e1 na disku, m\u016f\u017eete pou\u017e\u00edt prostorov\u00e9 instance bez ztr\u00e1ty dat.<\/p>\n<p><\/p>\n<p>Pokud jde o disk \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.\">umo\u017enil<\/a><\/noindex> pou\u017eit\u00ed Elastic File System (EFS) spolu s ECS, s touto sch\u00e9mou ani disk nen\u00ed p\u0159ek\u00e1\u017ekou, ale my jsme to nezkou\u0161eli, proto\u017ee v z\u00e1sad\u011b disk nepot\u0159ebujeme pro ukl\u00e1d\u00e1n\u00ed stavu. Ve v\u00fdchoz\u00edm nastaven\u00ed po obdr\u017een\u00ed SIGINT (odes\u00edl\u00e1 se v moment\u011b p\u0159echodu \u00fakolu do stavu Draining) budou v\u0161echny b\u011b\u017e\u00edc\u00ed \u00fakoly zastaveny b\u011bhem 30 sekund, i kdy\u017e se jim nepoda\u0159ilo dokon\u010dit, tuto dobu lze zm\u011bnit pomoc\u00ed parametru <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/ecs-agent-config.html\">ECS_CONTAINER_STOP_TIMEOUT<\/a><\/noindex>. Hlavn\u011b ho ned\u00e1vejte del\u0161\u00ed ne\u017e 2 minuty pro prostorov\u00e9 stroje.<\/p>\n<p><\/p>\n<h2 id=\"sozdanie-servisa\">Vytvo\u0159en\u00ed slu\u017eby<\/h2>\n<p><\/p>\n<p>P\u0159ejdeme p\u0159\u00edmo k vytvo\u0159en\u00ed popsan\u00e9 slu\u017eby. V pr\u016fb\u011bhu pop\u00ed\u0161u n\u011bkolik dal\u0161\u00edch u\u017eite\u010dn\u00fdch bod\u016f, kter\u00e9 nebyly zm\u00edn\u011bny v\u00fd\u0161e. Celkov\u011b se jedn\u00e1 o krokov\u00fd n\u00e1vod, ale z\u00e1kladn\u00ed nebo naopak velmi specifick\u00e9 p\u0159\u00edpady nebudu zva\u017eovat. V\u0161echny akce se prov\u00e1d\u011bj\u00ed ve vizu\u00e1ln\u00ed konzoli AWS, ale lze je replikovat programov\u011b pomoc\u00ed CloudFormation nebo Terraform. V Adapty pou\u017e\u00edv\u00e1me Terraform.<\/p>\n<p><\/p>\n<h3 id=\"ec2-launch-template\"><strong>\u0160ablona spu\u0161t\u011bn\u00ed EC2<\/strong><\/h3>\n<p><\/p>\n<p>V t\u00e9to slu\u017eb\u011b se vytv\u00e1\u0159\u00ed konfigurace stroj\u016f, kter\u00e9 budou pou\u017e\u00edv\u00e1ny. Spr\u00e1va \u0161ablon prob\u00edh\u00e1 v sekci EC2 -&gt; Instance -&gt; \u0160ablony spu\u0161t\u011bn\u00ed.<\/p>\n<p><\/p>\n<p><strong>Obr\u00e1zek Amazon machine (AMI)<\/strong> \u2014 uv\u00e1d\u00edme obraz disku, s kter\u00fdm budou spu\u0161t\u011bny v\u0161echny instance. Pro ECS v\u011bt\u0161inou doporu\u010dujeme pou\u017e\u00edvat optimalizovan\u00fd obraz od Amazonu. Ten je pravideln\u011b aktualizov\u00e1n a obsahuje v\u0161e pot\u0159ebn\u00e9 pro pr\u00e1ci ECS. Pro zji\u0161t\u011bn\u00ed aktu\u00e1ln\u00edho ID obrazu p\u0159ejd\u011bte na str\u00e1nku <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/ecs-optimized_AMI.html\">Optimalizovan\u00e9 AMIs pro Amazon ECS<\/a><\/noindex>, vyberte pou\u017e\u00edvan\u00fd region a zkop\u00edrujte ID AMI pro n\u011bj. Nap\u0159\u00edklad pro region us-east-1 je aktu\u00e1ln\u00ed k momentu psan\u00ed \u010dl\u00e1nku ID \u2014 <em>ami-00c7c1cf5bdc913ed<\/em>. Toto ID je t\u0159eba vlo\u017eit do polo\u017eky Ur\u010dit vlastn\u00ed hodnotu.<\/p>\n<p><\/p>\n<p><strong>Typ instance<\/strong> \u2014 vyberte typ instance. Zvolte ten, kter\u00fd nejl\u00e9pe vyhovuje va\u0161emu \u00fakolu.<\/p>\n<p><\/p>\n<p><strong>Kl\u00ed\u010dov\u00fd p\u00e1r (p\u0159ihl\u00e1\u0161en\u00ed)<\/strong> \u2014 ur\u010dujeme certifik\u00e1t, pomoc\u00ed kter\u00e9ho se lze p\u0159ipojit k instanci p\u0159es SSH, pokud je to pot\u0159eba.<\/p>\n<p><\/p>\n<p><strong>Nastaven\u00ed s\u00edt\u011b<\/strong> \u2014 specifikujte parametry s\u00edt\u011b. <strong>S\u00ed\u0165ov\u00e1 platforma<\/strong> ve v\u011bt\u0161in\u011b p\u0159\u00edpad\u016f by m\u011bla b\u00fdt Virtual Private Cloud (VPC). <strong>Bezpe\u010dnostn\u00ed skupiny<\/strong> \u2014 bezpe\u010dnostn\u00ed skupiny pro va\u0161e instance. Proto\u017ee budeme pou\u017e\u00edvat vyva\u017eova\u010d z\u00e1t\u011b\u017ee p\u0159ed instancemi, doporu\u010duji zde uv\u00e9st skupinu, kter\u00e1 povoluje p\u0159\u00edchoz\u00ed p\u0159ipojen\u00ed pouze z vyva\u017eova\u010de. To znamen\u00e1, \u017ee budete m\u00edt 2 bezpe\u010dnostn\u00ed skupiny, jednu pro vyva\u017eova\u010d, kter\u00e1 povoluje p\u0159\u00edchoz\u00ed spojen\u00ed odkudkoliv na porty 80 (http) a 443 (https), a druhou pro stroje, kter\u00e1 povoluje p\u0159\u00edchoz\u00ed spojen\u00ed na jak\u00e9koliv porty ze skupiny vyva\u017eova\u010de. Odchoz\u00ed spojen\u00ed v obou skupin\u00e1ch by m\u011blo b\u00fdt otev\u0159eno podle protokolu TCP na v\u0161echny porty na v\u0161echny adresy. M\u016f\u017eete omezit porty a adresy pro odchoz\u00ed spojen\u00ed, ale pak je t\u0159eba neust\u00e1le sledovat, abyste se pokusili p\u0159ipojit n\u011bkam na uzav\u0159en\u00fd port.<\/p>\n<p><\/p>\n<p><strong>\u00dalo\u017ei\u0161t\u011b (objemy)<\/strong> \u2014 specifikujte parametry disk\u016f pro stroje. Velikost disku nem\u016f\u017ee b\u00fdt men\u0161\u00ed ne\u017e ta, kter\u00e1 je uvedena v AMI, pro ECS Optimized \u2014 30 GiB.<\/p>\n<p><\/p>\n<p><strong>Pokro\u010dil\u00e9 detaily<\/strong> \u2014 ur\u010dujeme dal\u0161\u00ed parametry.<\/p>\n<p><\/p>\n<p><strong>Mo\u017enost n\u00e1kupu<\/strong> \u2014 chceme kupovat spottov\u00e9 instance. Chceme, ale zde tuto mo\u017enost neozna\u010d\u00edme, nastav\u00edme to ve skupin\u011b auto scaling, tam je v\u00edce voleb.<\/p>\n<p><\/p>\n<p><strong>IAM profil instance<\/strong> \u2014 uv\u00e1d\u00edme roli, s n\u00ed\u017e budou instance spu\u0161t\u011bny. Aby instance fungovaly v ECS, pot\u0159ebuj\u00ed opr\u00e1vn\u011bn\u00ed, kter\u00e1 obvykle pat\u0159\u00ed k roli <em>ecsInstanceRole<\/em>. V n\u011bkter\u00fdch p\u0159\u00edpadech m\u016f\u017ee b\u00fdt vytvo\u0159ena, pokud ne, zde <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/instance_IAM_role.html\">p\u0159\u00edru\u010dka<\/a><\/noindex> o tom, jak to ud\u011blat. Po vytvo\u0159en\u00ed ji uvedeme v \u0161ablon\u011b.<br \/>\nD\u00e1le n\u00e1sleduje mnoho parametr\u016f, v\u011bt\u0161inou je mo\u017en\u00e9 ponechat v\u00fdchoz\u00ed hodnoty, ale ka\u017ed\u00e1 z nich m\u00e1 jasn\u00fd popis. V\u017edy zahrnuji parametry EBS-optimized instance a T2\/T3 Unlimited, pokud se pou\u017e\u00edvaj\u00ed <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSEC2\/latest\/UserGuide\/burstable-performance-instances.html\">burstable<\/a><\/noindex> instance.<\/p>\n<p><\/p>\n<p><strong>U\u017eivatelsk\u00e1 data<\/strong> \u2014 uv\u00e1d\u00edme u\u017eivatelsk\u00e1 data. Budeme m\u011bnit soubor <code>\/etc\/ecs\/ecs.config<\/code>, ve kter\u00e9m le\u017e\u00ed konfigurace agenta ECS.<br \/>\nP\u0159\u00edklad toho, jak m\u016f\u017ee vypadat u\u017eivatelsk\u00e1 data:<\/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 parametr ur\u010duje, \u017ee instance pat\u0159\u00ed do clustera se zadan\u00fdm n\u00e1zvem, co\u017e znamen\u00e1, \u017ee tento cluster m\u016f\u017ee na tomto serveru um\u00eds\u0165ovat sv\u00e9 \u00fakoly. Zat\u00edm jsme nevytvo\u0159ili cluster, ale p\u0159i jeho vytv\u00e1\u0159en\u00ed budeme pou\u017e\u00edvat toto jm\u00e9no.<\/p>\n<p><\/p>\n<p><code>ECS_ENABLE_SPOT_INSTANCE_DRAINING=true<\/code> \u2014 parametr ur\u010duje, \u017ee p\u0159i obdr\u017een\u00ed sign\u00e1lu o vypnut\u00ed spotov\u00e9 instance, v\u0161echny \u00fakoly na n\u00ed mus\u00ed b\u00fdt p\u0159evedeny do stavu Draining.<\/p>\n<p><\/p>\n<p><code>ECS_CONTAINER_STOP_TIMEOUT=1m<\/code> \u2014 parametr ur\u010duje, \u017ee po obdr\u017een\u00ed sign\u00e1lu SIGINT maj\u00ed v\u0161echny \u00fakoly 1 minutu, ne\u017e budou zabity.<\/p>\n<p><\/p>\n<p><code>ECS_ENGINE_AUTH_TYPE=docker<\/code> \u2014 parametr ur\u010duje, \u017ee jako mechanismus autorizace se pou\u017e\u00edv\u00e1 docker sch\u00e9ma.<\/p>\n<p><\/p>\n<p><code>ECS_ENGINE_AUTH_DATA=...<\/code> \u2014 parametry p\u0159ipojen\u00ed k soukrom\u00e9mu kontejnerov\u00e9mu registru, kde jsou ulo\u017eeny va\u0161e Docker obrazy. Pokud je ve\u0159ejn\u00fd, nen\u00ed pot\u0159eba nic uv\u00e1d\u011bt.<\/p>\n<p><\/p>\n<p>V r\u00e1mci tohoto \u010dl\u00e1nku budu pou\u017e\u00edvat ve\u0159ejn\u00fd obraz z Docker Hub, proto nebude pot\u0159eba uv\u00e1d\u011bt parametry <code>ECS_ENGINE_AUTH_TYPE<\/code> a <code>ECS_ENGINE_AUTH_DATA<\/code> nen\u00ed nutn\u00e9.<\/p>\n<p><\/p>\n<p><strong>U\u017eite\u010dn\u00e9 v\u011bd\u011bt<\/strong>: doporu\u010duje se pravideln\u011b aktualizovat AMI, proto\u017ee v nov\u00fdch verz\u00edch se aktualizuj\u00ed verze Dockeru, Linuxu, ECS agenta a dal\u0161\u00edch. Abychom na to nezapomn\u011bli, m\u016f\u017eeme <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/ECS-AMI-SubscribeTopic.html\">nastavit upozorn\u011bn\u00ed<\/a><\/noindex> o vyd\u00e1n\u00ed nov\u00fdch verz\u00ed. M\u016f\u017eete dost\u00e1vat upozorn\u011bn\u00ed na email a aktualizovat ru\u010dn\u011b, nebo m\u016f\u017eete napsat Lambda funkci, kter\u00e1 automaticky vytvo\u0159\u00ed novou verzi Launch Template s aktualizovan\u00fdm AMI.<\/p>\n<p><\/p>\n<h3 id=\"ec2-auto-scaling-group\"><strong>EC2 Auto Scaling Group<\/strong><\/h3>\n<p><\/p>\n<p>Auto Scaling Group je zodpov\u011bdn\u00e1 za spu\u0161t\u011bn\u00ed a \u0161k\u00e1lov\u00e1n\u00ed instanc\u00ed. Spr\u00e1va skupin se prov\u00e1d\u00ed v \u010d\u00e1sti EC2 -&gt; Auto Scaling -&gt; Auto Scaling Groups.<\/p>\n<p><\/p>\n<p><strong>\u0160ablona pro spu\u0161t\u011bn\u00ed<\/strong> \u2014 vyb\u00edr\u00e1me vytvo\u0159enou v p\u0159edchoz\u00edm kroku \u0161ablonu. Verzi ponech\u00e1me v\u00fdchoz\u00ed.<\/p>\n<p><\/p>\n<p><strong>Mo\u017enosti n\u00e1kupu a typy instanc\u00ed<\/strong> \u2014 uv\u00e1d\u00edme typy instanc\u00ed pro cluster. Adhere to launch template pou\u017e\u00edv\u00e1 typ instance ze \u0161ablony. Combine purchase options and instance types umo\u017e\u0148uje flexibiln\u011b nastavit typy instanc\u00ed. Pou\u017eijeme jej.<\/p>\n<p><\/p>\n<p><strong>Voliteln\u00fd z\u00e1klad On-Demand<\/strong> \u2014 po\u010det b\u011b\u017en\u00fdch, ne spotov\u00fdch instanc\u00ed, kter\u00e9 budou v\u017edy aktivn\u00ed.<\/p>\n<p><\/p>\n<p><strong>Procento nad z\u00e1kladn\u00edm On-Demand<\/strong> \u2014 procentu\u00e1ln\u00ed pom\u011br b\u011b\u017en\u00fdch a spotov\u00fdch instanc\u00ed, 50-50 bude rozd\u011bleno rovnom\u011brn\u011b, 20-80 znamen\u00e1, \u017ee k ka\u017ed\u00e9 b\u011b\u017en\u00e9 instanci budou p\u0159id\u00e1ny 4 spotov\u00e9. V r\u00e1mci tohoto p\u0159\u00edkladu uvedu 50-50, ale ve skute\u010dnosti nej\u010dast\u011bji d\u011bl\u00e1me 20-80, v n\u011bkter\u00fdch p\u0159\u00edpadech 0-100.<\/p>\n<p><\/p>\n<p><strong>Typy instanc\u00ed<\/strong> \u2014 zde m\u016f\u017eete uv\u00e9st dal\u0161\u00ed typy instanc\u00ed, kter\u00e9 budou pou\u017eity ve clusterech. Nikdy jsme to nepou\u017e\u00edvali, proto\u017ee tomu p\u0159\u00edli\u0161 nerozum\u00edm. Mo\u017en\u00e1 se to t\u00fdk\u00e1 limit\u016f na konkr\u00e9tn\u00ed typy instanc\u00ed, ale ty se snadno zvy\u0161uj\u00ed prost\u0159ednictv\u00edm podpory. Pokud zn\u00e1te vyu\u017eit\u00ed, r\u00e1d si p\u0159e\u010dtu v koment\u00e1\u0159\u00edch)<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvo\u0159en\u00ed \u0161k\u00e1lovateln\u00e9ho API na spotov\u00fdch instanc\u00edch AWS\" src=\"\/wp-content\/uploads\/2020\/07\/c1ee742d2059674f39a53cac6b9f2347.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>S\u00ed\u0165<\/strong> \u2014 nastaven\u00ed s\u00edt\u011b, vyb\u00edr\u00e1te VPC a subnety pro stroje, v drtiv\u00e9 v\u011bt\u0161in\u011b p\u0159\u00edpad\u016f byste m\u011bli zvolit v\u0161echny dostupn\u00e9 subnety.<\/p>\n<p><\/p>\n<p><strong>Z\u00e1t\u011b\u017eov\u00e9 vyva\u017eov\u00e1n\u00ed<\/strong> \u2014 nastaven\u00ed vyrovn\u00e1va\u010de z\u00e1t\u011b\u017ee, ale to ud\u011bl\u00e1me zvl\u00e1\u0161\u0165, tady nic nem\u011bn\u00edme. <strong>Kontroly stavu<\/strong> budou tak\u00e9 nastaveny pozd\u011bji.<\/p>\n<p><\/p>\n<p><strong>Velikost skupiny<\/strong> \u2014 uv\u00e1d\u00edme limity na po\u010det stroj\u016f v clusterech a po\u017eadovan\u00fd po\u010det stroj\u016f p\u0159i spu\u0161t\u011bn\u00ed. Po\u010det stroj\u016f v clusterech nikdy nebude men\u0161\u00ed ne\u017e minim\u00e1ln\u011b uveden\u00fd a v\u011bt\u0161\u00ed ne\u017e maxim\u00e1ln\u00ed, i kdy\u017e podle metrik by m\u011blo doj\u00edt k \u0161k\u00e1lov\u00e1n\u00ed.<\/p>\n<p><\/p>\n<p><strong>Politiky \u0161k\u00e1lov\u00e1n\u00ed<\/strong> \u2014 parametry \u0161k\u00e1lov\u00e1n\u00ed, ale budeme \u0161k\u00e1lovat na z\u00e1klad\u011b spu\u0161t\u011bn\u00fdch ECS \u00faloh, proto nastav\u00edme \u0161k\u00e1lov\u00e1n\u00ed pozd\u011bji.<\/p>\n<p><\/p>\n<p><strong>Ochrana proti \u0161k\u00e1lov\u00e1n\u00ed instanc\u00ed<\/strong> \u2014 ochrana instanc\u00ed p\u0159ed odstran\u011bn\u00edm p\u0159i \u0161k\u00e1lov\u00e1n\u00ed dol\u016f. Zapneme, aby ASG neodstranila stroj, na kter\u00e9m jsou aktivn\u00ed \u00falohy. Ochranu vypneme pro instance, na kter\u00fdch nejsou \u00falohy, to bude ECS Capacity Provider.<\/p>\n<p><\/p>\n<p><strong>P\u0159idat \u0161t\u00edtky<\/strong> \u2014 m\u016f\u017eete uv\u00e9st \u0161t\u00edtky pro instance (pro to mus\u00ed b\u00fdt za\u0161krtnuta volba Tag new instances). Doporu\u010duji uv\u00e9st \u0161t\u00edtek Name, pak budou v\u0161echny instance, kter\u00e9 se spou\u0161t\u00ed v r\u00e1mci skupiny, m\u00edt stejn\u00e9 jm\u00e9no, co\u017e bude pohodln\u00e9 p\u0159i sledov\u00e1n\u00ed v konzoli.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvo\u0159en\u00ed \u0161k\u00e1lovateln\u00e9ho API na spotov\u00fdch instanc\u00edch AWS\" src=\"\/wp-content\/uploads\/2020\/07\/61fa0ccb38c11f61431db0938140efb7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Po vytvo\u0159en\u00ed skupiny ji otev\u0159ete a p\u0159ejd\u011bte do sekce Advanced configurations, pro\u010d nejsou p\u0159i vytv\u00e1\u0159en\u00ed v konzoli vid\u011bt v\u0161echny mo\u017enosti.<\/p>\n<p><\/p>\n<p><strong>Politiky ukon\u010den\u00ed<\/strong> \u2014 pravidla, kter\u00e1 se zohled\u0148uj\u00ed p\u0159i odstra\u0148ov\u00e1n\u00ed instanc\u00ed. Aplikuj\u00ed se v po\u0159ad\u00ed. Obvykle pou\u017e\u00edv\u00e1me takov\u00e9, jako jsou na obr\u00e1zku n\u00ed\u017ee. Nejprve se odstra\u0148uj\u00ed instance s nejstar\u0161\u00edm Launch Template (nap\u0159\u00edklad pokud jsme aktualizovali AMI, vytvo\u0159ila se n\u00e1m nov\u00e1 verze, ale v\u0161echny instance na ni stihly p\u0159ej\u00edt). Pak se vyb\u00edraj\u00ed instance, kter\u00e9 jsou nejbl\u00ed\u017ee k n\u00e1sleduj\u00edc\u00edmu vypo\u010d\u00edtan\u00e9mu hodin\u011b pro billing. A d\u00e1le se vyb\u00edraj\u00ed nejstar\u0161\u00ed podle data spu\u0161t\u011bn\u00ed.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvo\u0159en\u00ed \u0161k\u00e1lovateln\u00e9ho API na spotov\u00fdch instanc\u00edch AWS\" src=\"\/wp-content\/uploads\/2020\/07\/8236624fe08a03f36aedc7665e18b060.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>U\u017eite\u010dn\u00e9 v\u011bd\u011bt<\/strong>: pro aktualizaci v\u0161ech stroj\u016f v clusterech, pohodln\u011b pou\u017eijte <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/autoscaling\/ec2\/userguide\/asg-instance-refresh.html\">Obnova instanc\u00ed<\/a><\/noindex>. Pokud to zkombinujete s Lambda funkc\u00ed z p\u0159edchoz\u00edho kroku, budete m\u00edt pln\u011b automatizovan\u00fd syst\u00e9m aktualizace instanc\u00ed. P\u0159ed aktualizac\u00ed v\u0161ech stroj\u016f je nutn\u00e9 vypnout ochranu proti zmen\u0161en\u00ed instance pro v\u0161echny instance ve skupin\u011b. Ne nastaven\u00ed ve skupin\u011b, ale pr\u00e1v\u011b ochrana na samotn\u00fdch stroj\u00edch, to se prov\u00e1d\u00ed na z\u00e1lo\u017ece Spr\u00e1va instanc\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>Vyva\u017eova\u010d se vytv\u00e1\u0159\u00ed v sekci EC2 \u2192 Vyva\u017eov\u00e1n\u00ed z\u00e1t\u011b\u017ee \u2192 Vyva\u017eova\u010de. Budeme pou\u017e\u00edvat Application Load Balancer, srovn\u00e1n\u00ed r\u016fzn\u00fdch typ\u016f vyva\u017eova\u010d\u016f si m\u016f\u017eete p\u0159e\u010d\u00edst na <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/elasticloadbalancing\/features\/#compare\">str\u00e1nce slu\u017eby<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><strong>Poslucha\u010di<\/strong> \u2014 m\u00e1 smysl nastavit porty 80 a 443 a prov\u00e9st p\u0159esm\u011brov\u00e1n\u00ed z 80 na 443 pozd\u011bji pomoc\u00ed pravidel vyva\u017eova\u010de.<\/p>\n<p><\/p>\n<p><strong>Z\u00f3ny dostupnosti<\/strong> \u2014 v mnoha p\u0159\u00edpadech vyb\u00edr\u00e1me v\u0161echny z\u00f3ny dostupnosti.<\/p>\n<p><\/p>\n<p><strong>Nastavit bezpe\u010dnostn\u00ed nastaven\u00ed<\/strong> \u2014 zde se uv\u00e1d\u00ed SSL certifik\u00e1t pro vyva\u017eova\u010d, nejvhodn\u011bj\u0161\u00ed variantou je <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/acm\/latest\/userguide\/gs-acm-request-public.html\">vytvo\u0159it certifik\u00e1t<\/a><\/noindex> v ACM. O rozd\u00edlech <strong>Bezpe\u010dnostn\u00ed politika<\/strong> si m\u016f\u017eete p\u0159e\u010d\u00edst na <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/elasticloadbalancing\/latest\/classic\/elb-security-policy-table.html\">dokumentaci<\/a><\/noindex>, m\u016f\u017eete nechat v\u00fdchoz\u00ed vybran\u00fd <code>ELBSecurityPolicy-2016-08<\/code>. Po vytvo\u0159en\u00ed vyva\u017eova\u010de uvid\u00edte jeho <strong>DNS n\u00e1zev<\/strong>, na kter\u00fd je t\u0159eba nastavit CNAME pro va\u0161i dom\u00e9nu. Nap\u0159\u00edklad, takto to vypad\u00e1 v Cloudflare.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvo\u0159en\u00ed \u0161k\u00e1lovateln\u00e9ho API na spotov\u00fdch instanc\u00edch AWS\" src=\"\/wp-content\/uploads\/2020\/07\/899ff0f30df4117fc0ccd91af135def3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Skupina zabezpe\u010den\u00ed<\/strong> \u2014 vytv\u00e1\u0159\u00edme nebo vyb\u00edr\u00e1me skupinu zabezpe\u010den\u00ed pro vyva\u017eova\u010d, podrobnosti o tom jsem psal o n\u011bco v\u00fd\u0161e v sekci EC2 Launch Template \u2192 S\u00ed\u0165ov\u00e1 nastaven\u00ed.<\/p>\n<p><\/p>\n<p><strong>C\u00edlov\u00e1 skupina<\/strong> \u2014 vytv\u00e1\u0159\u00edme skupinu, kter\u00e1 odpov\u00edd\u00e1 za sm\u011brov\u00e1n\u00ed po\u017eadavk\u016f z vyva\u017eova\u010de na stroje a kontroluje jejich dostupnost, aby je nahradila v p\u0159\u00edpad\u011b probl\u00e9m\u016f. <strong>Typ c\u00edle<\/strong> mus\u00ed b\u00fdt Instance, <strong>Protokol<\/strong> a <strong>Port<\/strong> jak\u00e9koli, pokud pou\u017e\u00edv\u00e1te HTTPS pro komunikaci mezi vyva\u017eova\u010dem a instancemi, je pot\u0159eba na n\u011b nahr\u00e1t certifik\u00e1t. V r\u00e1mci tohoto p\u0159\u00edkladu to d\u011blat nebudeme, jednodu\u0161e nech\u00e1me port 80.<\/p>\n<p><\/p>\n<p><strong>Kontroly stavu<\/strong> \u2014 parametry kontroly funk\u010dnosti slu\u017eby. Ve skute\u010dn\u00e9 slu\u017eb\u011b by to m\u011bl b\u00fdt samostatn\u00fd po\u017eadavek, kter\u00fd realizuje d\u016fle\u017eit\u00e9 \u010d\u00e1sti obchodn\u00ed logiky, v r\u00e1mci tohoto p\u0159\u00edkladu bych ponechal nastaven\u00ed podle v\u00fdchoz\u00edho stavu. D\u00e1le m\u016f\u017eete vybrat interval po\u017eadavk\u016f, \u010dasov\u00fd limit, k\u00f3dy \u00fasp\u011b\u0161n\u00fdch odpov\u011bd\u00ed atd. V na\u0161em p\u0159\u00edkladu uvedeme k\u00f3dy \u00fasp\u011bchu 200-399, proto\u017ee Docker obraz, kter\u00fd bude pou\u017eit, vrac\u00ed k\u00f3d 304.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvo\u0159en\u00ed \u0161k\u00e1lovateln\u00e9ho API na spotov\u00fdch instanc\u00edch AWS\" src=\"\/wp-content\/uploads\/2020\/07\/e295ab1c3bf1dfe13c76b4942a31c7ee.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Registrovat c\u00edle<\/strong> \u2014 zde se vyb\u00edraj\u00ed stroje pro skupinu, ale v na\u0161em p\u0159\u00edpad\u011b se t\u00edm zab\u00fdv\u00e1 ECS, tak\u017ee tento krok jednodu\u0161e p\u0159esko\u010d\u00edme.<\/p>\n<p><\/p>\n<p><strong>U\u017eite\u010dn\u00e9 v\u011bd\u011bt<\/strong>: na \u00farovni vyva\u017eova\u010de m\u016f\u017eete zapnout protokoly, kter\u00e9 se budou ukl\u00e1dat do S3 na ur\u010den\u00e9m m\u00edst\u011b <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/elasticloadbalancing\/latest\/application\/load-balancer-access-logs.html\">ve form\u00e1tu<\/a><\/noindex>. Odtud je mo\u017en\u00e9 je exportovat do extern\u00edch slu\u017eeb pro anal\u00fdzu, nebo prov\u00e1d\u011bt SQL dotazy p\u0159\u00edmo na datech v S3 pomoc\u00ed <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/athena\/latest\/ug\/application-load-balancer-logs.html\">Athena<\/a><\/noindex>. To je pohodln\u00e9 a funguje to bez n\u011bjak\u00e9ho dal\u0161\u00edho k\u00f3du. Tak\u00e9 doporu\u010duji nastavit odstra\u0148ov\u00e1n\u00ed log\u016f z bucketu S3 po uplynut\u00ed stanoven\u00e9ho \u010dasov\u00e9ho obdob\u00ed.<\/p>\n<p><\/p>\n<h3 id=\"ecs-task-definition\">ECS Task Definition<\/h3>\n<p><\/p>\n<p>Na p\u0159edchoz\u00edch kroc\u00edch jsme vytvo\u0159ili v\u0161e, co se t\u00fdk\u00e1 infrastruktury slu\u017eby, nyn\u00ed p\u0159ech\u00e1z\u00edme k popisu kontejner\u016f, kter\u00e9 budeme spou\u0161t\u011bt. To se prov\u00e1d\u00ed v sekci ECS \u2192 Task Definitions.<\/p>\n<p><\/p>\n<p><strong>Typ kompatibility spu\u0161t\u011bn\u00ed<\/strong> \u2014 vyb\u00edr\u00e1me EC2.<\/p>\n<p><\/p>\n<p><strong>IAM role pro prov\u00e1d\u011bn\u00ed \u00faloh<\/strong> \u2014 vyb\u00edr\u00e1me <code>ecsTaskExecutionRole<\/code>. Pomoc\u00ed n\u00ed se zapisuj\u00ed logy, poskytuje se p\u0159\u00edstup k tajn\u00fdm prom\u011bnn\u00fdm atd.<\/p>\n<p><\/p>\n<p>V sekci Container Definitions klikneme na P\u0159idat kontejner.<\/p>\n<p><\/p>\n<p><strong>Obr\u00e1zek<\/strong> \u2014 odkaz na obraz s k\u00f3dem projektu, v r\u00e1mci tohoto p\u0159\u00edkladu budu pou\u017e\u00edvat ve\u0159ejn\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\u011bti<\/strong> \u2014 limity pam\u011bti pro kontejner. <strong>Tvrd\u00fd limit<\/strong> \u2014 tvrd\u00fd limit, pokud kontejner p\u0159ekro\u010d\u00ed uvedenou hodnotu, provede se p\u0159\u00edkaz docker kill, kontejner okam\u017eit\u011b um\u0159e. <strong>M\u011bkk\u00fd limit<\/strong> \u2014 m\u011bkk\u00fd limit, kontejner m\u016f\u017ee p\u0159ekro\u010dit uvedenou hodnotu, ale p\u0159i umis\u0165ov\u00e1n\u00ed \u00faloh na stroje se tento parametr zohled\u0148uje. Nap\u0159\u00edklad, pokud m\u00e1 stroj 4 GiB opera\u010dn\u00ed pam\u011bti a m\u011bkk\u00fd limit kontejneru je 2048 MiB, pak mohou na tomto stroji b\u011b\u017eet maxim\u00e1ln\u011b 2 \u00falohy s t\u00edmto kontejnerem. Ve skute\u010dnosti je 4 GiB opera\u010dn\u00ed pam\u011bti o n\u011bco m\u00e9n\u011b ne\u017e 4096 MiB, to lze zjistit na kart\u011b ECS Instances v clustru. M\u011bkk\u00fd limit nem\u016f\u017ee b\u00fdt vy\u0161\u0161\u00ed ne\u017e tvrd\u00fd limit. Je d\u016fle\u017eit\u00e9 pochopit, \u017ee pokud je v jedn\u00e9 \u00faloze n\u011bkolik kontejner\u016f, jejich limity se s\u010d\u00edtaj\u00ed.<\/p>\n<p><\/p>\n<p><strong>P\u0159esm\u011brov\u00e1n\u00ed port\u016f<\/strong> \u2014 v <strong>Hostitelsk\u00fd port<\/strong> uv\u00e1d\u00edme 0, to znamen\u00e1, \u017ee port bude p\u0159id\u011blov\u00e1n dynamicky, jeho sledov\u00e1n\u00ed zajist\u00ed Target Group. <strong>Port kontejneru<\/strong> \u2014 port, na kter\u00e9m b\u011b\u017e\u00ed va\u0161e aplikace, \u010dasto je nastavov\u00e1n v p\u0159\u00edkazu pro spu\u0161t\u011bn\u00ed nebo ur\u010den v k\u00f3du va\u0161\u00ed aplikace, Dockerfile atd. Pro n\u00e1\u0161 p\u0159\u00edklad pou\u017eijeme 3000, proto\u017ee je uveden v <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bitnami\/bitnami-docker-node\/blob\/master\/example\/Dockerfile\">Dockerfile<\/a><\/noindex> pou\u017e\u00edvan\u00e9m obraze.<\/p>\n<p><\/p>\n<p><strong>Kontrola zdrav\u00ed<\/strong> \u2014 parametry kontroly provozuschopnosti kontejneru, nem\u011bli byste je zam\u011b\u0148ovat s t\u011bmi, kter\u00e9 jsou nastaveny v Target Group.<\/p>\n<p><\/p>\n<p><strong>Prost\u0159ed\u00ed<\/strong> \u2014 nastaven\u00ed prost\u0159ed\u00ed. <strong>CPU jednotky<\/strong> \u2014 podobn\u00e9 jako Memory limits, ale jde o procesor. Ka\u017ed\u00e9 j\u00e1dro procesoru p\u0159edstavuje 1024 jednotek, tak\u017ee pokud m\u00e1 server dvouj\u00e1drov\u00fd procesor a kontejner m\u00e1 nastavenou hodnotu 512, pak je mo\u017en\u00e9 na jednom serveru spustit 4 \u00falohy s t\u00edmto kontejnerem. Jednotky CPU v\u017edy odpov\u00eddaj\u00ed po\u010dtu jader, nemohou b\u00fdt o n\u011bco men\u0161\u00ed, jak je tomu u pam\u011bti.<\/p>\n<p><\/p>\n<p><strong>P\u0159\u00edkaz<\/strong> \u2014 p\u0159\u00edkaz pro spu\u0161t\u011bn\u00ed slu\u017eby uvnit\u0159 kontejneru, v\u0161echny parametry jsou uvedeny \u010d\u00e1rkou. M\u016f\u017ee to b\u00fdt gunicorn, npm atd. Pokud nen\u00ed uvedeno, pou\u017eije se hodnota direktivy CMD z Dockerfile. Uv\u00e1d\u00edme <code>npm,start<\/code>.<\/p>\n<p><\/p>\n<p><strong>Prom\u011bnn\u00e9 prost\u0159ed\u00ed<\/strong> \u2014 prom\u011bnn\u00e9 prost\u0159ed\u00ed kontejneru. Mohou to b\u00fdt bu\u010f jednoduch\u00e9 textov\u00e9 \u00fadaje, nebo tajn\u00e9 prom\u011bnn\u00e9 z <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/specifying-sensitive-data-secrets.html\">Secrets Manager<\/a><\/noindex> nebo <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>\u00dalo\u017ei\u0161t\u011b a protokolov\u00e1n\u00ed<\/strong> \u2014 zde nastav\u00edme protokolov\u00e1n\u00ed v CloudWatch Logs (slu\u017eba pro logy od AWS). Sta\u010d\u00ed za\u0161krtnout pol\u00ed\u010dko Auto-configure CloudWatch Logs. Po vytvo\u0159en\u00ed Task Definition se automaticky vytvo\u0159\u00ed skupina log\u016f v CloudWatch. Ve v\u00fdchoz\u00edm nastaven\u00ed jsou logy v n\u00ed uchov\u00e1v\u00e1ny neomezen\u011b, doporu\u010duji zm\u011bnit Retention period z Never Expire na po\u017eadovanou dobu. To se prov\u00e1d\u00ed v CloudWatch Log groups, je t\u0159eba kliknout na aktu\u00e1ln\u00ed obdob\u00ed a vybrat nov\u00e9.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvo\u0159en\u00ed \u0161k\u00e1lovateln\u00e9ho API na spotov\u00fdch instanc\u00edch 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>P\u0159ejdeme do sekce ECS \u2192 Clusters, abychom vytvo\u0159ili cluster. Jako \u0161ablonu vybereme EC2 Linux + Networking.<\/p>\n<p><\/p>\n<p><strong>N\u00e1zev clusteru<\/strong> \u2014 velmi d\u016fle\u017eit\u00e9, d\u00e1me zde stejn\u00e9 jm\u00e9no, jako je uvedeno v Launch Template v parametru <code>ECS_CLUSTER<\/code>, v na\u0161em p\u0159\u00edpad\u011b \u2014 <code>DemoApiClusterProd<\/code>. Za\u0161krtn\u011bte pol\u00ed\u010dko Create an empty cluster. Voliteln\u011b m\u016f\u017eete zapnout Container Insights, abyste mohli sledovat metriky podle slu\u017eeb v CloudWatch. Pokud jste v\u0161echno ud\u011blali spr\u00e1vn\u011b, v sekci ECS Instances uvid\u00edte stroje, kter\u00e9 byly vytvo\u0159eny ve skupin\u011b Auto Scaling.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvo\u0159en\u00ed \u0161k\u00e1lovateln\u00e9ho API na spotov\u00fdch instanc\u00edch AWS\" src=\"\/wp-content\/uploads\/2020\/07\/cd70062c9783ae359a2b27cbfc66cbe3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u0159ejdeme na z\u00e1lo\u017eku <strong>Capacity Providers<\/strong> a vytvo\u0159\u00edme nov\u00fd. P\u0159ipom\u00edn\u00e1m, \u017ee je pot\u0159eba pro \u0159\u00edzen\u00ed vytv\u00e1\u0159en\u00ed a vyp\u00edn\u00e1n\u00ed stroj\u016f v z\u00e1vislosti na po\u010dtu b\u011b\u017e\u00edc\u00edch \u00faloh ECS. Je d\u016fle\u017eit\u00e9 poznamenat, \u017ee poskytovatel m\u016f\u017ee b\u00fdt v\u00e1z\u00e1n pouze na jednu skupinu.<\/p>\n<p><\/p>\n<p><strong>Auto Scaling group<\/strong> \u2014 vyb\u00edr\u00e1me d\u0159\u00edve vytvo\u0159enou skupinu.<\/p>\n<p><\/p>\n<p><strong>Managed scaling<\/strong> \u2014 zapneme, aby poskytovatel mohl \u0161k\u00e1lovat slu\u017ebu.<\/p>\n<p><\/p>\n<p><strong>C\u00edlov\u00e1 kapacita %<\/strong> \u2014 jak\u00fd procento zat\u00ed\u017een\u00ed stroj\u016f \u00fakoly pot\u0159ebujeme. Pokud nastav\u00edme 100 %, v\u0161echny stroje budou v\u017edy obsazen\u00e9 pracovn\u00edmi \u00fakoly. Pokud nastav\u00edme 50 %, polovina stroj\u016f bude v\u017edy voln\u00e1. V takov\u00e9m p\u0159\u00edpad\u011b, pokud dojde k n\u00e1hl\u00e9mu n\u00e1r\u016fstu z\u00e1t\u011b\u017ee, nov\u00e9 \u00fakoly se okam\u017eit\u011b dostanou na voln\u00e9 stroje, ani\u017e bychom museli \u010dekat na nasazen\u00ed instanc\u00ed.<\/p>\n<p><\/p>\n<p><strong>Ochrana \u0159\u00edzen\u00e9ho ukon\u010den\u00ed<\/strong> \u2014 zapnuto, tento parametr umo\u017e\u0148uje poskytovateli odstranit ochranu instanc\u00ed proti smaz\u00e1n\u00ed. K tomu doch\u00e1z\u00ed, kdy\u017e na stroji nejsou aktivn\u00ed \u00fakoly a umo\u017e\u0148uje Target capacity %.<\/p>\n<p><\/p>\n<h3 id=\"ecs-service-i-nastroyka-masshtabirovaniya\">Slu\u017eba ECS a nastaven\u00ed \u0161k\u00e1lov\u00e1n\u00ed<\/h3>\n<p><\/p>\n<p>Posledn\u00ed krok :) Abyste vytvo\u0159ili slu\u017ebu, mus\u00edte p\u0159ej\u00edt do d\u0159\u00edve vytvo\u0159en\u00e9ho clusteru na z\u00e1lo\u017eku Slu\u017eby.<\/p>\n<p><\/p>\n<p><strong>Typ spu\u0161t\u011bn\u00ed<\/strong> \u2014 je t\u0159eba kliknout na P\u0159epnout na strategii poskytovatele kapacity a vybrat d\u0159\u00edve vytvo\u0159en\u00e9ho poskytovatele.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvo\u0159en\u00ed \u0161k\u00e1lovateln\u00e9ho API na spotov\u00fdch instanc\u00edch AWS\" src=\"\/wp-content\/uploads\/2020\/07\/9d9dfdd8e333cce24bfb048ac84097e4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Definice \u00fakolu<\/strong> \u2014 vyb\u00edr\u00e1me d\u0159\u00edve vytvo\u0159enou definici \u00fakolu a jej\u00ed revizi.<\/p>\n<p><\/p>\n<p><strong>N\u00e1zev slu\u017eby<\/strong> \u2014 abychom se neztratili, v\u017edy uv\u00e1d\u00edme stejn\u00fd jako definici \u00fakolu.<\/p>\n<p><\/p>\n<p><strong>Typ slu\u017eby<\/strong> \u2014 v\u017edy Replica.<\/p>\n<p><\/p>\n<p><strong>Po\u010det \u00fakol\u016f<\/strong> \u2014 po\u017eadovan\u00fd po\u010det aktivn\u00edch \u00fakol\u016f ve slu\u017eb\u011b. Tento parametr je \u0159\u00edzen \u0161k\u00e1lov\u00e1n\u00edm, ale stejn\u011b ho mus\u00edme uv\u00e9st.<\/p>\n<p><\/p>\n<p><strong>Minim\u00e1ln\u00ed zdrav\u00fd procento<\/strong> a <strong>Maxim\u00e1ln\u00ed procento<\/strong> \u2014 ur\u010duj\u00ed chov\u00e1n\u00ed \u00fakol\u016f p\u0159i nasazen\u00ed. V\u00fdchoz\u00ed hodnoty 100 a 200 nazna\u010duj\u00ed, \u017ee b\u011bhem nasazen\u00ed se po\u010det \u00fakol\u016f zdvojn\u00e1sob\u00ed a pot\u00e9 se vr\u00e1t\u00ed na po\u017eadovan\u00fd. Pokud m\u00e1te 1 \u00fakol, min=0 a max=100, pak b\u011bhem nasazen\u00ed bude zru\u0161en a pot\u00e9 bude spu\u0161t\u011bn nov\u00fd, co\u017e znamen\u00e1 v\u00fdpadek. Pokud pracuje 1 \u00fakol, min=50, max=150, pak nasazen\u00ed v\u016fbec nenastane, proto\u017ee 1 \u00fakol nelze rozd\u011blit na polovinu nebo zv\u00fd\u0161it na polovinu.<\/p>\n<p><\/p>\n<p><strong>Typ nasazen\u00ed<\/strong> \u2014 ponech\u00e1v\u00e1me Rolling update.<\/p>\n<p><\/p>\n<p><strong>\u0160ablony um\u00edst\u011bn\u00ed<\/strong> \u2014 pravidla um\u00edst\u011bn\u00ed \u00fakol\u016f na stroj\u00edch. V\u00fdchoz\u00ed nastaven\u00ed je AZ Balanced Spread \u2014 to znamen\u00e1, \u017ee ka\u017ed\u00fd nov\u00fd \u00fakol bude um\u00edst\u011bn na novou instanci, dokud se nezv\u00fd\u0161\u00ed stroje ve v\u0161ech dostupnostn\u00edch z\u00f3n\u00e1ch. Obvykle d\u011bl\u00e1me BinPack \u2014 CPU a Spread \u2014 AZ, s touto politikou se \u00fakoly um\u00eds\u0165uj\u00ed co nejhust\u011bji na jeden stroj podle CPU. P\u0159i pot\u0159eb\u011b vytvo\u0159en\u00ed nov\u00e9ho stroje se vytvo\u0159\u00ed v nov\u00e9 dostupnostn\u00ed z\u00f3n\u011b.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvo\u0159en\u00ed \u0161k\u00e1lovateln\u00e9ho API na spotov\u00fdch instanc\u00edch AWS\" src=\"\/wp-content\/uploads\/2020\/07\/6430bdf046fc5b970e0afbbf0d9ef65e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Typ vyv\u00e1\u017een\u00ed zat\u00ed\u017een\u00ed<\/strong> \u2014 vyb\u00edr\u00e1me Application Load Balancer.<\/p>\n<p><\/p>\n<p><strong>IAM role slu\u017eby<\/strong> \u2014 vyb\u00edr\u00e1me <code>ecsServiceRole<\/code>.<\/p>\n<p><\/p>\n<p><strong>N\u00e1zev vyv\u00e1\u017een\u00ed zat\u00ed\u017een\u00ed<\/strong> \u2014 vyb\u00edr\u00e1me d\u0159\u00edve vytvo\u0159en\u00fd vyva\u017eova\u010d.<\/p>\n<p><\/p>\n<p><strong>Doba grace pro kontrolu zdrav\u00ed<\/strong> \u2014 pauza p\u0159ed proveden\u00edm kontrol zdrav\u00ed po nasazen\u00ed nov\u00e9ho \u00fakolu, obvykle nastavujeme 60 sekund.<\/p>\n<p><\/p>\n<p><strong>Kontejner pro vyva\u017eov\u00e1n\u00ed zat\u00ed\u017een\u00ed<\/strong> \u2014 v polo\u017ece N\u00e1zev c\u00edlov\u00e9 skupiny vybereme d\u0159\u00edve vytvo\u0159enou skupinu a v\u0161e se automaticky vypln\u00ed.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvo\u0159en\u00ed \u0161k\u00e1lovateln\u00e9ho API na spotov\u00fdch instanc\u00edch AWS\" src=\"\/wp-content\/uploads\/2020\/07\/c067868ff73c25c3d9b65e02be64f5c9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Auto \u0161k\u00e1lov\u00e1n\u00ed slu\u017eby<\/strong> \u2014 parametry \u0161k\u00e1lov\u00e1n\u00ed slu\u017eby. Vybereme Konfigurovat automatick\u00e9 \u0161k\u00e1lov\u00e1n\u00ed slu\u017eby pro \u00fapravu po\u017eadovan\u00e9ho po\u010dtu va\u0161\u00ed slu\u017eby. Nastav\u00edme minim\u00e1ln\u00ed a maxim\u00e1ln\u00ed po\u010det \u00faloh p\u0159i \u0161k\u00e1lov\u00e1n\u00ed.<\/p>\n<p><\/p>\n<p><strong>IAM role pro automatick\u00e9 \u0161k\u00e1lov\u00e1n\u00ed slu\u017eby<\/strong> \u2014 vyb\u00edr\u00e1me <code>AWSServiceRoleForApplicationAutoScaling_ECSService<\/code>.<\/p>\n<p><\/p>\n<p><strong>Automatick\u00e9 politiky \u0161k\u00e1lov\u00e1n\u00ed \u00faloh<\/strong> \u2014 pravidla pro \u0161k\u00e1lov\u00e1n\u00ed. Existuj\u00ed 2 typy:<\/p>\n<p><\/p>\n<ol>\n<li><strong>Sledov\u00e1n\u00ed c\u00edle<\/strong> \u2014 sledov\u00e1n\u00ed c\u00edlov\u00e9 metriky (vyu\u017eit\u00ed CPU\/RAM nebo po\u010det po\u017eadavk\u016f na ka\u017edou \u00falohu). Nap\u0159\u00edklad chceme, aby pr\u016fm\u011brn\u00e9 zat\u00ed\u017een\u00ed procesoru bylo 85 %, a kdy\u017e vzroste nad tuto hodnotu, nov\u00e9 \u00falohy se budou p\u0159id\u00e1vat, dokud nedos\u00e1hnou c\u00edlov\u00e9 hodnoty. Pokud je zat\u00ed\u017een\u00ed ni\u017e\u0161\u00ed, \u00falohy se naopak odeberou, pokud nen\u00ed aktivov\u00e1na ochrana proti zmen\u0161ov\u00e1n\u00ed \u0161k\u00e1lov\u00e1n\u00ed (<strong>Deaktivovat zmen\u0161en\u00ed \u0161k\u00e1lov\u00e1n\u00ed<\/strong>).<\/li>\n<li><strong>Krokov\u00e9 \u0161k\u00e1lov\u00e1n\u00ed<\/strong> \u2014 reakce na n\u00e1hodnou ud\u00e1lost. Zde lze nastavit reakci na jakoukoli ud\u00e1lost (CloudWatch Alarm), kdy se ud\u00e1lost stane, m\u016f\u017eeme p\u0159idat nebo odebrat stanoven\u00fd po\u010det \u00faloh, nebo ur\u010dit p\u0159esn\u00fd po\u010det \u00faloh.<\/li>\n<\/ol>\n<p><\/p>\n<p>Slu\u017eba m\u016f\u017ee m\u00edt n\u011bkolik pravidel \u0161k\u00e1lov\u00e1n\u00ed, to m\u016f\u017ee b\u00fdt u\u017eite\u010dn\u00e9, hlavn\u011b je sledovat, aby si navz\u00e1jem neodporovala.<\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Z\u00e1v\u011br<\/h2>\n<p><\/p>\n<p>Pokud jste postupovali podle pokyn\u016f a pou\u017eili stejn\u00fd Docker image, va\u0161e slu\u017eba by m\u011bla vr\u00e1tit tuto str\u00e1nku.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vytvo\u0159en\u00ed \u0161k\u00e1lovateln\u00e9ho API na spotov\u00fdch instanc\u00edch AWS\" src=\"\/wp-content\/uploads\/2020\/07\/ac592e3194480ac8b347a3a1faf0cee0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ol>\n<li>Vytvo\u0159ili jsme \u0161ablonu, podle kter\u00e9 se spou\u0161t\u011bj\u00ed v\u0161echny instance v slu\u017eb\u011b. Tak\u00e9 jsme se nau\u010dili aktualizovat instance p\u0159i zm\u011bn\u011b \u0161ablony.<\/li>\n<li>Nastavili jsme zpracov\u00e1n\u00ed sign\u00e1lu pro zastaven\u00ed spottov\u00e9ho instance, tak\u017ee b\u011bhem jedn\u00e9 minuty po jeho p\u0159ijet\u00ed jsou v\u0161echny b\u011b\u017e\u00edc\u00ed \u00falohy odstran\u011bny z instance, t\u00edmto zp\u016fsobem se nic neztr\u00e1c\u00ed a nep\u0159eru\u0161uje.<\/li>\n<li>Zvedli jsme vyrovn\u00e1va\u010d zat\u00ed\u017een\u00ed, abychom rovnom\u011brn\u011b rozlo\u017eili z\u00e1t\u011b\u017e mezi instance.<\/li>\n<li>Vytvo\u0159ili jsme slu\u017ebu, kter\u00e1 pracuje na spottov\u00fdch instanc\u00edch, d\u00edky \u010demu\u017e se n\u00e1klady na instance sn\u00ed\u017e\u00ed p\u0159ibli\u017en\u011b na t\u0159etinu.<\/li>\n<li>Nastavili jsme automatick\u00e9 \u0161k\u00e1lov\u00e1n\u00ed ob\u011bma sm\u011bry, abychom zvl\u00e1dli n\u00e1r\u016fst z\u00e1t\u011b\u017ee, ale z\u00e1rove\u0148 za ne\u010dinnost neplatili.<\/li>\n<li>Pou\u017e\u00edv\u00e1me Capacity Provider, aby aplikace spravovala infrastrukturu (instance), a ne naopak.<\/li>\n<li>Jsme skv\u011bl\u00ed.<\/li>\n<\/ol>\n<p><\/p>\n<p>Pokud m\u00e1te p\u0159edv\u00eddateln\u00e9 v\u00fdkyvy z\u00e1t\u011b\u017ee, nap\u0159\u00edklad pokud se inzerujete v rozs\u00e1hl\u00e9m emailov\u00e9m zas\u00edl\u00e1n\u00ed, m\u016f\u017eete nastavit \u0161k\u00e1lov\u00e1n\u00ed podle <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/autoscaling\/application\/userguide\/application-auto-scaling-scheduled-scaling.html\">pl\u00e1nu<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Tak\u00e9 je mo\u017en\u00e9 prov\u00e1d\u011bt \u0161k\u00e1lov\u00e1n\u00ed na z\u00e1klad\u011b dat z r\u016fzn\u00fdch \u010d\u00e1st\u00ed va\u0161eho syst\u00e9mu. Nap\u0159\u00edklad m\u00e1me funkci <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.adapty.io\/promo-campaigns\">pos\u00edl\u00e1n\u00ed individu\u00e1ln\u00edch propaga\u010dn\u00edch nab\u00eddek<\/a><\/noindex> u\u017eivatel\u016fm mobiln\u00ed aplikace. N\u011bkdy je kampa\u0148 rozes\u00edl\u00e1na na v\u00edce ne\u017e 1M lid\u00ed. Po takov\u00e9m rozes\u00edl\u00e1n\u00ed je v\u017edy zaznamen\u00e1n velk\u00fd n\u00e1r\u016fst dotaz\u016f na API, proto\u017ee mnoho u\u017eivatel\u016f se sou\u010dasn\u011b p\u0159ihla\u0161uje do aplikace. Pokud tedy vid\u00edme, \u017ee v \u010dekac\u00ed front\u011b na odesl\u00e1n\u00ed propaga\u010dn\u00edch push notifikac\u00ed je v\u00fdrazn\u011b v\u00edce, ne\u017e jsou standardn\u00ed hodnoty, m\u016f\u017eeme okam\u017eit\u011b spustit n\u011bkolik dal\u0161\u00edch stroj\u016f a \u00faloh, abychom byli p\u0159ipraveni na zat\u00ed\u017een\u00ed.<\/p>\n<p><\/p>\n<p>Budu pot\u011b\u0161en, pokud v koment\u00e1\u0159\u00edch sd\u00edl\u00edte zaj\u00edmav\u00e9 p\u0159\u00edpady pou\u017eit\u00ed spotov\u00fdch instanc\u00ed a ECS, nebo n\u011bco ohledn\u011b \u0161k\u00e1lov\u00e1n\u00ed.<\/p>\n<p><\/p>\n<p>Brzy budou \u010dl\u00e1nky o tom, jak zpracov\u00e1v\u00e1me tis\u00edce analytick\u00fdch ud\u00e1lost\u00ed za sekundu na p\u0159ev\u00e1\u017en\u011b bezserverov\u00e9m stacku (za pen\u00edze) a jak je zaji\u0161t\u011bno nasazen\u00ed slu\u017eeb pomoc\u00ed GitLab CI a Terraform Cloud.<\/p>\n<p><\/p>\n<p>Sledujte n\u00e1s, bude to zaj\u00edmav\u00e9!<\/p>\n<p class=\"for_users_only_msg\">Pouze registrovan\u00ed u\u017eivatel\u00e9 se mohou \u00fa\u010dastnit ankety. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">P\u0159ihlaste se<\/a><\/noindex>, pros\u00edm.<\/p>\n<h2 class=\"default-block__polling-title\">Pou\u017e\u00edv\u00e1te spotov\u00e9 instance na produkci?<\/h2>\n<ul class=\"poll-result\">\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">22,2%<\/strong>Ano6<\/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>Ne18<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">11,1%<\/strong>O t\u011bchto instanc\u00edch jsem se dozv\u011bd\u011bl z \u010dl\u00e1nku, pl\u00e1nuju je pou\u017e\u00edt.<\/p>\n<\/li>\n<\/ul>\n<p>    Hlasovalo 27 u\u017eivatel\u016f. Zdr\u017eeli se 5 u\u017eivatel\u016f.<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.3 - 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\/cs\/blog\/administrirovanie\/sozdanie-masshtabiruemogo-api-na-spotovyh-instansah-aws\" \/>\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\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\/cs\/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\udd47Vytv\u00e1\u0159en\u00ed \u0161k\u00e1lovateln\u00e9ho API na spotov\u00fdch instanc\u00edch AWS | ProHoster","description":"Ahoj v\u0161ichni! Jsem Kirill, CTO v Adapty.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/sozdanie-masshtabiruemogo-api-na-spotovyh-instansah-aws","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\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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/87393","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=87393"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/87393\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/87394"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=87393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=87393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=87393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}