{"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\/hu\/blog\/administrirovanie\/sozdanie-masshtabiruemogo-api-na-spotovyh-instansah-aws","title":{"rendered":"Sk\u00e1l\u00e1zhat\u00f3 API l\u00e9trehoz\u00e1sa AWS spot p\u00e9ld\u00e1nyokon","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hell\u00f3 mindenkinek! A nevem Kirill, az Adapty CTO-ja vagyok. Az architekt\u00far\u00e1nk nagy r\u00e9sze az AWS-en tal\u00e1lhat\u00f3, \u00e9s ma arr\u00f3l fogok besz\u00e9lni, hogyan cs\u00f6kkentett\u00fck le a szerverek k\u00f6lts\u00e9geit h\u00e1romszoros\u00e1ra a spot instance-ok haszn\u00e1lat\u00e1val a produkci\u00f3s k\u00f6rnyezetben, valamint arr\u00f3l, hogyan lehet be\u00e1ll\u00edtani az automatikus sk\u00e1l\u00e1z\u00e1st. El\u0151sz\u00f6r \u00e1ttekintj\u00fck, hogyan m\u0171k\u00f6dik ez, majd r\u00e9szletes \u00fatmutat\u00f3 k\u00f6vetkezik a be\u00e1ll\u00edt\u00e1shoz.<\/p>\n<p><\/p>\n<h2 id=\"chto-takoe-spotovye-instansy\">Mi az a spot instance?<\/h2>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/ec2\/spot\/\">Spot<\/a><\/noindex> instance-ok olyan AWS szerverek, amelyek jelenleg inakt\u00edvak m\u00e1s felhaszn\u00e1l\u00f3k sz\u00e1m\u00e1ra, \u00e9s ezeket jelent\u0151s kedvezm\u00e9nnyel \u00e9rt\u00e9kes\u00edtik (az Amazon szerint ak\u00e1r 90%, tapasztalataink szerint ~3x, ami a r\u00e9gi\u00f3t\u00f3l, az AZ-t\u0151l \u00e9s az instance t\u00edpus\u00e1t\u00f3l f\u00fcgg\u0151en v\u00e1ltozik). F\u0151 k\u00fcl\u00f6nbs\u00e9g\u00fck a norm\u00e1l instance-okhoz k\u00e9pest, hogy b\u00e1rmikor kikapcsolhat\u00f3k. Teh\u00e1t sok\u00e1ig \u00fagy gondoltuk, hogy ezeket csak fejleszt\u00e9si k\u00f6rnyezetekhez vagy sz\u00e1m\u00edt\u00e1si feladatokhoz lehet haszn\u00e1lni, megtartva a k\u00f6ztes eredm\u00e9nyeket az S3-on vagy az adatb\u00e1zisban, de nem a termel\u00e9shez. L\u00e9teznek k\u00fcls\u0151 megold\u00e1sok, amelyek lehet\u0151v\u00e9 teszik a spot instance-ok haszn\u00e1lat\u00e1t a termel\u00e9sben, de a mi eset\u00fcnkben sok workaround sz\u00fcks\u00e9ges, ez\u00e9rt nem vezett\u00fck be \u0151ket. A cikkben bemutatott megk\u00f6zel\u00edt\u00e9s teljes m\u00e9rt\u00e9kben az AWS standard funkci\u00f3ira \u00e9p\u00edt, tov\u00e1bbi script vagy cron haszn\u00e1lata n\u00e9lk\u00fcl.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Most n\u00e9h\u00e1ny k\u00e9perny\u0151k\u00e9pet mutatok be, amelyek a spot instance-ok \u00e1rt\u00f6rt\u00e9net\u00e9t mutatj\u00e1k.<\/p>\n<p><\/p>\n<p>m5.large az eu-west-1 (\u00cdrorsz\u00e1g) r\u00e9gi\u00f3ban. Az \u00e1r jellemz\u0151en stabil a 3 h\u00f3nap sor\u00e1n, jelenleg 2.9x megtakar\u00edt\u00e1ssal.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sk\u00e1l\u00e1zhat\u00f3 API l\u00e9trehoz\u00e1sa AWS spot p\u00e9ld\u00e1nyokon\" src=\"\/wp-content\/uploads\/2020\/07\/901a259955c386493557280489f582fe.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>m5.large az us-east-1 (\u00c9szak-Virginia) r\u00e9gi\u00f3ban. Az \u00e1r folyamatosan v\u00e1ltozik a 3 h\u00f3nap sor\u00e1n, jelenleg 2.3x \u00e9s 2.8x k\u00f6z\u00f6tti megtakar\u00edt\u00e1ssal a rendelkez\u00e9sre \u00e1ll\u00e1si z\u00f3n\u00e1t\u00f3l f\u00fcgg\u0151en.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sk\u00e1l\u00e1zhat\u00f3 API l\u00e9trehoz\u00e1sa AWS spot p\u00e9ld\u00e1nyokon\" src=\"\/wp-content\/uploads\/2020\/07\/49c89430f03b2c7025355562d2873b6b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>t3.small az us-east-1 (\u00c9szak-Virginia) r\u00e9gi\u00f3ban. Az \u00e1r stabil a 3 h\u00f3nap sor\u00e1n, jelenleg 3.4x megtakar\u00edt\u00e1ssal.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sk\u00e1l\u00e1zhat\u00f3 API l\u00e9trehoz\u00e1sa AWS spot p\u00e9ld\u00e1nyokon\" src=\"\/wp-content\/uploads\/2020\/07\/2e139dcc6d44bd37caf9d75eb6ec4835.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"arhitektura-servisa\">A szolg\u00e1ltat\u00e1s architekt\u00far\u00e1ja<\/h2>\n<p><\/p>\n<p>A szolg\u00e1ltat\u00e1s alap architekt\u00far\u00e1ja, amelyr\u0151l ebben a cikkben besz\u00e9lni fogunk, az al\u00e1bbi diagramon l\u00e1that\u00f3.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sk\u00e1l\u00e1zhat\u00f3 API l\u00e9trehoz\u00e1sa AWS spot p\u00e9ld\u00e1nyokon\" 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>A forgalomeloszt\u00f3 az Application Load Balancer (ALB), amely az EC2 Target Group (TG) fel\u00e9 ir\u00e1ny\u00edtja a k\u00e9r\u00e9seket. A TG feladata, hogy megnyissa az instance-okon a portokat az ALB sz\u00e1m\u00e1ra, \u00e9s ezeket \u00f6sszekapcsolja az Elastic Container Service (ECS) kont\u00e9nerek portjaival. Az ECS az AWS-en bel\u00fcl a Docker kont\u00e9nerek kezel\u00e9s\u00e9re szolg\u00e1l\u00f3 Kubernetes megfelel\u0151je.<\/p>\n<p><\/p>\n<p>Egy p\u00e9ld\u00e1nyon t\u00f6bb azonos porttal m\u0171k\u00f6d\u0151 kont\u00e9ner is lehet, ez\u00e9rt nem tudjuk ezeket r\u00f6gz\u00edteni. Az ECS \u00e9rtes\u00edti a TG-t, hogy \u00faj feladatot ind\u00edt (Kubernetes terminol\u00f3gi\u00e1ban ezt pod-nak h\u00edvj\u00e1k), amely ellen\u0151rzi a szabad portokat a p\u00e9ld\u00e1nyon, \u00e9s hozz\u00e1rendel egyet az ind\u00edtand\u00f3 feladathoz. A TG rendszeresen ellen\u0151rzi, hogy a p\u00e9ld\u00e1ny \u00e9s rajta az API m\u0171k\u00f6dik-e a health check seg\u00edts\u00e9g\u00e9vel, \u00e9s ha b\u00e1rmilyen probl\u00e9m\u00e1t \u00e9szlel, akkor le\u00e1ll\u00edtja a k\u00e9r\u00e9sek tov\u00e1bb\u00edt\u00e1s\u00e1t oda.<\/p>\n<p><\/p>\n<h3 id=\"ec2-auto-scaling-groups--ecs-capacity-providers\">EC2 Auto Scaling Csoportok + ECS Kapacit\u00e1sszolg\u00e1ltat\u00f3k<\/h3>\n<p><\/p>\n<p>A fent eml\u00edtett diagramon nem l\u00e1that\u00f3 az EC2 Auto Scaling Csoportok (ASG) szolg\u00e1ltat\u00e1s. A nev\u00e9b\u0151l ad\u00f3d\u00f3an ez a p\u00e9ld\u00e1nyok m\u00e9retez\u00e9s\u00e9\u00e9rt felel\u0151s. Eddig azonban az AWS-ben nem volt be\u00e9p\u00edtett lehet\u0151s\u00e9g a fut\u00f3 g\u00e9pek sz\u00e1m\u00e1nak ECS-b\u0151l t\u00f6rt\u00e9n\u0151 kezel\u00e9s\u00e9re. Az ECS lehet\u0151v\u00e9 tette a feladatok sz\u00e1m\u00e1nak sk\u00e1l\u00e1z\u00e1s\u00e1t, p\u00e9ld\u00e1ul a CPU, RAM vagy a k\u00e9r\u00e9sek sz\u00e1m\u00e1nak haszn\u00e1lata alapj\u00e1n. De ha a feladatok elfoglalt\u00e1k az \u00f6sszes szabad p\u00e9ld\u00e1nyt, akkor \u00faj g\u00e9pek automatikusan nem indultak.<\/p>\n<p><\/p>\n<p>Ez megv\u00e1ltozott az ECS Kapacit\u00e1sszolg\u00e1ltat\u00f3k (ECS CP) megjelen\u00e9s\u00e9vel. Mostant\u00f3l minden ECS-szolg\u00e1ltat\u00e1s \u00f6sszekapcsolhat\u00f3 az ASG-vel, \u00e9s ha a feladatok nem f\u00e9rnek el a m\u0171k\u00f6d\u0151 p\u00e9ld\u00e1nyokon, akkor \u00faj p\u00e9ld\u00e1nyok indulnak (de az ASG \u00e1ltal meg\u00e1llap\u00edtott korl\u00e1tok k\u00f6z\u00f6tt). Ez ford\u00edtva is m\u0171k\u00f6dik: ha az ECS CP \u00fcres p\u00e9ld\u00e1nyokat \u00e9szlel feladatok n\u00e9lk\u00fcl, akkor utas\u00edt\u00e1st ad az ASG-nek, hogy kapcsolja le \u0151ket. Az ECS CP lehet\u0151s\u00e9get biztos\u00edt a p\u00e9ld\u00e1nyok terhel\u00e9si c\u00e9lzott sz\u00e1zal\u00e9k\u00e1nak megad\u00e1s\u00e1ra, \u00edgy mindig legyen n\u00e9h\u00e1ny g\u00e9p szabadon a feladatok gyors sk\u00e1l\u00e1z\u00e1sa \u00e9rdek\u00e9ben; err\u0151l k\u00e9s\u0151bb besz\u00e9lek.<\/p>\n<p><\/p>\n<h3 id=\"ec2-launch-templates\">EC2 Ind\u00edt\u00e1si Sablonok<\/h3>\n<p><\/p>\n<p>Az utols\u00f3 szolg\u00e1ltat\u00e1s, amelyr\u0151l besz\u00e9lni fogok, miel\u0151tt r\u00e9szletesen bemutatn\u00e1m az infrastrukt\u00fara l\u00e9trehoz\u00e1s\u00e1t, az EC2 Ind\u00edt\u00e1si Sablonok. Ez lehet\u0151v\u00e9 teszi egy sablon l\u00e9trehoz\u00e1s\u00e1t, amely alapj\u00e1n minden g\u00e9pet ind\u00edtani fognak, hogy ezt minden alkalommal ne kelljen \u00fajrakezdeni. Itt kiv\u00e1laszthat\u00f3 a fut\u00f3 g\u00e9p t\u00edpusa, a biztons\u00e1gi csoport, a lemezk\u00e9p \u00e9s sok egy\u00e9b param\u00e9ter. Ezen k\u00edv\u00fcl megadhat\u00f3k felhaszn\u00e1l\u00f3i adatok is, amelyeket minden ind\u00edtott p\u00e9ld\u00e1nyra be lehet t\u00f6lteni. A felhaszn\u00e1l\u00f3i adatokban p\u00e9ld\u00e1ul futtathat\u00f3k szkriptek, p\u00e9ld\u00e1ul m\u00f3dos\u00edthat\u00f3 a f\u00e1jl tartalma. <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/ecs-agent-config.html\">az ECS \u00fcgyn\u00f6k konfigur\u00e1ci\u00f3ja<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>A cikk keretein bel\u00fcl az egyik legfontosabb konfigur\u00e1ci\u00f3s param\u00e9ter \u2014 <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. Ha ez a param\u00e9ter be van kapcsolva, akkor amint az ECS jelet kap arr\u00f3l, hogy a spot p\u00e9ld\u00e1nyt elviszik, az \u00f6sszes, rajta fut\u00f3 feladat st\u00e1tusz\u00e1t Draining-re v\u00e1ltja. Nincs \u00faj feladat, amit erre a p\u00e9ld\u00e1nyra rendeln\u00e9nek, ha vannak olyan feladatok, amelyek \u00e9ppen most akarnak erre futni, azokat t\u00f6rlik. A terhel\u00e9seloszt\u00f3b\u00f3l \u00e9rkez\u0151 k\u00e9r\u00e9sek is megsz\u0171nnek. Az p\u00e9ld\u00e1ny elt\u00e1vol\u00edt\u00e1s\u00e1r\u00f3l sz\u00f3l\u00f3 \u00e9rtes\u00edt\u00e9s 2 perccel a t\u00e9nyleges esem\u00e9ny el\u0151tt \u00e9rkezik. Teh\u00e1t ha a szolg\u00e1ltat\u00e1sa nem fut le 2 percn\u00e9l tov\u00e1bb, \u00e9s nem t\u00e1rol semmit a lemezen, akkor haszn\u00e1lhatja a spot p\u00e9ld\u00e1nyokat adatveszt\u00e9s n\u00e9lk\u00fcl.<\/p>\n<p><\/p>\n<p>A lemezr\u0151l - az AWS nemr\u00e9giben <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.\">lehet\u0151v\u00e9 tette<\/a><\/noindex> az Elastic File System (EFS) haszn\u00e1lat\u00e1t az ECS-sel, ezzel a s\u00e9m\u00e1val m\u00e9g a lemez sem akad\u00e1ly, de mi ezt nem pr\u00f3b\u00e1ltuk ki, mert alapvet\u0151en nincs sz\u00fcks\u00e9g\u00fcnk lemezre az \u00e1llapot t\u00e1rol\u00e1s\u00e1hoz. Alap\u00e9rtelmez\u00e9s szerint a SIGINT (amelyet a feladat Draining st\u00e1tuszra v\u00e1lt\u00e1sakor k\u00fcldenek) fogad\u00e1sa ut\u00e1n minden akt\u00edv feladat 30 m\u00e1sodpercen bel\u00fcl le\u00e1ll, m\u00e9g akkor is, ha nem fejez\u0151dtek be, ezt az id\u0151t a param\u00e9ter seg\u00edts\u00e9g\u00e9vel lehet megv\u00e1ltoztatni. <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/ecs-agent-config.html\">ECS_CONTAINER_STOP_TIMEOUT<\/a><\/noindex>. Fontos, hogy ne \u00e1ll\u00edtsa be 2 percn\u00e9l hosszabb id\u0151re a spot g\u00e9pekn\u00e9l.<\/p>\n<p><\/p>\n<h2 id=\"sozdanie-servisa\">Szolg\u00e1ltat\u00e1s l\u00e9trehoz\u00e1sa<\/h2>\n<p><\/p>\n<p>Most t\u00e9rj\u00fcnk r\u00e1 a fent eml\u00edtett szolg\u00e1ltat\u00e1s l\u00e9trehoz\u00e1s\u00e1ra. A folyamat sor\u00e1n tov\u00e1bbi hasznos szempontokat ismertetek, amelyeket kor\u00e1bban nem eml\u00edtettem. Ez \u00f6sszess\u00e9g\u00e9ben egy l\u00e9p\u00e9sr\u0151l l\u00e9p\u00e9sre \u00fatmutat\u00f3, de n\u00e9h\u00e1ny nagyon alapvet\u0151 vagy \u00e9ppens\u00e9ggel nagyon specifikus esetet nem fogok t\u00e1rgyalni. Minden l\u00e9p\u00e9st az AWS vizu\u00e1lis konzolj\u00e1n hajtanak v\u00e9gre, de programozva is megval\u00f3s\u00edthat\u00f3k a CloudFormation vagy Terraform seg\u00edts\u00e9g\u00e9vel. Az Adapty-n\u00e1l Terraform-ot haszn\u00e1lunk.<\/p>\n<p><\/p>\n<h3 id=\"ec2-launch-template\"><strong>EC2 Launch Template<\/strong><\/h3>\n<p><\/p>\n<p>Ebben a szolg\u00e1ltat\u00e1sban el\u00e9rhet\u0151 a haszn\u00e1lni k\u00edv\u00e1nt g\u00e9pek konfigur\u00e1ci\u00f3ja. A sablonok kezel\u00e9se az EC2 -&gt; Instances -&gt; Launch templates r\u00e9szben t\u00f6rt\u00e9nik.<\/p>\n<p><\/p>\n<p><strong>Amazon g\u00e9p k\u00e9p (AMI)<\/strong> \u2014 itt megadjuk a lemezk\u00e9p azonos\u00edt\u00f3j\u00e1t, amellyel minden p\u00e9ld\u00e1ny elindul. Az ECS-hez a legt\u00f6bb esetben az Amazon optimaliz\u00e1lt k\u00e9p\u00e9t kell haszn\u00e1lni. Ez rendszeresen friss\u00fcl, \u00e9s tartalmazza az ECS m\u0171k\u00f6d\u00e9s\u00e9hez sz\u00fcks\u00e9ges \u00f6sszes elemet. Az aktu\u00e1lis k\u00e9pazonos\u00edt\u00f3 megismer\u00e9s\u00e9hez menj\u00fcnk el a <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/ecs-optimized_AMI.html\">Amazon ECS optimaliz\u00e1lt AMI-k<\/a><\/noindex>, v\u00e1lasszuk ki a haszn\u00e1lni k\u00edv\u00e1nt r\u00e9gi\u00f3t, \u00e9s m\u00e1soljuk ki az AMI azonos\u00edt\u00f3t hozz\u00e1. P\u00e9ld\u00e1ul az us-east-1 r\u00e9gi\u00f3hoz a cikk \u00edr\u00e1sakor aktu\u00e1lis azonos\u00edt\u00f3: <em>ami-00c7c1cf5bdc913ed<\/em>. Ezt az azonos\u00edt\u00f3t a Specify a custom value pontba kell beilleszteni.<\/p>\n<p><\/p>\n<p><strong>P\u00e9ld\u00e1ny t\u00edpusa<\/strong> \u2014 megadjuk az instance t\u00edpus\u00e1t. V\u00e1lassza azt, amelyik a legjobban illik a feladataihoz.<\/p>\n<p><\/p>\n<p><strong>Kulcsp\u00e1r (bejelentkez\u00e9s)<\/strong> \u2014 megadjuk a tan\u00fas\u00edtv\u00e1nyt, amellyel SSH-n kereszt\u00fcl csatlakozni tudunk az instance-ra, ha sz\u00fcks\u00e9ges.<\/p>\n<p><\/p>\n<p><strong>H\u00e1l\u00f3zati be\u00e1ll\u00edt\u00e1sok<\/strong> \u2014 megadjuk a h\u00e1l\u00f3zati param\u00e9tereket. <strong>H\u00e1l\u00f3zati platform<\/strong> \u00e1ltal\u00e1ban Virtual Private Cloud (VPC) legyen. <strong>Biztons\u00e1gi csoportok<\/strong> \u2014 biztons\u00e1gi csoportok az instance-aink sz\u00e1m\u00e1ra. Mivel terhel\u00e9seloszt\u00f3t fogunk haszn\u00e1lni az instance-ok el\u0151tt, javaslom, hogy itt egy olyan csoportot jel\u00f6lj\u00f6n meg, amely enged\u00e9lyezi a bej\u00f6v\u0151 kapcsolatok csak a terhel\u00e9seloszt\u00f3t\u00f3l. Teh\u00e1t k\u00e9t biztons\u00e1gi csoportja lesz: az egyik a terhel\u00e9seloszt\u00f3 sz\u00e1m\u00e1ra, amely enged\u00e9lyezi az \u00f6sszes bej\u00f6v\u0151 (inbound) kapcsolatot 80 (http) \u00e9s 443 (https) portokon, a m\u00e1sik a g\u00e9pek sz\u00e1m\u00e1ra, amely enged\u00e9lyezi a bej\u00f6v\u0151 kapcsolatokat b\u00e1rmely porton a terhel\u00e9seloszt\u00f3 csoportb\u00f3l. A kimen\u0151 (outbound) kapcsolatoknak mindk\u00e9t csoportban nyitva kell lenni\u00fck TCP protokollon minden portra minden c\u00edmre. Korl\u00e1tozhatjuk a kimen\u0151 kapcsolatok portjait \u00e9s c\u00edmeit, de akkor folyamatosan figyelni kell, hogy ne pr\u00f3b\u00e1lkozzon olyan z\u00e1rt porton val\u00f3 kapcsol\u00f3d\u00e1ssal.<\/p>\n<p><\/p>\n<p><strong>T\u00e1rhely (volumenek)<\/strong> \u2014 megadjuk a lemezek param\u00e9tereit a g\u00e9pek sz\u00e1m\u00e1ra. A lemez m\u00e9rete nem lehet kevesebb, mint az AMI-ban megadott, ECS Optimized eset\u00e9n \u2014 30 GiB.<\/p>\n<p><\/p>\n<p><strong>Fejlett r\u00e9szletek<\/strong> \u2014 megadjuk a tov\u00e1bbi param\u00e9tereket.<\/p>\n<p><\/p>\n<p><strong>V\u00e1s\u00e1rl\u00e1si lehet\u0151s\u00e9g<\/strong> \u2014 szeretn\u00e9nk-e spottal rendelkez\u0151 instance-okat v\u00e1s\u00e1rolni. Szeretn\u00e9nk, de itt ezt a jel\u00f6l\u0151n\u00e9gyzetet nem fogjuk bejel\u00f6lni, ezt az Auto Scaling Grouppal \u00e1ll\u00edtjuk be, ott t\u00f6bb lehet\u0151s\u00e9g van.<\/p>\n<p><\/p>\n<p><strong>IAM instance profil<\/strong> \u2014 megadjuk a szerepk\u00f6rt, amellyel az instance-ok elindulnak. Az ECS m\u0171k\u00f6d\u00e9s\u00e9hez az instance-oknak jogokra van sz\u00fcks\u00e9g\u00fck, amelyeket \u00e1ltal\u00e1ban a k\u00f6vetkez\u0151 szerepk\u00f6r\u00f6n kereszt\u00fcl biztos\u00edtanak: <em>ecsInstanceRole<\/em>. Bizonyos esetekben ezt l\u00e9tre kell hozni, ha nincs, akkor itt <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/instance_IAM_role.html\">utas\u00edt\u00e1s<\/a><\/noindex> t\u00e1j\u00e9koztat\u00f3t tal\u00e1l arr\u00f3l, hogyan lehet ezt megtenni. A l\u00e9trehoz\u00e1s ut\u00e1n megadjuk a sablonban.<br \/>\nEzut\u00e1n sok param\u00e9ter k\u00f6vetkezik, a legt\u00f6bb helyen az alap\u00e9rtelmezett \u00e9rt\u00e9keket lehet hagyni, de mindegyiknek vil\u00e1gos le\u00edr\u00e1sa van. \u00c9n mindig bekapcsolom az EBS-optimaliz\u00e1lt instance \u00e9s a T2\/T3 korl\u00e1tlan lehet\u0151s\u00e9geket, ha haszn\u00e1lj\u00e1k <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSEC2\/latest\/UserGuide\/burstable-performance-instances.html\">burstable<\/a><\/noindex> instance-ok.<\/p>\n<p><\/p>\n<p><strong>Felhaszn\u00e1l\u00f3i adatok<\/strong> \u2014 megadjuk a felhaszn\u00e1l\u00f3i adatokat. Szerkeszteni fogjuk a f\u00e1jlt <code>\/etc\/ecs\/ecs.config<\/code>, amelyben az ECS \u00fcgyn\u00f6k konfigur\u00e1ci\u00f3ja tal\u00e1lhat\u00f3.<br \/>\nP\u00e9lda arra, hogy a felhaszn\u00e1l\u00f3i adatok hogyan n\u00e9zhetnek ki:<\/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 a param\u00e9ter jelzi, hogy az p\u00e9ld\u00e1ny egy megadott nev\u0171 klaszterhez tartozik, teh\u00e1t ez a klaszter feladatokat tud elhelyezni ezen a szerveren. Jelenleg m\u00e9g nem hoztunk l\u00e9tre klasztert, de a l\u00e9trehoz\u00e1skor ezt a nevet fogjuk haszn\u00e1lni.<\/p>\n<p><\/p>\n<p><code>ECS_ENABLE_SPOT_INSTANCE_DRAINING=true<\/code> \u2014 a param\u00e9ter jelzi, hogy ha jelet kapunk a spott p\u00e9ld\u00e1ny le\u00e1ll\u00edt\u00e1s\u00e1r\u00f3l, akkor minden feladatnak a Draining \u00e1llapotba kell ker\u00fclnie.<\/p>\n<p><\/p>\n<p><code>ECS_CONTAINER_STOP_TIMEOUT=1m<\/code> \u2014 a param\u00e9ter jelzi, hogy a SIGINT jelz\u00e9s ut\u00e1n minden feladatnak 1 perce van, miel\u0151tt le\u00e1ll\u00edtj\u00e1k \u0151ket.<\/p>\n<p><\/p>\n<p><code>ECS_ENGINE_AUTH_TYPE=docker<\/code> \u2014 a param\u00e9ter jelzi, hogy a hiteles\u00edt\u00e9si mechanizmus a docker s\u00e9ma.<\/p>\n<p><\/p>\n<p><code>ECS_ENGINE_AUTH_DATA=...<\/code> \u2014 a priv\u00e1t kont\u00e9ner regisztr\u00e1ci\u00f3hoz val\u00f3 csatlakoz\u00e1si param\u00e9terek, ahol a Docker k\u00e9peid t\u00e1rol\u00f3dnak. Ha az nyilv\u00e1nos, akkor semmit nem kell megadni.<\/p>\n<p><\/p>\n<p>Ebben a cikkben egy nyilv\u00e1nos k\u00e9pet fogok haszn\u00e1lni a Docker Hub-b\u00f3l, ez\u00e9rt nem fogok param\u00e9tereket megadni. <code>ECS_ENGINE_AUTH_TYPE<\/code> \u00e9s <code>ECS_ENGINE_AUTH_DATA<\/code> nincs sz\u00fcks\u00e9g r\u00e1.<\/p>\n<p><\/p>\n<p><strong>Hasznos tudni<\/strong>: aj\u00e1nlott rendszeresen friss\u00edteni az AMI-t, mert az \u00faj verzi\u00f3kban friss\u00fclnek a Docker, Linux, ECS \u00fcgyn\u00f6k stb. verzi\u00f3i. Hogy ne felejtsd el, be\u00e1ll\u00edthatod <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/ECS-AMI-SubscribeTopic.html\">az \u00e9rtes\u00edt\u00e9seket<\/a><\/noindex> az \u00faj verzi\u00f3k megjelen\u00e9s\u00e9r\u0151l. Mailben kapodh az \u00e9rtes\u00edt\u00e9seket \u00e9s manu\u00e1lisan friss\u00edthetsz, vagy \u00edrhatsz egy Lambda-funkci\u00f3t, amely automatikusan l\u00e9trehozza az \u00faj verzi\u00f3t a Launch Template-hez a friss\u00edtett AMI-val.<\/p>\n<p><\/p>\n<h3 id=\"ec2-auto-scaling-group\"><strong>EC2 Auto Scaling Group<\/strong><\/h3>\n<p><\/p>\n<p>Az Auto Scaling Group felel\u0151s az p\u00e9ld\u00e1nyok ind\u00edt\u00e1s\u00e1\u00e9rt \u00e9s sk\u00e1l\u00e1z\u00e1s\u00e1\u00e9rt. A csoportok kezel\u00e9s\u00e9t az EC2 -&gt; Auto Scaling -&gt; Auto Scaling Groups szakaszban v\u00e9gezz\u00fck.<\/p>\n<p><\/p>\n<p><strong>Ind\u00edt\u00e1si sablon<\/strong> \u2014 v\u00e1lasszuk ki az el\u0151z\u0151 l\u00e9p\u00e9sben l\u00e9trehozott sablont. A verzi\u00f3t hagyjuk alap\u00e9rtelmezettnek.<\/p>\n<p><\/p>\n<p><strong>V\u00e1s\u00e1rl\u00e1si lehet\u0151s\u00e9gek \u00e9s p\u00e9ld\u00e1nyt\u00edpusok<\/strong> \u2014 megadjuk a klaszterhez sz\u00fcks\u00e9ges p\u00e9ld\u00e1nyt\u00edpusokat. A 'Adhere to launch template' a Launch Template-b\u0151l haszn\u00e1lja a p\u00e9ld\u00e1ny t\u00edpus\u00e1t. A 'Combine purchase options and instance types' rugalmasan lehet\u0151v\u00e9 teszi a p\u00e9ld\u00e1nyt\u00edpusok be\u00e1ll\u00edt\u00e1s\u00e1t. Ezt fogjuk haszn\u00e1lni.<\/p>\n<p><\/p>\n<p><strong>Voluntary On-Demand alap<\/strong> \u2014 a norm\u00e1l, nem spott p\u00e9ld\u00e1nyok sz\u00e1ma, amelyek mindig m\u0171k\u00f6dni fognak.<\/p>\n<p><\/p>\n<p><strong>On-Demand sz\u00e1zal\u00e9k a b\u00e1zis felett<\/strong> \u2014 a norm\u00e1l \u00e9s spott p\u00e9ld\u00e1nyok sz\u00e1zal\u00e9kos ar\u00e1nya, a 50-50 egyenl\u0151en osztja el, a 20-80 eset\u00e9ben minden norm\u00e1l p\u00e9ld\u00e1nyhoz 4 spott p\u00e9ld\u00e1ny fog fel\u00e1llni. E p\u00e9ld\u00e1ban 50-50-et adok meg, de a val\u00f3s\u00e1gban a legt\u00f6bbsz\u00f6r 20-80-at szoktunk csin\u00e1lni, bizonyos esetekben 0-100 is el\u0151fordul.<\/p>\n<p><\/p>\n<p><strong>P\u00e9ld\u00e1nyt\u00edpusok<\/strong> \u2014 itt megadhat\u00f3k tov\u00e1bbi p\u00e9ld\u00e1nyt\u00edpusok, amelyeket a klaszterben haszn\u00e1lni fognak. Mi sosem haszn\u00e1ltuk, mert nem igaz\u00e1n \u00e9rtem ennek a t\u00f6rt\u00e9netnek a jelent\u00e9s\u00e9t. Lehet, hogy a konkr\u00e9t p\u00e9ld\u00e1nyt\u00edpusokra vonatkoz\u00f3 korl\u00e1toz\u00e1sokkal van \u00f6sszef\u00fcgg\u00e9s, de ezeket a t\u00e1mogat\u00e1s \u00e1ltal k\u00f6nnyen meg lehet n\u00f6velni. Ha tudja, hogy mire lehet haszn\u00e1lni, \u00f6r\u00f6mmel olvasn\u00e1m a kommentekben.)<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sk\u00e1l\u00e1zhat\u00f3 API l\u00e9trehoz\u00e1sa AWS spot p\u00e9ld\u00e1nyokon\" src=\"\/wp-content\/uploads\/2020\/07\/c1ee742d2059674f39a53cac6b9f2347.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>H\u00e1l\u00f3zat<\/strong> \u2014 h\u00e1l\u00f3zati be\u00e1ll\u00edt\u00e1sok, v\u00e1lassza ki a VPC-t \u00e9s a g\u00e9pek alh\u00e1l\u00f3zatait, a legt\u00f6bb esetben \u00e9rdemes az \u00f6sszes el\u00e9rhet\u0151 alh\u00e1l\u00f3zatot kiv\u00e1lasztani.<\/p>\n<p><\/p>\n<p><strong>Terhel\u00e9seloszt\u00e1s<\/strong> \u2014 terhel\u00e9seloszt\u00f3 be\u00e1ll\u00edt\u00e1sok, de ezt k\u00fcl\u00f6n fogjuk megcsin\u00e1lni, itt most semmit sem m\u00f3dos\u00edtunk. <strong>Eg\u00e9szs\u00e9g\u00fcgyi ellen\u0151rz\u00e9sek<\/strong> is k\u00e9s\u0151bb lesznek be\u00e1ll\u00edtva.<\/p>\n<p><\/p>\n<p><strong>Csoport m\u00e9rete<\/strong> \u2014 megadjuk a korl\u00e1toz\u00e1sokat a klaszterben l\u00e9v\u0151 g\u00e9pek sz\u00e1m\u00e1ra \u00e9s a k\u00edv\u00e1nt g\u00e9psz\u00e1mot a kezdetkor. A klaszterben l\u00e9v\u0151 g\u00e9pek sz\u00e1ma soha nem lesz kevesebb a minim\u00e1lisan megadott mennyis\u00e9g\u00e9n\u00e9l, \u00e9s nem haladhatja meg a maxim\u00e1lisat, m\u00e9g akkor sem, ha a metrik\u00e1k szerint sk\u00e1l\u00e1znia kellene.<\/p>\n<p><\/p>\n<p><strong>Sk\u00e1l\u00e1z\u00e1si ir\u00e1nyelvek<\/strong> \u2014 sk\u00e1l\u00e1z\u00e1si be\u00e1ll\u00edt\u00e1sok, de a sk\u00e1l\u00e1z\u00e1sunkat az akt\u00edv ECS feladatok alapj\u00e1n fogjuk v\u00e9gezni, ez\u00e9rt a sk\u00e1l\u00e1z\u00e1st k\u00e9s\u0151bb be\u00e1ll\u00edtjuk.<\/p>\n<p><\/p>\n<p><strong>P\u00e9ld\u00e1nyok scale-in v\u00e9delme<\/strong> \u2014 v\u00e9delem a p\u00e9ld\u00e1nyok t\u00f6rl\u00e9se ellen, ha lefel\u00e9 sk\u00e1l\u00e1zunk. Bekapcsoljuk, hogy az ASG ne t\u00f6r\u00f6lje azokat a g\u00e9peket, amelyeken akt\u00edv feladatok vannak. A p\u00e9ld\u00e1nyok v\u00e9delm\u00e9t, ahol nincsenek feladatok, az ECS Capacity Provider fogja kikapcsolni.<\/p>\n<p><\/p>\n<p><strong>C\u00edmk\u00e9k hozz\u00e1ad\u00e1sa<\/strong> \u2014 megadhat\u00f3k c\u00edmk\u00e9k a p\u00e9ld\u00e1nyok sz\u00e1m\u00e1ra (ehhez a Tag new instances jel\u00f6l\u0151n\u00e9gyzetet be kell pip\u00e1lni). Aj\u00e1nlom, hogy adjunk meg egy Name c\u00edmk\u00e9t, akkor az \u00f6sszes p\u00e9ld\u00e1ny, amelyet a csoport keretein bel\u00fcl ind\u00edtanak, ugyan\u00fagy fog h\u00edv\u00f3dni, \u00e9s k\u00e9nyelmes lesz n\u00e9zni \u0151ket a konzolban.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sk\u00e1l\u00e1zhat\u00f3 API l\u00e9trehoz\u00e1sa AWS spot p\u00e9ld\u00e1nyokon\" src=\"\/wp-content\/uploads\/2020\/07\/61fa0ccb38c11f61431db0938140efb7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A csoport l\u00e9trehoz\u00e1sa ut\u00e1n nyissa meg, \u00e9s l\u00e9pjen az Advanced configurations r\u00e9szhez, az\u00e9rt, mert a l\u00e9trehoz\u00e1s szakasz\u00e1ban nem minden lehet\u0151s\u00e9g l\u00e1that\u00f3 a konzolon.<\/p>\n<p><\/p>\n<p><strong>T\u00f6rl\u00e9si ir\u00e1nyelvek<\/strong> \u2014 olyan szab\u00e1lyok, amelyeket a p\u00e9ld\u00e1nyok t\u00f6rl\u00e9sekor figyelembe vesznek. Ezek sorrendben alkalmaz\u00e1sra ker\u00fclnek. \u00c1ltal\u00e1ban olyanokat haszn\u00e1lunk, mint az al\u00e1bbi k\u00e9pen l\u00e1that\u00f3. El\u0151sz\u00f6r azokat a p\u00e9ld\u00e1nyokat t\u00f6r\u00f6lj\u00fck, amelyek a leg\u00f6regebb Launch Template-tel rendelkeznek (p\u00e9ld\u00e1ul, ha friss\u00edtett\u00fck az AMI-t, l\u00e9trej\u00f6n egy \u00faj verzi\u00f3, de minden p\u00e9ld\u00e1ny \u00e1t\u00e1llt r\u00e1). Ezut\u00e1n azok a p\u00e9ld\u00e1nyok ker\u00fclnek kiv\u00e1laszt\u00e1sra, amelyek a legk\u00f6zelebb \u00e1llnak a k\u00f6vetkez\u0151 billing id\u0151szakhoz. V\u00e9g\u00fcl a leg\u00f6regebb p\u00e9ld\u00e1nyok ker\u00fclnek v\u00e1laszt\u00e1sra a telep\u00edt\u00e9s d\u00e1tuma szerint.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sk\u00e1l\u00e1zhat\u00f3 API l\u00e9trehoz\u00e1sa AWS spot p\u00e9ld\u00e1nyokon\" src=\"\/wp-content\/uploads\/2020\/07\/8236624fe08a03f36aedc7665e18b060.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Hasznos tudni<\/strong>: a klaszterben l\u00e9v\u0151 \u00f6sszes g\u00e9p friss\u00edt\u00e9s\u00e9hez k\u00e9nyelmes haszn\u00e1lni <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/autoscaling\/ec2\/userguide\/asg-instance-refresh.html\">P\u00e9ld\u00e1ny friss\u00edt\u00e9s<\/a><\/noindex>. Ha ezt \u00f6tv\u00f6zi a kor\u00e1bbi l\u00e9p\u00e9s Lambda-funkci\u00f3j\u00e1val, akkor egy teljesen automatiz\u00e1lt p\u00e9ld\u00e1nyfriss\u00edt\u00e9si rendszere lesz. Miel\u0151tt friss\u00edten\u00e9 az \u00f6sszes g\u00e9pet, ki kell kapcsolni az instance scale-in protection-t az \u00f6sszes p\u00e9ld\u00e1ny eset\u00e9ben a csoportban. Nem a csoport be\u00e1ll\u00edt\u00e1s\u00e1t, hanem maguknak a g\u00e9peknek a v\u00e9delm\u00e9t, ezt az Instance management f\u00fcl\u00f6n lehet megtenni.<\/p>\n<p><\/p>\n<h3 id=\"application-load-balancer-i-ec2-target-group\">Application Load Balancer \u00e9s EC2 Target Group<\/h3>\n<p><\/p>\n<p>A terhel\u00e9seloszt\u00f3t az EC2 \u2192 Load Balancing \u2192 Load Balancers szakaszban hozzuk l\u00e9tre. Az Application Load Balancer-t fogjuk haszn\u00e1lni, k\u00fcl\u00f6nb\u00f6z\u0151 t\u00edpus\u00fa terhel\u00e9seloszt\u00f3kr\u00f3l a <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/elasticloadbalancing\/features\/#compare\">szolg\u00e1ltat\u00e1s oldal\u00e1n olvashat\u00f3k.<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><strong>Hallgat\u00f3k<\/strong> \u2014 \u00e9rtelme van, hogy l\u00e9trehozzon 80 \u00e9s 443 portokat, \u00e9s \u00e1tir\u00e1ny\u00edt\u00e1st \u00e1ll\u00edtson be a 80-r\u00f3l a 443-ra a terhel\u00e9seloszt\u00f3 szab\u00e1lyaival.<\/p>\n<p><\/p>\n<p><strong>Availability Zones<\/strong> \u2014 a legt\u00f6bb esetben minden el\u00e9rhet\u0151s\u00e9gi z\u00f3n\u00e1t v\u00e1lasztunk.<\/p>\n<p><\/p>\n<p><strong>Configure Security Settings<\/strong> \u2014 itt adja meg az SSL-tan\u00fas\u00edtv\u00e1nyt a terhel\u00e9seloszt\u00f3hoz, a legk\u00e9nyelmesebb megold\u00e1s \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/acm\/latest\/userguide\/gs-acm-request-public.html\">tan\u00fas\u00edtv\u00e1nyt k\u00e9sz\u00edteni<\/a><\/noindex> az ACM-ben. A k\u00fcl\u00f6nbs\u00e9gekr\u0151l <strong>Security Policy<\/strong> t\u00f6bbek k\u00f6z\u00f6tt olvashat a <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/elasticloadbalancing\/latest\/classic\/elb-security-policy-table.html\">dokument\u00e1ci\u00f3<\/a><\/noindex>, ak\u00e1r a kiv\u00e1lasztott alap\u00e9rtelmezett <code>ELBSecurityPolicy-2016-08<\/code>. A terhel\u00e9seloszt\u00f3 l\u00e9trehoz\u00e1sa ut\u00e1n megl\u00e1tja a <strong>DNS nev\u00e9t<\/strong>, amelyhez CNAME-t kell be\u00e1ll\u00edtani a domainj\u00e9hez. P\u00e9ld\u00e1ul \u00edgy n\u00e9z ki a Cloudflare-ben.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sk\u00e1l\u00e1zhat\u00f3 API l\u00e9trehoz\u00e1sa AWS spot p\u00e9ld\u00e1nyokon\" src=\"\/wp-content\/uploads\/2020\/07\/899ff0f30df4117fc0ccd91af135def3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Security Group<\/strong> \u2014 l\u00e9trehoz vagy kiv\u00e1laszt egy biztons\u00e1gi csoportot a terhel\u00e9seloszt\u00f3hoz, err\u0151l kor\u00e1bban a EC2 Launch Template \u2192 Network settings r\u00e9szben \u00edrtam.<\/p>\n<p><\/p>\n<p><strong>Target group<\/strong> \u2014 egy csoportot hozunk l\u00e9tre, amely felel\u0151s a k\u00e9rd\u00e9sek ir\u00e1ny\u00edt\u00e1s\u00e1\u00e9rt a terhel\u00e9seloszt\u00f3r\u00f3l a g\u00e9pekre, \u00e9s ellen\u0151rzi azok el\u00e9rhet\u0151s\u00e9g\u00e9t, hogy probl\u00e9m\u00e1k eset\u00e9n cser\u00e9lje \u0151ket. <strong>Target type<\/strong> Instance kell legyen, <strong>Protocol<\/strong> \u00e9s <strong>Port<\/strong> b\u00e1rmilyen, ha HTTPS-en kereszt\u00fcl kommunik\u00e1l a terhel\u00e9seloszt\u00f3 \u00e9s a p\u00e9ld\u00e1nyok k\u00f6z\u00f6tt, akkor k\u00f6zvetlen\u00fcl kell felt\u00f6lteni a tan\u00fas\u00edtv\u00e1nyt. Az adott p\u00e9ld\u00e1ban ezt nem fogjuk megtenni, egyszer\u0171en hagyjuk a 80-as portot.<\/p>\n<p><\/p>\n<p><strong>Eg\u00e9szs\u00e9g\u00fcgyi ellen\u0151rz\u00e9sek<\/strong> \u2014 a szolg\u00e1ltat\u00e1s m\u0171k\u00f6d\u00e9s\u00e9nek ellen\u0151rz\u00e9si param\u00e9terei. A t\u00e9nyleges szolg\u00e1ltat\u00e1snak egy k\u00fcl\u00f6n k\u00e9r\u00e9snek kell lennie, amely fontos \u00fczleti logika r\u00e9szeit val\u00f3s\u00edtja meg, az adott p\u00e9ld\u00e1ban az alap\u00e9rtelmezett be\u00e1ll\u00edt\u00e1sokat fogom hagyni. Ezut\u00e1n v\u00e1laszthat intervallumot, id\u0151t\u00fall\u00e9p\u00e9st, sikeres v\u00e1lasz k\u00f3dokat stb. A p\u00e9ld\u00e1nkban a Success codes 200-399-at hat\u00e1rozunk meg, mivel a haszn\u00e1lt Docker image 304-es k\u00f3dot ad vissza.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sk\u00e1l\u00e1zhat\u00f3 API l\u00e9trehoz\u00e1sa AWS spot p\u00e9ld\u00e1nyokon\" src=\"\/wp-content\/uploads\/2020\/07\/e295ab1c3bf1dfe13c76b4942a31c7ee.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Register Targets<\/strong> \u2014 itt v\u00e1lasztjuk ki a csoport g\u00e9peit, de a mi eset\u00fcnkben ezt az ECS fogja kezelni, \u00edgy ezt a l\u00e9p\u00e9st egyszer\u0171en kihagyjuk.<\/p>\n<p><\/p>\n<p><strong>Hasznos tudni<\/strong>: a terhel\u00e9seloszt\u00f3 szintj\u00e9n enged\u00e9lyezheti a napl\u00f3kat, amelyek az S3-ban egy meghat\u00e1rozott helyen ker\u00fclnek ment\u00e9sre. <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/elasticloadbalancing\/latest\/application\/load-balancer-access-logs.html\">f\u00fcggv\u00e9ny haszn\u00e1lat\u00e1val hat\u00e1roznak meg,<\/a><\/noindex>. Innenr\u0151l export\u00e1lhat\u00f3k elemz\u0151 szolg\u00e1ltat\u00e1sokhoz, vagy SQL lek\u00e9rdez\u00e9seket v\u00e9gezhet\u00fcnk k\u00f6zvetlen\u00fcl az S3 adatokra a <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/athena\/latest\/ug\/application-load-balancer-logs.html\">Athena seg\u00edts\u00e9g\u00e9vel.<\/a><\/noindex>. Ez k\u00e9nyelmes \u00e9s nem ig\u00e9nyel semmif\u00e9le kieg\u00e9sz\u00edt\u0151 k\u00f3dot. Azt is javaslom, hogy \u00e1ll\u00edtsuk be a napl\u00f3k t\u00f6rl\u00e9s\u00e9t az S3 t\u00e1rol\u00f3b\u00f3l a megadott id\u0151tartam ut\u00e1n.<\/p>\n<p><\/p>\n<h3 id=\"ecs-task-definition\">ECS Task Definition<\/h3>\n<p><\/p>\n<p>Az el\u0151z\u0151 l\u00e9p\u00e9sek sor\u00e1n l\u00e9trehoztuk mindazt, ami a szolg\u00e1ltat\u00e1s infrastrukt\u00far\u00e1j\u00e1val kapcsolatos, most \u00e1tt\u00e9r\u00fcnk a kont\u00e9nerek le\u00edr\u00e1s\u00e1ra, amelyek futtatni fogunk. Ezt az ECS \u2192 Task Definitions r\u00e9szben tessz\u00fck.<\/p>\n<p><\/p>\n<p><strong>A futtat\u00e1si t\u00edpus kompatibilit\u00e1sa<\/strong> \u2014 v\u00e1lasszuk az EC2-t.<\/p>\n<p><\/p>\n<p><strong>Task execution IAM role<\/strong> \u2014 v\u00e1lasszuk <code>ecsTaskExecutionRole-t.<\/code>. Ezzel logok \u00edr\u00f3dnak, hozz\u00e1f\u00e9r\u00e9s enged\u00e9lyez\u0151dnek titkos v\u00e1ltoz\u00f3khoz, stb.<\/p>\n<p><\/p>\n<p>A Container Definitions r\u00e9szben kattintsunk az Add Container gombra.<\/p>\n<p><\/p>\n<p><strong>Image<\/strong> \u2014 a projekt k\u00f3dj\u00e1t tartalmaz\u00f3 k\u00e9p hivatkoz\u00e1sa, a jelen p\u00e9lda keret\u00e9ben \u00e9n egy nyilv\u00e1nos k\u00e9pet fogok haszn\u00e1lni a Docker Hub-b\u00f3l <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>Memory Limits<\/strong> \u2014 a kont\u00e9ner mem\u00f3riahat\u00e1rai. <strong>Hard Limit<\/strong> \u2014 kem\u00e9ny hat\u00e1r, ha a kont\u00e9ner t\u00fall\u00e9pi a megadott \u00e9rt\u00e9ket, a docker kill parancs v\u00e9grehajt\u00e1sra ker\u00fcl, a kont\u00e9ner azonnal le\u00e1ll. <strong>Soft Limit<\/strong> \u2014 l\u00e1gy hat\u00e1r, a kont\u00e9ner t\u00fall\u00e9pheti a megadott \u00e9rt\u00e9ket, de a feladatok g\u00e9pre val\u00f3 elhelyez\u00e9sekor figyelembe veszik ezt a param\u00e9tert. P\u00e9ld\u00e1ul, ha egy g\u00e9pen 4 GiB RAM van, \u00e9s a kont\u00e9ner soft limitje 2048 MiB, akkor maximum 2 ilyen kont\u00e9ner rel\u00e9lt feladat futhat ezen a g\u00e9pen. Val\u00f3j\u00e1ban a 4 GiB RAM kicsit kevesebb, mint 4096 MiB, ezt az ECS Instances f\u00fcl\u00f6n lehet megn\u00e9zni a klaszterben. Soft limit nem lehet nagyobb a hard limitn\u00e9l. Fontos meg\u00e9rteni, hogy ha egy feladatban t\u00f6bb kont\u00e9ner van, akkor azok hat\u00e1rai \u00f6sszead\u00f3dnak.<\/p>\n<p><\/p>\n<p><strong>Port mappings<\/strong> \u2014 ehhez t\u00edzszer kevesebb hardver sz\u00fcks\u00e9ges. <strong>Host port<\/strong> \u2014 megadunk 0-t, ez azt jelenti, hogy a port dinamikusan lesz hozz\u00e1rendelve, ezt a Target Group fogja figyelni. <strong>Container Port<\/strong> \u2014 a port, ahol az alkalmaz\u00e1sod fut, gyakran a futtat\u00e1si parancsban van megadva, vagy a k\u00f3dodban, Dockerfile-ban stb. A mi p\u00e9ld\u00e1nkban 3000-et haszn\u00e1lunk, mert ez szerepel a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bitnami\/bitnami-docker-node\/blob\/master\/example\/Dockerfile\">Dockerfile<\/a><\/noindex> haszn\u00e1lt k\u00e9pen.<\/p>\n<p><\/p>\n<p><strong>Health check<\/strong> \u2014 a kont\u00e9ner m\u0171k\u00f6d\u0151k\u00e9pess\u00e9g\u00e9nek ellen\u0151rz\u00e9si param\u00e9terei, ne keverj\u00fck \u00f6ssze azzal, amelyet a Target Group-ban \u00e1ll\u00edtottunk be.<\/p>\n<p><\/p>\n<p><strong>Environment<\/strong> \u2014 a k\u00f6rnyezeti be\u00e1ll\u00edt\u00e1sok. <strong>CPU units<\/strong> \u2014 hasonl\u00f3an a mem\u00f3ria korl\u00e1tokhoz, csak a processzorra vonatkozik. Minden processzormag \u2014 1024 egys\u00e9g, teh\u00e1t ha a szerveren k\u00e9tsz\u00e1l\u00fa processzor van, \u00e9s a kont\u00e9ner \u00e9rt\u00e9ke 512, akkor egy szerveren 4 feladat ind\u00edthat\u00f3 ezzel a kont\u00e9nerrel. A CPU egys\u00e9gek mindig a magok sz\u00e1m\u00e1t t\u00fckr\u00f6zik, nem lehetnek kicsit kevesebbek, mint a mem\u00f3ri\u00e1n\u00e1l.<\/p>\n<p><\/p>\n<p><strong>Parancs<\/strong> \u2014 parancs a szolg\u00e1ltat\u00e1s elind\u00edt\u00e1s\u00e1hoz a kont\u00e9neren bel\u00fcl, minden param\u00e9tert vessz\u0151vel kell megadni. Ez lehet gunicorn, npm stb. Ha nincs megadva, akkor a Dockerfile CMD ir\u00e1nyelv \u00e9rt\u00e9k\u00e9t haszn\u00e1lja. \u00cdrjuk be <code>npm,start<\/code>.<\/p>\n<p><\/p>\n<p><strong>K\u00f6rnyezeti v\u00e1ltoz\u00f3k<\/strong> \u2014 a kont\u00e9ner k\u00f6rnyezeti v\u00e1ltoz\u00f3i. Ezek lehetnek sima sz\u00f6veges adatok, valamint titkos v\u00e1ltoz\u00f3k a <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AmazonECS\/latest\/developerguide\/specifying-sensitive-data-secrets.html\">Secrets Manager<\/a><\/noindex> vagy <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>T\u00e1rol\u00e1s \u00e9s napl\u00f3z\u00e1s<\/strong> \u2014 itt be\u00e1ll\u00edtjuk a napl\u00f3z\u00e1st a CloudWatch Logs-ba (az AWS napl\u00f3z\u00f3szolg\u00e1ltat\u00e1sa). Ehhez elegend\u0151 bepip\u00e1lni az Auto-configure CloudWatch Logs opci\u00f3t. A Task Definition l\u00e9trehoz\u00e1sa ut\u00e1n automatikusan l\u00e9trej\u00f6n egy napl\u00f3csoport a CloudWatch-ban. Alap\u00e9rtelmez\u00e9s szerint a napl\u00f3k v\u00e9gtelen ideig t\u00e1rol\u00f3dnak benne, javaslom, hogy m\u00f3dos\u00edtsd a Retention period-ot a Never Expire \u00e9rt\u00e9kr\u0151l a k\u00edv\u00e1nt id\u0151tartamra. Ezt a CloudWatch Log csoportokn\u00e1l v\u00e9gezheted, kattints a jelenlegi id\u0151tartamra, \u00e9s v\u00e1lassz \u00faj \u00e9rt\u00e9ket.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sk\u00e1l\u00e1zhat\u00f3 API l\u00e9trehoz\u00e1sa AWS spot p\u00e9ld\u00e1nyokon\" 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 \u00e9s ECS Capacity Provider<\/h3>\n<p><\/p>\n<p>L\u00e9pj\u00fcnk az ECS \u2192 Clusters r\u00e9szhez, hogy klasztert hozzunk l\u00e9tre. Sablonk\u00e9nt v\u00e1lasszuk az EC2 Linux + Networking-ot.<\/p>\n<p><\/p>\n<p><strong>Klaszter neve<\/strong> \u2014 nagyon fontos, hogy ugyanezt a nevet adjuk meg, mint a Launch Template param\u00e9ter\u00e9ben <code>ECS_CLUSTER<\/code>, a mi eset\u00fcnkben \u2014 <code>DemoApiClusterProd<\/code>. Pip\u00e1ljuk be a Create an empty cluster opci\u00f3t. Opcion\u00e1lisan enged\u00e9lyezhetj\u00fck a Container Insights-ot, hogy a CloudWatch-ban n\u00e9zhess\u00fck a szolg\u00e1ltat\u00e1sok metrik\u00e1it. Ha mindent j\u00f3l csin\u00e1lt\u00e1l, az ECS Instances r\u00e9szben l\u00e1tni fogod az Auto Scaling csoportban l\u00e9trehozott g\u00e9peket.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sk\u00e1l\u00e1zhat\u00f3 API l\u00e9trehoz\u00e1sa AWS spot p\u00e9ld\u00e1nyokon\" src=\"\/wp-content\/uploads\/2020\/07\/cd70062c9783ae359a2b27cbfc66cbe3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L\u00e9pj\u00fcnk a <strong>Capacity Providers<\/strong> f\u00fclre, \u00e9s l\u00e9trehozunk egy \u00fajat. Eml\u00e9keztetlek, hogy ez arra szolg\u00e1l, hogy kezelj\u00fck a g\u00e9pek l\u00e9trehoz\u00e1s\u00e1t \u00e9s le\u00e1ll\u00edt\u00e1s\u00e1t az akt\u00edv ECS feladatok sz\u00e1m\u00e1nak megfelel\u0151en. Fontos megjegyezni, hogy a szolg\u00e1ltat\u00f3 csak egy csoporthoz k\u00f6thet\u0151.<\/p>\n<p><\/p>\n<p><strong>Auto Scaling group<\/strong> \u2014 v\u00e1lasszuk a kor\u00e1bban l\u00e9trehozott csoportot.<\/p>\n<p><\/p>\n<p><strong>Kezelt m\u00e9retez\u00e9s<\/strong> \u2014 kapcsoljuk be, hogy a szolg\u00e1ltat\u00f3 k\u00e9pes legyen m\u00e9retezni a szolg\u00e1ltat\u00e1st.<\/p>\n<p><\/p>\n<p><strong>C\u00e9lkapacit\u00e1s %<\/strong> \u2014 mekkora terhelts\u00e9g\u0171 g\u00e9pekre van sz\u00fcks\u00e9g\u00fcnk a feladatokhoz. Ha 100%-ot adunk meg, akkor minden g\u00e9p mindig a fut\u00f3 feladatokkal lesz elfoglalva. Ha 50%-ot adunk meg, akkor a fele g\u00e9p mindig szabad lesz. Ilyen esetben, ha hirtelen terhel\u00e9sn\u00f6veked\u00e9s l\u00e9p fel, az \u00faj feladatok azonnal a szabad g\u00e9pekre ker\u00fclnek, an\u00e9lk\u00fcl, hogy az instanci\u00e1k be\u00e1ll\u00edt\u00e1s\u00e1ra kellene v\u00e1rni.<\/p>\n<p><\/p>\n<p><strong>Kezelt le\u00e1ll\u00edt\u00e1si v\u00e9delem<\/strong> \u2014 bekapcsoljuk, ez a param\u00e9ter lehet\u0151v\u00e9 teszi a szolg\u00e1ltat\u00f3 sz\u00e1m\u00e1ra, hogy elt\u00e1vol\u00edtsa az instanci\u00e1k t\u00f6rl\u00e9s elleni v\u00e9delm\u00e9t. Ez akkor t\u00f6rt\u00e9nik, amikor a g\u00e9pen nincsenek akt\u00edv feladatok, \u00e9s lehet\u0151v\u00e9 teszi a Target capacity % be\u00e1ll\u00edt\u00e1s\u00e1t.<\/p>\n<p><\/p>\n<h3 id=\"ecs-service-i-nastroyka-masshtabirovaniya\">ECS Szolg\u00e1ltat\u00e1s \u00e9s a sk\u00e1l\u00e1z\u00e1si be\u00e1ll\u00edt\u00e1sok<\/h3>\n<p><\/p>\n<p>Utols\u00f3 l\u00e9p\u00e9s :) A szolg\u00e1ltat\u00e1s l\u00e9trehoz\u00e1s\u00e1hoz l\u00e9pj\u00fcnk a kor\u00e1bban l\u00e9trehozott klaszterre a Szolg\u00e1ltat\u00e1sok f\u00fclre.<\/p>\n<p><\/p>\n<p><strong>Ind\u00edt\u00e1si t\u00edpus<\/strong> \u2014 kattintsunk a Kapacit\u00e1son alapul\u00f3 strat\u00e9gia v\u00e1lt\u00e1s\u00e1ra \u00e9s v\u00e1lasszuk ki a kor\u00e1bban l\u00e9trehozott szolg\u00e1ltat\u00f3t.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sk\u00e1l\u00e1zhat\u00f3 API l\u00e9trehoz\u00e1sa AWS spot p\u00e9ld\u00e1nyokon\" src=\"\/wp-content\/uploads\/2020\/07\/9d9dfdd8e333cce24bfb048ac84097e4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Feladat defin\u00edci\u00f3<\/strong> \u2014 v\u00e1lasszuk ki a kor\u00e1bban l\u00e9trehozott Feladat defin\u00edci\u00f3t \u00e9s annak rev\u00edzi\u00f3j\u00e1t.<\/p>\n<p><\/p>\n<p><strong>Szolg\u00e1ltat\u00e1s neve<\/strong> \u2014 hogy ne zavarodjunk \u00f6ssze, mindig ugyanazt adjuk meg, mint a Feladat defin\u00edci\u00f3.<\/p>\n<p><\/p>\n<p><strong>Szolg\u00e1ltat\u00e1s t\u00edpusa<\/strong> \u2014 mindig Replika.<\/p>\n<p><\/p>\n<p><strong>Feladatok sz\u00e1ma<\/strong> \u2014 a k\u00edv\u00e1nt akt\u00edv feladatok sz\u00e1ma a szolg\u00e1ltat\u00e1sban. Ezt a param\u00e9tert a sk\u00e1l\u00e1z\u00e1s ir\u00e1ny\u00edtja, de akkor is meg kell adni.<\/p>\n<p><\/p>\n<p><strong>Minim\u00e1lis eg\u00e9szs\u00e9ges sz\u00e1zal\u00e9k<\/strong> \u00e9s <strong>Maxim\u00e1lis sz\u00e1zal\u00e9k<\/strong> \u2014 meghat\u00e1rozz\u00e1k a feladatok viselked\u00e9s\u00e9t telep\u00edt\u00e9s sor\u00e1n. Az alap\u00e9rtelmezett \u00e9rt\u00e9kek 100 \u00e9s 200, ami azt jelenti, hogy a telep\u00edt\u00e9s pillanat\u00e1ban a feladatok sz\u00e1ma megdupl\u00e1z\u00f3dik, majd visszat\u00e9r a k\u00edv\u00e1nt \u00e9rt\u00e9khez. Ha 1 feladat fut, min=0 \u00e9s max=100, akkor a telep\u00edt\u00e9skor az elpusztul, \u00e9s azt\u00e1n \u00fajraindul egy \u00faj, teh\u00e1t lesz \u00e1ll\u00e1sid\u0151. Ha 1 feladat fut, min=50, max=150, akkor a telep\u00edt\u00e9s egy\u00e1ltal\u00e1n nem fog megt\u00f6rt\u00e9nni, mert az 1 feladatot nem lehet felezni vagy m\u00e1sf\u00e9l szoros\u00e1ra n\u00f6velni.<\/p>\n<p><\/p>\n<p><strong>Telep\u00edt\u00e9si t\u00edpus<\/strong> \u2014 hagyjuk Rolling update.<\/p>\n<p><\/p>\n<p><strong>Elhelyez\u00e9si sablonok<\/strong> \u2014 a feladatok g\u00e9pekre val\u00f3 elhelyez\u00e9s\u00e9nek szab\u00e1lyai. Az alap\u00e9rtelmezett AZ Balanced Spread \u2014 ez azt jelenti, hogy minden \u00faj feladat egy \u00faj instanci\u00e1ra ker\u00fcl, am\u00edg a g\u00e9pek minden el\u00e9rhet\u0151s\u00e9gi z\u00f3n\u00e1ban fel nem \u00e1llnak. Mi \u00e1ltal\u00e1ban BinPack \u2014 CPU \u00e9s Spread \u2014 AZ-t csin\u00e1lunk, enn\u00e9l a politik\u00e1n\u00e1l a feladatok a lehet\u0151 legszorosabban ker\u00fclnek elhelyez\u00e9sre egy g\u00e9pen a CPU szerint. Ha \u00faj g\u00e9p l\u00e9trehoz\u00e1sa sz\u00fcks\u00e9ges, az \u00faj el\u00e9rhet\u0151s\u00e9gi z\u00f3n\u00e1ban j\u00f6n l\u00e9tre.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sk\u00e1l\u00e1zhat\u00f3 API l\u00e9trehoz\u00e1sa AWS spot p\u00e9ld\u00e1nyokon\" src=\"\/wp-content\/uploads\/2020\/07\/6430bdf046fc5b970e0afbbf0d9ef65e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Terhel\u00e9seloszt\u00f3 t\u00edpusa<\/strong> \u2014 v\u00e1lasszuk az Alkalmaz\u00e1s terhel\u00e9seloszt\u00f3t.<\/p>\n<p><\/p>\n<p><strong>Szolg\u00e1ltat\u00e1s IAM szerep<\/strong> \u2014 v\u00e1lasszuk a <code>ecsServiceRole<\/code>.<\/p>\n<p><\/p>\n<p><strong>Terhel\u00e9seloszt\u00f3 neve<\/strong> \u2014 v\u00e1lasszuk a kor\u00e1bban l\u00e9trehozott terhel\u00e9seloszt\u00f3t.<\/p>\n<p><\/p>\n<p><strong>Eg\u00e9szs\u00e9g\u00fcgyi ellen\u0151rz\u00e9si t\u00fcrelmi id\u0151<\/strong> \u2014 sz\u00fcnet az \u00faj feladat telep\u00edt\u00e9se ut\u00e1n az eg\u00e9szs\u00e9g\u00fcgyi ellen\u0151rz\u00e9sek v\u00e9grehajt\u00e1sa el\u0151tt, mi \u00e1ltal\u00e1ban 60 m\u00e1sodpercet \u00e1ll\u00edtunk be.<\/p>\n<p><\/p>\n<p><strong>Kont\u00e9ner a terhel\u00e9seloszt\u00e1shoz<\/strong> \u2014 a Target group name pontban v\u00e1lasszuk ki a kor\u00e1bban l\u00e9trehozott csoportot, \u00e9s minden automatikusan ki fog t\u00f6lt\u0151dni.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sk\u00e1l\u00e1zhat\u00f3 API l\u00e9trehoz\u00e1sa AWS spot p\u00e9ld\u00e1nyokon\" src=\"\/wp-content\/uploads\/2020\/07\/c067868ff73c25c3d9b65e02be64f5c9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Szolg\u00e1ltat\u00e1s Automatikus M\u00e9retez\u00e9s<\/strong> \u2014 a szolg\u00e1ltat\u00e1s m\u00e9retez\u00e9si param\u00e9terei. V\u00e1lasszuk a Szolg\u00e1ltat\u00e1s Automatikus M\u00e9retez\u00e9s konfigur\u00e1l\u00e1sa lehet\u0151s\u00e9get a szolg\u00e1ltat\u00e1s k\u00edv\u00e1nt sz\u00e1m\u00e1nak be\u00e1ll\u00edt\u00e1s\u00e1hoz. \u00c1ll\u00edtsuk be a minim\u00e1lis \u00e9s maxim\u00e1lis feladatok sz\u00e1m\u00e1t a m\u00e9retez\u00e9shez.<\/p>\n<p><\/p>\n<p><strong>IAM szerep a Szolg\u00e1ltat\u00e1s Automatikus M\u00e9retez\u00e9shez<\/strong> \u2014 v\u00e1lasszuk a <code>AWSServiceRoleForApplicationAutoScaling_ECSService<\/code>.<\/p>\n<p><\/p>\n<p><strong>Automatikus feladat m\u00e9retez\u00e9si szab\u00e1lyok<\/strong> \u2014 szab\u00e1lyok a m\u00e9retez\u00e9shez. K\u00e9t t\u00edpus l\u00e9tezik:<\/p>\n<p><\/p>\n<ol>\n<li><strong>C\u00e9lzott nyomk\u00f6vet\u00e9s<\/strong> \u2014 a c\u00e9l metrika (CPU\/RAM kihaszn\u00e1l\u00e1s vagy k\u00e9rd\u00e9sek sz\u00e1ma minden feladatn\u00e1l) nyomk\u00f6vet\u00e9se. P\u00e9ld\u00e1ul, ha azt akarjuk, hogy a CPU \u00e1tlagos terhel\u00e9se 85% legyen, amikor ez meghaladja, \u00faj feladatok ker\u00fclnek hozz\u00e1ad\u00e1sra, am\u00edg el nem \u00e9ri a c\u00e9l\u00e9rt\u00e9ket. Ha a terhel\u00e9s alacsonyabb, akkor a feladatokat \u00e9ppen ellenkez\u0151leg elt\u00e1vol\u00edtj\u00e1k, ha nincs bekapcsolva a lefel\u00e9 m\u00e9retez\u00e9s v\u00e9delme (<strong>Lefel\u00e9 m\u00e9retez\u00e9s letilt\u00e1sa<\/strong>).<\/li>\n<li><strong>L\u00e9p\u00e9s alap\u00fa m\u00e9retez\u00e9s<\/strong> \u2014 reakci\u00f3 b\u00e1rmilyen esem\u00e9nyre. Itt be\u00e1ll\u00edthatjuk a reakci\u00f3t b\u00e1rmilyen esem\u00e9nyre (CloudWatch Alarm), amikor az bek\u00f6vetkezik, megadhatunk vagy elt\u00e1vol\u00edthatunk egy meghat\u00e1rozott sz\u00e1m\u00fa feladatot, vagy megadhatjuk a pontos feladatok sz\u00e1m\u00e1t.<\/li>\n<\/ol>\n<p><\/p>\n<p>A szolg\u00e1ltat\u00e1snak lehet t\u00f6bb m\u00e9retez\u00e9si szab\u00e1lya, ez hasznos lehet, fontos figyelni, hogy ne \u00fctk\u00f6zzenek egym\u00e1ssal.<\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Z\u00e1r\u00e1s<\/h2>\n<p><\/p>\n<p>Ha k\u00f6vetted az \u00fatmutat\u00f3t, \u00e9s ugyanazt a Docker im\u00e1zst haszn\u00e1ltad, a szolg\u00e1ltat\u00e1sodnak ennek az oldalnak kell megjelen\u00edtenie.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Sk\u00e1l\u00e1zhat\u00f3 API l\u00e9trehoz\u00e1sa AWS spot p\u00e9ld\u00e1nyokon\" src=\"\/wp-content\/uploads\/2020\/07\/ac592e3194480ac8b347a3a1faf0cee0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ol>\n<li>L\u00e9trehoztunk egy sablont, amely alapj\u00e1n minden g\u00e9p elindul a szolg\u00e1ltat\u00e1sban. Megtanultuk friss\u00edteni a g\u00e9peket a sablon m\u00f3dos\u00edt\u00e1sa eset\u00e9n is.<\/li>\n<li>Be\u00e1ll\u00edtottuk a spot p\u00e9ld\u00e1ny le\u00e1ll\u00edt\u00f3 jel\u00e9nek kezel\u00e9s\u00e9t, \u00edgy a jelz\u00e9s k\u00e9zhez v\u00e9tele ut\u00e1n egy percen bel\u00fcl az \u00f6sszes fut\u00f3 feladat elt\u00e1vol\u00edt\u00e1sra ker\u00fcl a g\u00e9pr\u0151l, ez\u00e1ltal semmi nem v\u00e9sz el \u00e9s nem szakad meg.<\/li>\n<li>Felemelkedt\u00fcnk egy terhel\u00e9seloszt\u00f3t, hogy egyenletesen elosszuk a terhel\u00e9st a g\u00e9pek k\u00f6z\u00f6tt.<\/li>\n<li>L\u00e9trehoztunk egy szolg\u00e1ltat\u00e1st, amely spot p\u00e9ld\u00e1nyokon m\u0171k\u00f6dik, ezzel a g\u00e9pek k\u00f6lts\u00e9g\u00e9t k\u00f6r\u00fclbel\u00fcl 3-szor cs\u00f6kkentj\u00fck.<\/li>\n<li>Automatikus m\u00e9retez\u00e9st \u00e1ll\u00edtottunk be mindk\u00e9t ir\u00e1nyba, hogy kezelj\u00fck a terhel\u00e9s n\u00f6veked\u00e9s\u00e9t, de ugyanakkor ne fizess\u00fcnk az \u00fcresj\u00e1rat\u00e9rt.<\/li>\n<li>Kapacit\u00e1s Szolg\u00e1ltat\u00f3t haszn\u00e1lunk, hogy az alkalmaz\u00e1s kezelje az infrastrukt\u00far\u00e1t (g\u00e9peket), \u00e9s ne ford\u00edtva.<\/li>\n<li>J\u00f3l csin\u00e1ltuk.<\/li>\n<\/ol>\n<p><\/p>\n<p>Ha el\u0151re l\u00e1that\u00f3 terhel\u00e9sugr\u00e1said vannak, p\u00e9ld\u00e1ul egy nagy email kamp\u00e1nyt hirdetsz, be\u00e1ll\u00edthatod a m\u00e9retez\u00e9st a <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/autoscaling\/application\/userguide\/application-auto-scaling-scheduled-scaling.html\">menetrend szerint<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Tov\u00e1bbi lehet\u0151s\u00e9g a rendszered k\u00fcl\u00f6nb\u00f6z\u0151 r\u00e9szeib\u0151l sz\u00e1rmaz\u00f3 adatok alapj\u00e1n t\u00f6rt\u00e9n\u0151 sk\u00e1l\u00e1z\u00e1s. P\u00e9ld\u00e1ul van funkci\u00f3nk <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.adapty.io\/promo-campaigns\">szem\u00e9lyre szabott prom\u00f3ci\u00f3k k\u00fcld\u00e9s\u00e9re<\/a><\/noindex> mobilalkalmaz\u00e1s felhaszn\u00e1l\u00f3inak. N\u00e9ha a kamp\u00e1ny 1M+ emberhez jut el. Egy ilyen k\u00fcld\u00e9st k\u00f6vet\u0151en mindig jelent\u0151s n\u00f6veked\u00e9s tapasztalhat\u00f3 az API-h\u00edv\u00e1sok sz\u00e1m\u00e1ban, mivel sok felhaszn\u00e1l\u00f3 egyszerre l\u00e9p be az alkalmaz\u00e1sba. Ha teh\u00e1t azt l\u00e1tjuk, hogy a prom\u00f3ci\u00f3s push \u00fczenetek k\u00fcld\u00e9s\u00e9re v\u00e1rakoz\u00f3 sorban jelent\u0151sen t\u00f6bb van a szok\u00e1sos mutat\u00f3khoz k\u00e9pest, azonnal t\u00f6bb g\u00e9pet \u00e9s feladatot ind\u00edthatunk, hogy felk\u00e9sz\u00fcltek legy\u00fcnk a terhel\u00e9sre.<\/p>\n<p><\/p>\n<p>\u00d6r\u00f6mmel v\u00e1rom, ha a megjegyz\u00e9sekben \u00e9rdekes spott infrastruktur\u00e1lis \u00e9s ECS haszn\u00e1lati esettanulm\u00e1nyokat osztotok meg, vagy b\u00e1rmi a sk\u00e1l\u00e1z\u00e1sr\u00f3l.<\/p>\n<p><\/p>\n<p>Hamarosan cikkek fognak megjelenni arr\u00f3l, hogyan kezel\u00fcnk ezer analitikai esem\u00e9nyt m\u00e1sodpercenk\u00e9nt d\u00f6nt\u0151en serverless stack-en (p\u00e9nz\u00e9rt), \u00e9s hogyan val\u00f3s\u00edtjuk meg a szolg\u00e1ltat\u00e1sok telep\u00edt\u00e9s\u00e9t a GitLab CI \u00e9s a Terraform Cloud seg\u00edts\u00e9g\u00e9vel.<\/p>\n<p><\/p>\n<p>K\u00f6vesd a munk\u00e1nkat, \u00e9rdekes lesz!<\/p>\n<p class=\"for_users_only_msg\">Csak a regisztr\u00e1lt felhaszn\u00e1l\u00f3k vehetnek r\u00e9szt a szavaz\u00e1son. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">K\u00e9rem, jelentkezzen be.<\/a><\/noindex>, k\u00e9rem.<\/p>\n<h2 class=\"default-block__polling-title\">Haszn\u00e1lj\u00e1tok spot instance-eket a produkci\u00f3ban?<\/h2>\n<ul class=\"poll-result\">\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">22,2%<\/strong>Igen6<\/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>Nem 18<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">11,1%<\/strong>Cikkb\u0151l tudtam meg r\u00f3luk, tervezem a haszn\u00e1latukat.<\/p>\n<\/li>\n<\/ul>\n<p>    27 felhaszn\u00e1l\u00f3 szavazott. 5 felhaszn\u00e1l\u00f3 tart\u00f3zkodott.<br \/>\n<br \/>Forr\u00e1s: <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\/hu\/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=\"hu_HU\" \/>\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\/hu\/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\udd47Sk\u00e1l\u00e1zhat\u00f3 API l\u00e9trehoz\u00e1sa AWS spot instance-eken | ProHoster","description":"Hell\u00f3 mindenkinek! A nevem Kirill, az Adapty CTO-ja vagyok.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/sozdanie-masshtabiruemogo-api-na-spotovyh-instansah-aws","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/87393","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=87393"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/87393\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/87394"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=87393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=87393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=87393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}