# Fargate vs App Runner, la cost: aceeași aplicație, calculată în ambele variante
<!-- meta: Fargate vs App Runner la cost, calculat pe aceeași aplicație Next.js: prețuri de listă, ALB, IPv4 public și NAT incluse, plus pragul de la care câștigă Fargate. -->

Rulăm trei aplicații Next.js pe AWS App Runner și am scris [un review sincer după șase luni](/ro/blog/aws-app-runner-review-six-months). Cea mai frecventă întrebare despre articolul acela nu e despre timeout-uri sau health check-uri. E „App Runner nu e mai scump decât Fargate?”

Pe oră de vCPU, da, cu aproximativ 58 %. Pe lună, pentru majoritatea echipelor mici, nu. Diferența stă în ce plătești cât timp nu folosește nimeni aplicația și în infrastructura de care Fargate are nevoie, iar App Runner o include. Mai jos e aceeași aplicație calculată în ambele variante, la prețuri de listă în us-east-1, cu fiecare linie care apare pe factură.

## Cele două liste de prețuri

| | App Runner | Fargate (Linux, x86) | Fargate (Linux, ARM) |
|---|---|---|---|
| vCPU | $0,064 pe vCPU-oră, **doar cât procesează cereri** | $0,040478 pe vCPU-oră, mereu | $0,03238 pe vCPU-oră, mereu |
| Memorie | $0,007 pe GB-oră, mereu | $0,004446 pe GB-oră, mereu | $0,00356 pe GB-oră, mereu |
| Load balancer | Inclus | ALB: $0,0225/oră + $0,008 pe LCU-oră | la fel |
| Endpoint HTTPS, certificat TLS | Inclus | Certificat ACM pe ALB (gratuit) | la fel |
| IPv4 public | Nu ți se facturează | $0,005/oră pe adresă (ALB și task-uri) | la fel |
| Savings Plans / Spot | Nu | Compute Savings Plans, Fargate Spot | la fel |

Ambele facturează pe secundă, cu un minim de un minut. Rândul care contează e primul. App Runner împarte viața unei instanțe în două stări: **provisioned** (există, e caldă, așteaptă) și **active** (procesează cel puțin o cerere). În starea provisioned plătești doar memoria. Fargate nu are o astfel de stare: un task pornit plătește vCPU și memorie în fiecare secundă în care există, fie că servește o mie de cereri, fie niciuna.

## Aplicația pe care am calculat

E aplicația publică din [analiza facturii noastre AWS](/ro/blog/aws-bill-of-a-three-person-startup): o aplicație Next.js pentru un client din SUA, două instanțe mereu pornite, de 2 vCPU și 4 GB fiecare, ca un deploy sau un crash să nu o lase niciodată fără capacitate. 730 de ore într-o lună.

**App Runner.** Memoria se plătește non-stop: 2 instanțe × 4 GB × $0,007 × 730 h = **$40,88**. vCPU-ul se plătește doar cât instanța e activă: 2 instanțe × 2 vCPU × $0,064 × 730 h = $186,88 *dacă ambele ar fi ocupate în fiecare secundă a lunii*. Cifra reală e $186,88 înmulțit cu procentul din timp în care instanțele procesează cereri. O să-i spunem gradul de ocupare.

**Fargate, x86.** Un task costă 2 × $0,040478 + 4 × $0,004446 = $0,0987 pe oră. Două task-uri timp de o lună: **$144,16**. Apoi vin piesele la care App Runner nu te pune să te gândești:

- Un Application Load Balancer: $0,0225 × 730 = $16,43, plus în medie cam un LCU la trafic modest, $5,84. **$22,27.**
- IPv4 public pentru ALB, câte unul pe availability zone, două zone: **$7,30**.
- Task-urile au nevoie de o cale spre internet ca să cheme API-uri externe, să tragă imagini și să trimită emailuri. Fie subrețele publice cu un IP public pe task (**$7,30**), fie subrețele private și un [NAT gateway](/ro/blog/nat-gateway-the-most-expensive-line-you-do-not-see) ($32,85 plus $3,65 pentru adresa lui plus $0,045 pe GB procesat, **~$37**).

