Skip to content
Die AWS-Rechnung eines Drei-Personen-Startups, Zeile für Zeile
← ← Zurück zu Gedanken Cloud

Die AWS-Rechnung eines Drei-Personen-Startups, Zeile für Zeile

Alle veröffentlichen Architekturdiagramme. Niemand veröffentlicht die Rechnung. Das ist schade, denn auf der Rechnung wird die Architektur ehrlich: der Dienst, auf den Sie stolz waren, entpuppt sich als Rundungsfehler, und das, woran Sie nie gedacht haben, ist der drittgrößte Posten.

Auch wir können die Rechnung unseres Kunden nicht veröffentlichen. Was wir tun können, ist das Zweitbeste. Unten steht die Architektur, die wir für die Plattform eines US-Kunden betreiben, Zeile für Zeile zum Listenpreis in us-east-1 für einen typischen Monat gerechnet, ohne Commitments und ohne Credits. Die echte Rechnung hat dieselbe Rangfolge und dieselben Überraschungen. Nehmen Sie die Zahlen als Form, nicht als Beleg.

Was läuft

Drei Engineers, drei AWS-Konten (Dev, Staging, Prod), alle aus einer einzigen CDK-Codebasis ausgerollt. In jedem Konto: drei Next.js-Anwendungen auf App Runner, ein Aurora-Serverless-v2-PostgreSQL-Cluster, eine Handvoll DynamoDB-Tabellen, etwa ein Dutzend Lambda-Funktionen (einige davon im VPC, damit sie Aurora erreichen), S3-Buckets hinter CloudFront, eine WAF vor der öffentlichen App, CodeBuild für Images, Secrets Manager und KMS für alles Sensible, CloudWatch für Logs und Alarme. Produktion betreibt zwei warme App-Runner-Instanzen für die öffentliche App; Dev und Staging laufen mit allem in der kleinsten Größe.

Die Rechnung

Posten Monatlich (Liste) Anteil Was ihn treibt
App Runner (9 Services in 3 Konten) ~$190 25 % 2 warme Instanzen mit 2 vCPU / 4 GB in Prod; der Rest idlet in Minimalgröße
Aurora Serverless v2 (3 Cluster) ~$130 17 % 0,5-ACU-Untergrenze in Prod rund um die Uhr; Dev und Staging pausieren automatisch
NAT Gateway (3, eines pro Konto) ~$100 13 % $0,045 pro Stunde je Gateway, bevor ein einziges Byte verarbeitet ist
CloudWatch (Logs, Metriken, Alarme) ~$95 13 % ~5 GB Logs pro Tag zu $0,50 pro ingestiertem GB
CloudFront + S3 ~$55 7 % ~500 GB ausgehend, 200 GB gespeichert
DynamoDB (On-Demand, PITR an) ~$35 5 % ~10 Mio. Schreib-, 50 Mio. Lesevorgänge
Secrets Manager (3 Konten) ~$33 4 % $0,40 pro Secret und Monat, etwa 25 Secrets pro Konto
KMS (kundenverwaltete Schlüssel) ~$33 4 % $1 pro Schlüssel und Monat, etwa 10 Schlüssel pro Konto
Datentransfer, Inter-AZ ~$20 3 % Lambda ↔ Aurora über Zonen hinweg, plus gelegentlicher Egress
Lambda ~$15 2 % ~20 Mio. Aufrufe
CodeBuild ~$15 2 % ~200 Builds im Monat, je 8 Minuten
WAF ~$16 2 % Web ACL + 5 Managed Rule Groups + 10 Mio. Requests
Route 53, ECR, SES, SQS, SNS ~$15 2 % Der lange Schwanz
Summe ~$750

Irgendwo zwischen $700 und $850 in einem normalen Monat, für eine Plattform mit echten Nutzern, echtem Geldfluss und drei isolierten Umgebungen. Das ist weniger als ein Engineer-Tag zu Beratungssätzen. Behalten Sie das im Kopf, wenn jemand eine Woche Kostenoptimierung vorschlägt.

Anteil an der Monatsrechnung App Runner25 % Aurora Serverless v217 % NAT Gateway13 % · von niemandem budgetiert CloudWatch13 % · wächst mit dem Traffic CloudFront + S37 % DynamoDB5 % Secrets Manager + KMS8 % · der Preis dreier Konten Alles andere12 % Bewusst gewählter Compute: 42 %. Standardmäßig mitgelieferte Infrastruktur: 58 %.

Die drei Überraschungen

Das NAT Gateway ist eine feste Steuer dafür, ein VPC zu haben. Wir haben Lambdas, die mit Aurora sprechen, also liegen sie in privaten Subnetzen, also brauchen sie ein NAT, um irgendetwas im Internet zu erreichen, AWS-APIs eingeschlossen. Ein NAT pro Konto kostet etwa $33 im Monat, bevor es ein Byte verarbeitet. Drei Konten, drei NATs, $100. Das ist mehr als Lambda, DynamoDB und WAF zusammen. Die Lösung ist eine halbe: Gateway-Endpunkte für S3 und DynamoDB sind kostenlos und nehmen den Großteil des Traffics weg, Interface-Endpunkte für Secrets Manager und Co. kosten $7 pro Stück und lohnen sich erst ab einem gewissen Volumen, und in Dev überlegen wir ernsthaft, gar kein NAT zu haben und die Lambdas, die Internet brauchen, laut scheitern zu lassen.

