# Fargate vs. App Runner: dieselbe App, zweimal durchgerechnet
<!-- meta: Fargate vs. App Runner für dieselbe Next.js-App berechnet: Listenpreise, ALB, öffentliche IPv4 und NAT inklusive, plus der Punkt, an dem Fargate gewinnt. -->

Wir betreiben drei Next.js-Anwendungen auf AWS App Runner und haben [nach sechs Monaten eine ehrliche Bilanz gezogen](/de/blog/aws-app-runner-review-six-months). Die Frage, die wir zu diesem Artikel am häufigsten bekommen, betrifft weder Timeouts noch Health-Checks. Sie lautet: „Ist App Runner nicht teurer als Fargate?“

Pro vCPU-Stunde: ja, um etwa 58 %. Pro Monat, für die meisten kleinen Teams: nein. Der Unterschied liegt darin, wofür jeder Dienst Sie berechnet, während niemand die App nutzt, und in der Infrastruktur, die Fargate benötigt und die App Runner bereits einschließt. Im Folgenden dieselbe Anwendung, zweimal durchgerechnet, zu Listenpreisen in us-east-1, mit jeder Zeile, die auf der Rechnung erscheint.

## Die beiden Preislisten

| | App Runner | Fargate (Linux, x86) | Fargate (Linux, ARM) |
|---|---|---|---|
| vCPU | $0,064 pro vCPU-Stunde, **nur während der Bearbeitung von Anfragen** | $0,040478 pro vCPU-Stunde, dauerhaft | $0,03238 pro vCPU-Stunde, dauerhaft |
| Arbeitsspeicher | $0,007 pro GB-Stunde, dauerhaft | $0,004446 pro GB-Stunde, dauerhaft | $0,00356 pro GB-Stunde, dauerhaft |
| Load Balancer | Inklusive | ALB: $0,0225/Stunde + $0,008 pro LCU-Stunde | gleich |
| HTTPS-Endpunkt, TLS-Zertifikat | Inklusive | ACM-Zertifikat auf dem ALB (kostenlos) | gleich |
| Öffentliche IPv4 | Wird Ihnen nicht berechnet | $0,005/Stunde pro Adresse (ALB und Tasks) | gleich |
| Savings Plans / Spot | Nein | Compute Savings Plans, Fargate Spot | gleich |

Beide rechnen sekundengenau ab, mit einer Mindestdauer von einer Minute. Die entscheidende Zeile ist die erste. App Runner unterteilt das Leben einer Instanz in zwei Zustände: **provisioned** (sie existiert, ist warm, wartet) und **active** (sie verarbeitet mindestens eine Anfrage). Im Zustand „provisioned“ zahlen Sie nur für den Arbeitsspeicher. Fargate kennt diesen Zustand nicht: Ein laufender Task kostet vCPU und Arbeitsspeicher in jeder Sekunde seiner Existenz, egal ob er tausend Anfragen bedient oder keine.

## Die App, die wir durchgerechnet haben

Es handelt sich um die öffentliche Anwendung aus unserer [AWS-Rechnungsaufschlüsselung](/de/blog/aws-bill-of-a-three-person-startup): eine Next.js-App für einen US-Kunden, zwei dauerhaft laufende Instanzen mit je 2 vCPU und 4 GB, damit ein Deploy oder ein Absturz sie nie ohne Kapazität dastehen lässt. 730 Stunden im Monat.

**App Runner.** Arbeitsspeicher wird rund um die Uhr bezahlt: 2 Instanzen × 4 GB × $0,007 × 730 h = **$40,88**. vCPU wird nur bezahlt, solange eine Instanz aktiv ist: 2 Instanzen × 2 vCPU × $0,064 × 730 h = $186,88 *wenn beide in jeder Sekunde des Monats ausgelastet wären*. Die reale Zahl ist $186,88 multipliziert mit dem Zeitanteil, in dem die Instanzen Anfragen bearbeiten. Diesen Anteil nennen wir den Auslastungsanteil.

**Fargate, x86.** Jeder Task kostet 2 × $0,040478 + 4 × $0,004446 = $0,0987 pro Stunde. Zwei Tasks für einen Monat: **$144,16**. Dazu kommen die Teile, über die App Runner Sie gar nicht erst nachdenken lässt:

- Ein Application Load Balancer: $0,0225 × 730 = $16,43, plus im Schnitt etwa eine LCU bei moderatem Traffic, $5,84. **$22,27.**
- Öffentliche IPv4 für den ALB, eine pro Availability Zone, zwei Zonen: **$7,30**.
- Die Tasks brauchen einen Weg nach außen, um externe APIs aufzurufen, Images zu ziehen und E-Mails zu senden. Entweder öffentliche Subnets mit einer öffentlichen IP pro Task (**$7,30**) oder private Subnets und ein [NAT-Gateway](/de/blog/nat-gateway-the-most-expensive-line-you-do-not-see) ($32,85 plus $3,65 für dessen Adresse plus $0,045 pro verarbeitetem GB, **~$37**).

Gesamt für Fargate auf x86: **~$181** mit öffentlichen Subnets, **~$210** mit privaten Subnets und NAT. Dasselbe Setup auf ARM (Graviton), öffentliche Subnets: **~$152**.

## Wo sich die Linien kreuzen

Die Rechnung von App Runner ist $40,88 plus $186,88 × Auslastungsanteil. Die von Fargate ist ein fester Betrag. Beide im selben Diagramm:

<div class="article-figure">
<svg viewBox="0 0 900 340" width="100%" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Liniendiagramm der monatlichen Kosten gegen den Auslastungsanteil. App Runner steigt von etwa 41 Dollar bei 0 Prozent Auslastung auf etwa 228 Dollar bei 100 Prozent. Fargate ist konstant: etwa 152 Dollar auf ARM, 181 Dollar auf x86 mit öffentlichen Subnets, 210 Dollar auf x86 mit NAT-Gateway. App Runner ist günstiger unterhalb von 60, 75 beziehungsweise 91 Prozent Auslastung.">
<g font-family="Inter,system-ui,sans-serif" font-size="12">
<text x="80" y="24" fill="#f1f3ff" font-size="14" font-weight="700">Monatliche Kosten, 2 × (2 vCPU, 4 GB), us-east-1-Listenpreise</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">Auslastungsanteil: Anteil des Monats mit mindestens einer Anfrage</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, öffentliche Subnets · $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, öffentliche Subnets · $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">Links von einem Punkt ist App Runner günstiger als dieses Fargate-Setup, rechts davon Fargate.</text>
</g>
</svg>
</div>

| Auslastungsanteil | App Runner | Fargate ARM, öffentlich | Fargate x86, öffentlich | 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 bleibt günstiger als x86-Fargate, bis die Instanzen drei Viertel der Zeit ausgelastet sind, und günstiger als das Private-Subnet-Setup fast immer. Graviton verschiebt die Linie auf 60 %.

## Was „ausgelastet“ wirklich bedeutet

Hier liegen die meisten Vergleiche in beide Richtungen falsch. Ausgelastet bedeutet nicht CPU-Auslastung. Eine App-Runner-Instanz ist aktiv, und wird für vCPU berechnet, sobald *mindestens eine Anfrage* unterwegs ist, mit einer Mindestdauer von einer Minute bei jedem Aufwachen. Eine einzelne Anfrage alle dreißig Sekunden hält eine Instanz durchgehend aktiv, selbst wenn die CPU bei 2 % liegt.

Der ehrliche Weg, Ihren Auslastungsanteil zu schätzen, ist also zu prüfen, wann überhaupt Traffic vorhanden ist, nicht wie stark er ist:

- **Eine B2B-App, die während der Bürozeiten genutzt wird**, in ein oder zwei Zeitzonen: etwa 10 bis 12 Stunden werktags ausgelastet, nachts und am Wochenende im Leerlauf. Das sind 30 bis 40 %. Das ist die öffentliche App unseres Kunden, und deshalb ist App Runner für sie günstiger.
- **Eine Consumer-App mit globalem Traffic**, oder alles, was rund um die Uhr von Monitoring, Webhooks und Bots abgefragt wird: effektiv 100 %. Hier gewinnt Fargate, klar auf ARM.
- **Interne Tools, Admin-Oberflächen, Staging**: nur wenige Prozent der Zeit ausgelastet. App Runner in Mindestgröße (0,25 vCPU, 0,5 GB) kostet im Leerlauf etwa $2,60 im Monat. Derselbe Fargate-Task kostet $9 im Monat, egal ob ihn jemand öffnet oder nicht.

Prüfen Sie Ihre eigene Zahl, bevor Sie entscheiden. Die nach Minute gruppierten ALB- oder CloudFront-Request-Logs zeigen Ihnen, in welchem Anteil der Minuten überhaupt eine Anfrage einging.

## Die Zeile, die die meisten Vergleiche auslassen