Total pentru Fargate pe x86: **~$181** cu subrețele publice, **~$210** cu subrețele private și NAT. Aceeași configurație pe ARM (Graviton), subrețele publice: **~$152**.

## Unde se intersectează

Factura App Runner e $40,88 plus $186,88 × gradul de ocupare. A lui Fargate e o sumă fixă. Pe același grafic:

<div class="article-figure">
<svg viewBox="0 0 900 340" width="100%" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Grafic cu costul lunar în funcție de gradul de ocupare. App Runner crește de la aproximativ 41 de dolari la 0 % la aproximativ 228 de dolari la 100 %. Fargate e constant: circa 152 de dolari pe ARM, 181 pe x86 cu subrețele publice, 210 pe x86 cu NAT gateway. App Runner e mai ieftin sub 60, 75, respectiv 91 % ocupare.">
<g font-family="Inter,system-ui,sans-serif" font-size="12">
<text x="80" y="24" fill="#f1f3ff" font-size="14" font-weight="700">Cost lunar, 2 × (2 vCPU, 4 GB), prețuri de listă us-east-1</text>
<g stroke="#2a3150" stroke-width="1">
<line x1="80" y1="260" x2="820" y2="260"/><line x1="80" y1="204.9" x2="820" y2="204.9"/><line x1="80" y1="149.8" x2="820" y2="149.8"/><line x1="80" y1="94.8" x2="820" y2="94.8"/><line x1="80" y1="40" x2="820" y2="40"/>
</g>
<g fill="#9aa3c7" text-anchor="end">
<text x="70" y="264">$0</text><text x="70" y="209">$60</text><text x="70" y="154">$120</text><text x="70" y="99">$180</text><text x="70" y="44">$240</text>
</g>
<g fill="#9aa3c7" text-anchor="middle">
<text x="80" y="280">0 %</text><text x="265" y="280">25 %</text><text x="450" y="280">50 %</text><text x="635" y="280">75 %</text><text x="820" y="280">100 %</text>
<text x="450" y="300">grad de ocupare: partea din lună în care o instanță procesează cel puțin o cerere</text>
</g>
<line x1="80" y1="67.3" x2="820" y2="67.3" stroke="#ff6b8a" stroke-width="2" stroke-dasharray="6,4"/>
<text x="84" y="61" fill="#ff6b8a">Fargate x86 + NAT · $210</text>
<line x1="80" y1="94.1" x2="820" y2="94.1" stroke="#ffd166" stroke-width="2" stroke-dasharray="6,4"/>
<text x="84" y="88" fill="#ffd166">Fargate x86, subrețele publice · $181</text>
<line x1="80" y1="120.5" x2="820" y2="120.5" stroke="#4fffb0" stroke-width="2" stroke-dasharray="6,4"/>
<text x="84" y="114" fill="#4fffb0">Fargate ARM, subrețele publice · $152</text>
<line x1="80" y1="222.5" x2="820" y2="51.2" stroke="#7b8cff" stroke-width="3"/>
<text x="560" y="190" fill="#7b8cff" font-weight="700">App Runner</text>
<circle cx="521" cy="120.5" r="5" fill="#4fffb0"/><text x="521" y="140" fill="#4fffb0" text-anchor="middle">60 %</text>
<circle cx="635" cy="94.1" r="5" fill="#ffd166"/><text x="647" y="112" fill="#ffd166" text-anchor="middle">75 %</text>
<circle cx="750" cy="67.3" r="5" fill="#ff6b8a"/><text x="762" y="85" fill="#ff6b8a" text-anchor="middle">91 %</text>
<text x="80" y="325" fill="#9aa3c7">La stânga unui punct, App Runner e mai ieftin decât acel Fargate; la dreapta, Fargate câștigă.</text>
</g>
</svg>
</div>