Sicherheit hat einen Preis pro Konto. Secrets Manager berechnet pro Secret, KMS pro Schlüssel, und CloudTrail will einen eigenen Bucket. Nichts davon ist für sich teuer. Mal drei Konten sind es 8 % der Rechnung, ungefähr das, was CloudFront kostet, um jedes Byte des Produkts auszuliefern. Wir haben es reduziert, indem wir zusammengehörige Werte in einem JSON-Secret gruppieren (ein Secret, mehrere Schlüssel) statt einem Secret pro Wert. Die KMS-Schlüssel haben wir nicht reduziert: ein Schlüssel pro Datenspeicher pro Konto ist der ganze Sinn des Drei-Konten-Setups.

Logs kosten mehr als die Funktionen, die sie schreiben. CloudWatch Logs zu $0,50 pro ingestiertem GB ist der teuerste Posten, der mit dem Traffic statt mit der Teamgröße skaliert. Fünf Gigabyte am Tag sind nichts für drei Anwendungen, die jeden Request als JSON loggen, und es sind bereits $75 im Monat. Wir haben die Aufbewahrung auf 30 Tage gekürzt, laute Log-Gruppen in die Infrequent-Access-Klasse zum halben Ingestion-Preis verschoben und aufgehört, Request-Bodies zu loggen. Die langfristige Antwort ist, CloudWatch die Anwendungslogs gar nicht erst zu überlassen.

Was keine Überraschung ist, Sie aber beunruhigen sollte

Nicht-Produktion macht etwa ein Drittel der Rechnung aus. Dev und Staging sind „klein“ und tragen trotzdem je ein NAT, je einen Aurora-Cluster, zusammen neun App-Runner-Services und eigene Kopien jedes Secrets und jedes Schlüssels. Auto-Pause bei Aurora Serverless v2 (0 ACU im Leerlauf, seit Ende 2024) hat die beiden Nicht-Prod-Cluster von etwa $90 auf etwa $20 gebracht. App Runner in Minimalgröße kostet $5 pro Service, das ist in Ordnung. Die NATs bleiben das Problem.

Wohin das Geld geht, nach Umgebung prod · ~65 % dev + staging · ~35 % 2 NATs App Runner Aurora Secrets, Keys, Logs Aurora Auto-Pause hat den Nicht-Prod-Anteil bereits um ~10 Punkte gesenkt. Die beiden NATs sind das nächste Ziel.

Was wir bewusst nicht optimieren

Wir zahlen für alles On-Demand. Keine Savings Plans, keine reservierte Kapazität, keine reservierten Aurora-Instanzen. Bei $750 im Monat liegt die maximale Ersparnis aus einem Einjahres-Commitment bei etwa $100 im Monat, und die Form der Plattform ändert sich noch: App Runner könnte Fargate werden, Aurora könnte einfaches RDS werden, eine der Lambdas könnte ein Container werden. Ein Commitment ist eine Wette darauf, dass sich die Architektur nicht bewegt, und die sind wir nicht bereit einzugehen. Wir kommen darauf zurück, wenn die Rechnung etwa $3.000 überschreitet, denn dort ist das Gespräch einen Nachmittag wert.

Wir jagen auch nicht dem langen Schwanz hinterher. Route 53, ECR, SES und SQS ergeben zusammen $15. Jede Stunde dort ist eine verlorene Stunde.

Wie Sie Ihre eigene Rechnung lesen

Drei Gewohnheiten, die diese Übung möglich gemacht haben und die wir jedem Team unserer Größe empfehlen würden:

  • Schalten Sie Cost Explorer mit stündlicher Granularität ein und taggen Sie vom ersten Tag an nach Umgebung. Bei uns ist es ein einziges CDK-Tag, env, auf Stack-Ebene. Ohne es ist „Prod vs. Nicht-Prod“ geraten.
  • Betrachten Sie die Rechnung nach Nutzungstyp, nicht nach Dienst. „EC2-Other“ ist der Ort, an dem sich NAT Gateways verstecken. „CloudWatch“ mischt Ingestion, Speicher und API-Aufrufe, die völlig verschiedene Lösungen haben.
  • Setzen Sie einen Budget-Alarm auf 120 % des Vormonats. Nicht um zu sparen, sondern um von einer Änderung an Tag drei statt an Tag dreißig zu erfahren. Unserer hat zweimal ausgelöst: einmal wegen einer außer Kontrolle geratenen Log-Gruppe, einmal wegen einer Lambda, die eine Woche lang jede Minute einen fehlgeschlagenen Webhook wiederholte.

Die Rechnung ist in dieser Größe kein Problem. Sie ist eine Landkarte. Sie hat uns gezeigt, dass das interessante Engineering nicht im Compute steckt, den wir gewählt haben, sondern in der Infrastruktur, die mitkam, und genau dorthin gehen die nächsten drei Artikel: NAT Gateways, Logs und Commitments.

Wenn Sie ein zweites Paar Augen auf Ihrer eigenen Rechnung möchten, sprechen Sie mit uns. Wir lesen sie beruflich.