Wir betreiben drei Next.js-Anwendungen auf AWS App Runner und haben nach sechs Monaten eine ehrliche Bilanz gezogen. 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: 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 ($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:
| 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.
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; 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 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).
Ü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. Das ist meist eine einstündige Übung bei geöffnetem Cost Explorer.