| Grad de ocupare | App Runner | Fargate ARM, public | Fargate x86, public | Fargate x86 + NAT |
|---|---|---|---|---|
| 10 % | $60 | $152 | $181 | $210 |
| 25 % | $88 | $152 | $181 | $210 |
| 50 % | $134 | $152 | $181 | $210 |
| 75 % | $181 | $152 | $181 | $210 |
| 100 % | $228 | $152 | $181 | $210 |

App Runner rămâne mai ieftin decât Fargate pe x86 până când instanțele sunt ocupate trei sferturi din timp și mai ieftin decât varianta cu subrețele private aproape mereu. Graviton mută pragul la 60 %.

## Ce înseamnă de fapt „ocupat”

Aici greșesc oamenii comparația, în ambele direcții. Ocuparea nu e utilizarea CPU. O instanță App Runner e activă, și facturată pentru vCPU, ori de câte ori *cel puțin o cerere* e în curs, cu un minim de un minut de fiecare dată când se trezește. O singură cerere la fiecare treizeci de secunde ține instanța activă continuu, chiar dacă procesorul stă la 2 %.

Deci modul corect de a-ți estima gradul de ocupare e să te uiți când există trafic, nu cât de mare e:

- **O aplicație B2B folosită în program de lucru**, în unul sau două fusuri orare: ocupată cam 10–12 ore în zilele lucrătoare, liberă noaptea și în weekend. Asta înseamnă 30–40 %. E cazul aplicației publice a clientului nostru și motivul pentru care App Runner iese mai ieftin.
- **O aplicație de consum cu trafic global**, sau orice e interogat non-stop de monitoare, webhook-uri și boți: practic 100 %. Aici câștigă Fargate, clar pe ARM.
- **Unelte interne, panouri de administrare, staging**: ocupate câteva procente din timp. App Runner la dimensiunea minimă (0,25 vCPU, 0,5 GB) costă cam $2,60 pe lună în repaus. Același task pe Fargate costă $9 pe lună, fie că îl deschide cineva, fie că nu.

Verifică-ți propria cifră înainte să decizi. Logurile de cereri din ALB sau CloudFront, grupate pe minut, îți spun ce procent din minute au avut măcar o cerere.

## Linia pe care majoritatea comparațiilor o omit

App Runner nu are nevoie de NAT gateway pentru acces la internet pe rețeaua implicită. În momentul în care adaugi un VPC connector ca serviciul să ajungă la o bază de date privată, *tot* traficul de ieșire trece prin VPC-ul tău și ai nevoie de NAT pentru orice e pe internet: Stripe, un API de email, un furnizor de identitate. E cazul nostru: serviciile App Runner vorbesc cu Aurora, deci contul are deja un NAT.

Când ambele variante au nevoie de NAT, el se anulează din comparație și pragul revine la aproximativ 75 % pe x86. Când App Runner nu are nevoie, iar Fargate ar avea, sunt $37 pe lună pe cont pe care îi plătește doar una dintre variante. Cu trei conturi (dev, staging, prod), asta înseamnă peste $100 pe lună, [a treia cea mai mare linie de pe factura noastră](/ro/blog/aws-bill-of-a-three-person-startup).

