Skaalautuva nettipalvelu AWS:ssä: serverless, Fargate vai EC2 Auto Scaling?
Kolme realistista tapaa: Lambda skaalaa pyynnöittäin, Fargate luo kontteja tarpeen mukaan, EC2 Auto Scaling Group käynnistää virtuaalikoneita kuorman mukaan. Alla myös hintavertailu tyhjäkäynnillä, miljoonalla ja kymmenellä miljoonalla pyynnöllä — ALB on usein kalliimpi kuin pieni compute.
Tavoite on sama: sivusto tai API kestää enemmän (ja vähemmän) liikennettä ilman että avaat konsolia joka piikissä. AWS:ssä “skaalautuva” ei ole yksi tuote — se on arkkitehtuuri. Alla kolme polkua yksinkertaisesta monimutkaiseen, plus yhteiset rakennuspalikat.
Valitse polku
| Polku | Skaalaa mitä? | Milloin |
|---|---|---|
| A. Serverless Lambda + API Gateway |
Funktioita / pyyntöjä | API, webhookit, epäsäännöllinen kuorma; ei pitkään pyörivää prosessia |
| B. Kontit ECS Fargate + ALB |
Konttitehtäviä | Docker-sovellus, et halua ylläpitää EC2:ta |
| C. VPS:t tarpeen mukaan EC2 ASG + ALB |
Virtuaalikoneita | Tuttu VM-malli, täysi kontrolli OS:ään, Spot/Savings Plan -optimointi |
Kaikissa kolmessa staattinen frontend voi olla erillään: S3 + CloudFront (tai Amplify). Tietokanta kannattaa erottaa compute-kerroksesta (RDS / Aurora) — ks. managed vs VPS Postgres.
Yhteiset osat (lähes aina)
- DNS — Route 53 (tai ulkoinen DNS) → CloudFront / ALB / API Gateway.
- CDN — CloudFront leikkaa originin kuormaa; usein tärkeämpi kuin “enemmän koneita”.
- Tallennus — S3 staattiselle ja uploadeille; ei sovelluksen paikalliselle levylle.
- Tietokanta — hallittu Postgres/MySQL (RDS) tai erillinen VPS; skaalaa compute ja kanta erikseen.
- Salaisuudet — Secrets Manager / SSM Parameter Store, ei .env gitiin.
AWS ei skaalaa “kävijämäärän” mukaan Analyticsista. Se skaalaa mittareita: pyyntöjä, CPU:ta, jonon pituutta, p95-latenssia.
A. Serverless: Lambda + API Gateway
Jokainen HTTP-pyyntö (tai tapahtuma) käynnistää funktion. Kuorman noustessa AWS ajaa enemmän rinnakkaisia suorituksia; kuorman laskiessa maksat vähemmän tai et juuri mitään.
Internet → CloudFront (valinnainen) → API Gateway (HTTP API) → Lambda (N rinnakkaista) → RDS / DynamoDB / S3
Mitä rakennat
- Funktio(t) Node/Python/Go… — yksi reitti tai monoliitti-handler.
- API Gateway HTTP API (yleensä halvempi ja riittävä REST/JSON:lle).
- IAM-rooli, VPC-liitos vain jos Lambda tarvitsee yksityistä RDS:ää (lisää kustannusta ja kylmäkäynnistystä).
- Valinnainen: CloudFront edessä, WAF, Cognito/auth.
Hyvä / huono
- + Ei ASG:tä, ei EC2-päivityksiä; skaalaus sisäänrakennettu.
- + Tyhjäkäynti halpaa — sopii sparingly käytettyyn API:in.
- − Cold start, 15 min max kesto, ei “aina päällä” -websocket-palvelinta ilman erillistä palvelua (API GW WebSocket / AppSync).
- − Pitkään pyörivä tai raskas tausta → Fargate/EC2 tai erillinen worker (SQS + Lambda).
Hinnoittelulogiikka (pyyntö + GB-sekunti): serverless-vertailu.
B. Kontit: ECS Fargate + ALB
Pakkaat sovelluksen Docker-imageen. Fargate ajaa kontteja ilman että hallitset virtuaalikoneita. Service Auto Scaling säätää tehtävien (task) määrää CPU/pyyntömittareilla.
Internet → ALB → ECS Service (Fargate tasks 1…N) → RDS / ElastiCache / S3
Mitä rakennat
- ECR-repositorio + image CI:stä (GitHub Actions / CodePipeline).
- ECS-klusteri + task definition (CPU/RAM) + service.
- Application Load Balancer + target group (HTTP health check).
- Service Auto Scaling: min/max tasks, target tracking (esim. CPU 50 % tai ALB RequestCountPerTarget).
Hyvä / huono
- + Sama Docker-kuva lokalista tuotantoon; ei OS-patchausta EC2:lla.
- + Sopii pitkään pyörivään web-appiin paremmin kuin Lambda.
- − ALB + aina vähintään 1 task = kiinteä pohjakulu (toisin kuin “nukkuva” Lambda).
- − Fargate-yksikköhinta on usein korkeampi kuin itse hallittu EC2 — maksat mukavuudesta.
C. VPS:t tarpeen mukaan: EC2 Auto Scaling Group + ALB
Klassinen malli: AMI tai launch template määrittää koneen. Auto Scaling Group (ASG) pitää ryhmässä min–max instanssia ja luo/tuhoaa EC2:ita mittareiden mukaan. ASG-ominaisuus maksaa 0 € — maksat käynnissä olevista koneista, levyistä ja yleensä ALB:stä.
Internet → ALB → Auto Scaling Group (EC2 1…N) → RDS / S3
Mitä rakennat
- Launch template: AMI, instanssityyppi, security group, user data (asenna app / vedä image).
- ASG: min/desired/max, scaling policy (target tracking).
- ALB + target group — web-liikenteelle. Pelkille SQS-työläisille ALB ei ole pakollinen.
- Stateless-app: sessiot Redis/DB:hen, ei paikalliselle levylle.
Hyvä / huono
- + Tuttu Linux-VPS; Spot-instanssit ja Savings Plans voivat laskea hintaa.
- + Täysi kontrolli (kernel, agentit, erikoisajurit).
- − Patchaus, AMI-putki, boot-aika ennen kuin uusi kone ottaa liikennettä.
- − Yksi aina-päällä oleva EC2 + ALB on kalliimpi tyhjäkäynnillä kuin Lambda.
EC2-hintoja suhteessa muihin pilviin: VPS-vertailu. Kenellä muilla on ASG-tyylinen tuote: autoscaling-artikkeli.
Tarvitaanko load balancer aina?
Ei. ASG voi skaalata työläisiä ilman ALB:tä (esim. SQS-kuluttajat). Lambda käyttää API Gatewayä / Function URLia — ei Classic/ALB:tä.
Käytännössä kyllä webille ja HTTP-API:lle usealla instanssilla/taskilla: asiakas tarvitsee yhden vakaana pysyvän päätepisteen, joka jakaa liikenteen terveisiin kohteisiin. Vertailussamme ALB:n perusarvio on noin 14 €/kk + LCU-käyttö (load-balancerit) — käyttöpohjainen, ei kiinteä “pakettihinta”.
Hintavertailu: kolme skenaariota
Alla vain compute + liikenteen jakaja (API Gateway tai ALB). RDS, S3, CloudFront ja egress jätetään pois — ne ovat samoja kaikilla poluilla. Alue: Tukholma (eu-north-1) missä datamme sen tietää. Alv 0 %. USD→EUR samalla kurssilla kuin VPS-datassa (~1,14).
Yksikköhinnat (lähteet)
| Komponentti | Hinta | Lähde |
|---|---|---|
| Lambda | $0,20 / 1M pyyntöä + $0,0000167 / GB-s ilmaistaso: 1M + 400k GB-s / kk |
serverless |
| API Gateway HTTP API | $1,00 / 1M pyyntöä (ensimmäiset 300M) | AWS pricing |
| Fargate Linux/ARM | $0,0356 / vCPU-h + $0,00392 / GB-h | AWS price list eu-north-1 |
| EC2 t4g.small (2 vCPU / 2 Gt) | 14,56 €/kk (sis. ~50 Gt gp3) | VPS / EC2 |
| ALB | ~14,41 €/kk + LCU | load-balancerit |
| Auto Scaling Group | 0 € | AWS dokumentaatio |
Fargate-esimerkit ARM (Graviton). x86 on ~25 % kalliimpi samalla speksillä. ALB-LCU ja egress kasvavat kuorman mukana — luvut ovat pohja, ei katto.
Tyhjäkäynnillä Lambda voittaa selvästi. Aina-päällä-webissä ALB (~14 €) on usein isompi kiinteä erä kuin itse pieni Fargate-taski tai t4g.small.
Skenaario 1 · tyhjäkäynti / webhook (~100 000 pyyntöä/kk)
| Polku | Oletus | ≈ €/kk |
|---|---|---|
| A. Lambda + HTTP API | 512 Mt, ~200 ms · ilmaistasolla Lambda ≈ 0 | ~0,1 |
| A. ilman ilmaistasoa | sama kuorma, täysi hinta | ~0,3 |
| B. Fargate + ALB | 1× 0,25 vCPU / 0,5 Gt ARM aina päällä | ~21 |
| C. EC2 ASG + ALB | min 1× t4g.small | ~29 |
Fargate ≈ 7 € + ALB ≈ 14 €. EC2 ≈ 15 € + ALB ≈ 14 €. Serverless voittaa kertaluokkaa — et maksa tyhjästä koneesta.
Skenaario 2 · pieni API (~1 miljoona pyyntöä/kk)
| Polku | Oletus | ≈ €/kk |
|---|---|---|
| A. Lambda + HTTP API | 512 Mt, ~200 ms · ilmaistasolla | ~0,9 |
| A. ilman ilmaistasoa | sama | ~2,5 |
| B. Fargate + ALB | 1× 0,5 vCPU / 1 Gt ARM | ~28 |
| C. EC2 ASG + ALB | 1× t4g.small | ~29 |
1M pyyntöä ≈ 0,4 req/s keskimäärin — yksi pieni task/instanssi riittää. Fargate 0,5/1 ≈ 14 € + ALB; EC2 t4g.small on speksiltään isompi (2 vCPU / 2 Gt) mutta lähes sama lasku ALB:n kanssa.
Skenaario 3 · kiireinen API (~10 miljoonaa pyyntöä/kk)
| Polku | Oletus | ≈ €/kk |
|---|---|---|
| A. Lambda + HTTP API | 512 Mt, ~100 ms · ilman ilmaistasoa | ~18 |
| A. raskaampi handler | 512 Mt, ~200 ms · ilman ilmaistasoa | ~25 |
| B. Fargate + ALB | 1× 0,5/1 ARM (jos kestää ~4 req/s avg) | ~28 |
| B. skaalattu | 2× 0,5/1 ARM + ALB | ~42 |
| C. EC2 ASG + ALB | 1× t4g.small | ~29 |
| C. piikki | 3× t4g.small + ALB (ASG max) | ~58 |
10M/kk ≈ 4 req/s keskimäärin — piikit ratkaisevat tarvitaanko 1 vai N. Lambdassa API Gateway (~10 $ / 10M) on iso osa; Function URL ohittaa Gatewayn mutta menettää sen ominaisuudet. EC2/Fargate-lasku nousee vasta kun lisäät koneita/taskeja, ei lineaarisesti jokaisesta pyynnöstä.
Mitä luvut tarkoittavat valinnalle
- Epäsäännöllinen / pieni kuorma: Lambda. Pohjakulu lähellä nollaa.
- Aina päällä oleva web/API, Docker: Fargate + ALB — mukavuus maksaa; ARM halvempi.
- Halvin aina-päällä AWS:ssä samalla speksillä: usein EC2 (tai Lightsail ilman ASG:tä) — Fargate on kalliimpi per vCPU, mutta et patchaa OS:ää.
- Lightsail 2 Gt ilman autoscaléa: ~10,5 €/kk (VPS) — halvampi kuin ASG+ALB, ei horisontaalista automaattia.
Älä budjetoi “ASG:n hintaa” (0 €). Budjetoi min capacity + ALB/API GW + piikin huippu + egress + kanta.
Kolme realistista aloitusta
- Pieni API / webhook: Lambda + HTTP API (+ ehkä CloudFront). Ei ASG:tä.
- Docker-webapp, tiimi tuntee kontit: Fargate + ALB, min 1–2 taskia, max sen mukaan mitä budjetti kestää.
- “Haluan Linux-koneita jotka lisääntyvät itse”: EC2 ASG + ALB, launch template, health check joka oikeasti kertoo onko app valmis.
Jos et ole jo AWS-ekosysteemissä ja tarvitset vain yhden koneen Helsingissä, eurooppalainen VPS + myöhemmin hot resize / K8s voi olla halvempi — ks. hyperscalerin kokonaiskustannus. AWS kannattaa kun tarvitset juuri näitä managed-osia (jonot, Lambda, tiukka integraatio) tai olet jo siellä.
Yhteenveto
Serverless skaalaa pyynnöt. Fargate skaalaa kontit. EC2 ASG skaalaa virtuaalikoneet. Kaikki kolme voivat palvella nettipalvelua; ero on kontrollissa, pohjakulussa ja siinä, miten sovellus pakataan.
Aloita yksinkertaisimmasta joka täyttää tarpeen. Lisää ALB ja horisontaalinen skaalaus kun yksi instanssi ei riitä — ei “varmuuden vuoksi” ensimmäisenä päivänä.
Avaa serverless-vertailu Lambda · Azure Functions · Cloud Run · pyyntöhinta Tai: kenellä muilla on Auto Scaling AWS · Azure · GCP · DigitalOcean · UpCloud · Hetzner…