App Runner braucht bei seinem Standard-Networking kein NAT-Gateway für ausgehenden Internetzugriff. Sobald Sie einen VPC-Connector hinzufügen, damit der Dienst eine private Datenbank erreichen kann, läuft *aller* ausgehende Traffic durch Ihre VPC, und Sie brauchen ein NAT für alles im Internet: Stripe, eine E-Mail-API, einen Identity Provider. Das ist unser Fall: Unsere App-Runner-Dienste sprechen mit Aurora, also hat das Konto bereits ein NAT.

Wenn beide Optionen das NAT brauchen, fällt es aus dem Vergleich heraus und der Break-even liegt wieder bei etwa 75 % auf x86. Wenn App Runner keins braucht und Fargate eins bräuchte, sind das $37 im Monat pro Konto, die nur eine Seite zahlt. Bei drei Konten (dev, staging, prod) sind das über $100 im Monat, [die drittgrößte Zeile auf unserer Rechnung](/de/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="Entscheidungsablauf. Erste Frage: Sind die Anfragen länger als 120 Sekunden, oder brauchen Sie Spot oder Savings Plans? Wenn ja, Fargate. Andernfalls: Ist die App mehr als etwa 75 Prozent des Monats ausgelastet, oder 60 Prozent bei ARM? Wenn ja, Fargate. Andernfalls App Runner, das günstiger ist und weniger Infrastruktur benötigt.">
<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">Anfragen länger als 120 s oder brauchen Sie</text>
<text x="220" y="78" text-anchor="middle" fill="#f1f3ff">Spot / Savings Plans / feines Networking?</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">ja</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">nein</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">Ausgelastet mehr als ~75 % des Monats</text>
<text x="220" y="188" text-anchor="middle" fill="#f1f3ff">(~60 % falls Sie ARM nutzen)?</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">ja</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">auf Graviton</text>
<line x1="220" y1="210" x2="220" y2="240" stroke="#4fffb0" stroke-width="2"/><text x="235" y="230" fill="#4fffb0">nein</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: günstiger, weniger Aufwand</text>
</g>
</svg>
</div>

## Wann Fargate trotzdem die richtige Antwort ist

Kosten sind nicht der einzige Faktor, und es gibt Fälle, in denen wir Fargate unabhängig vom Auslastungsanteil wählen würden:

- **Anfragen, die länger als 120 Sekunden laufen.** Der Gateway-Timeout von App Runner ist fest. Exporte, Berichtserstellung und lange KI-Aufrufe wandern entweder in eine Queue oder zu Fargate.
- **Sie wollen Commitments.** Compute Savings Plans decken Fargate ab, nicht App Runner, und Fargate Spot bringt bis zu 70 % Rabatt auf unterbrechbare Worker. Bei unserer Rechnungsgröße [lohnen sich Commitments noch nicht](/de/blog/reserved-savings-plans-or-nothing-at-small-scale); beim Zehnfachen der Größe schon.
- **Sie brauchen Kontrolle über den Netzwerkpfad**: Sidecars, Service Mesh, spezifische Security-Group-Regeln pro Task, mehrere Container in einem Task. Dafür ist ECS da, und unser [Fargate-Guide](/de/blog/aws-ecs-fargate-deploy) beschreibt das Setup.
- **Viele Dienste hinter einem ALB.** Die Fixkosten des ALB fallen nur einmal an. Bei zehn Diensten hinter host-basierten Listener-Regeln werden daraus $2 pro Dienst, und der Vergleich verschiebt sich bei den ausgelasteten Diensten zugunsten von Fargate.

## Was wir tun würden

Für ein kleines Team, das Webanwendungen ausliefert, fangen Sie mit App Runner an. Es ist beim Traffic, den die meisten jungen Produkte tatsächlich haben, günstiger, es gibt keinen ALB, keine Target Groups und keine Subnets, über die Sie nachdenken müssen, und ein späterer Umzug zu Fargate ist eine Änderung am CDK-Stack, nicht an der Anwendung, da beide dasselbe Container-Image ausführen (halten Sie es in jedem Fall [klein](/de/blog/docker-images-for-node-in-2026-distroless-multi-stage)).

Überdenken Sie die Wahl, wenn ein Dienst den Großteil des Monats ausgelastet ist oder seine App-Runner-Zeile ein paar hundert Dollar übersteigt. Dann betreiben Sie genau diesen Dienst mit Fargate auf Graviton und lassen die ruhigen dort, wo sie sind.

Wenn Sie die Berechnung für Ihren eigenen Traffic und Ihre Architektur wollen, [sprechen Sie mit uns](/contact). Das ist meist eine einstündige Übung bei geöffnetem Cost Explorer.
