Skip to content
Fargate vs. App Runner: dieselbe App, zweimal durchgerechnet
← ← Zurück zu Gedanken Cloud

Fargate vs. App Runner: dieselbe App, zweimal durchgerechnet

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:

Monatliche Kosten, 2 × (2 vCPU, 4 GB), us-east-1-Listenpreise $0$60$120$180$240 0 %25 %50 %75 %100 % Auslastungsanteil: Anteil des Monats mit mindestens einer Anfrage Fargate x86 + NAT · $210 Fargate x86, öffentliche Subnets · $181 Fargate ARM, öffentliche Subnets · $152 App Runner 60 % 75 % 91 % Links von einem Punkt ist App Runner günstiger als dieses Fargate-Setup, rechts davon Fargate.
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.

Anfragen länger als 120 s oder brauchen Sie Spot / Savings Plans / feines Networking? ja Fargate nein Ausgelastet mehr als ~75 % des Monats (~60 % falls Sie ARM nutzen)? ja Fargate auf Graviton nein App Runner: günstiger, weniger Aufwand

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.