<div class="article-figure">
<svg viewBox="0 0 900 300" width="100%" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Flux de decizie. Prima întrebare: ai cereri mai lungi de 120 de secunde sau ai nevoie de Spot ori Savings Plans? Dacă da, Fargate. Altfel: e aplicația ocupată mai mult de aproximativ 75 % din lună, sau 60 % dacă ai rula pe ARM? Dacă da, Fargate. Altfel App Runner, mai ieftin și cu mai puțină infrastructură de administrat.">
<g font-family="Inter,system-ui,sans-serif" font-size="13">
<rect x="20" y="30" width="400" height="70" rx="8" fill="#151b2e" stroke="#7b8cff"/>
<text x="220" y="58" text-anchor="middle" fill="#f1f3ff">Cereri mai lungi de 120 s sau ai nevoie de</text>
<text x="220" y="78" text-anchor="middle" fill="#f1f3ff">Spot / Savings Plans / control pe rețea?</text>
<line x1="420" y1="65" x2="610" y2="65" stroke="#ffd166" stroke-width="2"/><text x="515" y="57" text-anchor="middle" fill="#ffd166">da</text>
<rect x="610" y="35" width="270" height="60" rx="8" fill="#151b2e" stroke="#ffd166"/>
<text x="745" y="70" text-anchor="middle" fill="#ffd166" font-weight="700">Fargate</text>
<line x1="220" y1="100" x2="220" y2="140" stroke="#4fffb0" stroke-width="2"/><text x="235" y="126" fill="#4fffb0">nu</text>
<rect x="20" y="140" width="400" height="70" rx="8" fill="#151b2e" stroke="#7b8cff"/>
<text x="220" y="168" text-anchor="middle" fill="#f1f3ff">Ocupată peste ~75 % din lună</text>
<text x="220" y="188" text-anchor="middle" fill="#f1f3ff">(~60 % dacă ai rula pe ARM)?</text>
<line x1="420" y1="175" x2="610" y2="175" stroke="#ffd166" stroke-width="2"/><text x="515" y="167" text-anchor="middle" fill="#ffd166">da</text>
<rect x="610" y="145" width="270" height="60" rx="8" fill="#151b2e" stroke="#ffd166"/>
<text x="745" y="173" text-anchor="middle" fill="#ffd166" font-weight="700">Fargate</text>
<text x="745" y="192" text-anchor="middle" fill="#9aa3c7" font-size="12">pe Graviton</text>
<line x1="220" y1="210" x2="220" y2="240" stroke="#4fffb0" stroke-width="2"/><text x="235" y="230" fill="#4fffb0">nu</text>
<rect x="20" y="240" width="400" height="50" rx="8" fill="#151b2e" stroke="#4fffb0"/>
<text x="220" y="270" text-anchor="middle" fill="#4fffb0" font-weight="700">App Runner: mai ieftin, mai puțin de operat</text>
</g>
</svg>
</div>

## Când Fargate e oricum răspunsul corect

Costul nu e singurul criteriu și sunt cazuri în care am alege Fargate la orice grad de ocupare:

- **Cereri care durează mai mult de 120 de secunde.** Timeout-ul gateway-ului App Runner e fix. Exporturile, generarea de rapoarte și apelurile AI lungi fie se mută într-o coadă, fie se mută pe Fargate.
- **Vrei angajamente.** Compute Savings Plans acoperă Fargate, nu App Runner, iar Fargate Spot scade până la 70 % din preț pentru workeri care suportă întreruperi. La dimensiunea facturii noastre [angajamentele nu merită încă](/ro/blog/reserved-savings-plans-or-nothing-at-small-scale); la de zece ori mai mult, merită.
- **Ai nevoie de control asupra rețelei**: sidecar-uri, service mesh, reguli de security group per task, mai multe containere într-un task. Pentru asta există ECS, iar [ghidul nostru Fargate](/ro/blog/aws-ecs-fargate-deploy) acoperă configurarea.
- **Multe servicii în spatele unui singur ALB.** Costul fix al ALB-ului se plătește o dată. Cu zece servicii în spatele unor reguli pe host, ajunge la $2 pe serviciu și comparația se înclină spre Fargate pentru cele ocupate.

## Ce am face noi

Pentru o echipă mică ce livrează aplicații web, începe pe App Runner. E mai ieftin la traficul pe care îl au de fapt majoritatea produselor tinere, nu ai ALB, target groups sau subrețele la care să te gândești, iar mutarea pe Fargate mai târziu e o schimbare în stack-ul CDK, nu în aplicație, fiindcă ambele rulează aceeași imagine de container (ține-o [mică](/ro/blog/docker-images-for-node-in-2026-distroless-multi-stage) oricum).

Reevaluează când un serviciu e ocupat mare parte din lună sau când linia lui de App Runner trece de câteva sute de dolari. Atunci mută doar acel serviciu pe Fargate cu Graviton și lasă-le pe cele liniștite unde sunt.

Dacă vrei calculul făcut pe traficul și arhitectura ta, [vorbește cu noi](/contact). De obicei e un exercițiu de o oră, cu Cost Explorer deschis.
