Blog

Lambda, Fargate, ECS, EKS

3 min Lesezeit
aws compute architecture

Stell dir vor: “Wir nehmen Kubernetes.” Die Frage: womit deployen wir unseren neuen Service? Drei Endpoints, 200 req/s, ein Cronjob. Das Team: 4 Entwickler, keiner hat K8s-Erfahrung. Sechs Wochen später: Helm Charts, Ingress Controller, Cluster Autoscaler, Karpenter, ArgoCD. Der Service selbst hat 800 Zeilen Code. Die Infra drumherum: 3.000.

Das AWS-Whitepaper “Microservices on AWS” zeigt alle vier Compute-Optionen. Was es nicht zeigt: den Ops-Overhead.

Klick durch die Optionen und schau dir die Score-Verteilung an besonders “Setup” vs “Cost @ High”:

KOSTENSPANNE
$0 $3k/mo
SETUPZIP hochladen, fertig
SCALING0 auf 1000 in Sekunden
COST @ LOWPay-per-invocation, Free Tier
COST @ HIGHAb 1M req/Tag teurer als ECS
CONTROLKein OS, kein Netzwerk, Limits
COLD STARTS100-500ms, Java/Docker schlimmer
BEST FOR
APIs mit variablem Traffic, Cron Jobs, Event Processing, Prototypen
AVOID WHEN
Langläufer >15min, Latenz-kritische APIs, GPU Workloads

Lambda bei Setup: 95%. EKS bei Setup: 15%. Das ist kein kleiner Unterschied. Das sind Wochen vs Minuten.

Lambda: wenn du keinen Server willst

Lambda ist genial für alles was sporadisch läuft. API-Endpoint der 50x am Tag aufgerufen wird? Lambda kostet dich nichts. Event Processing aus SQS? Lambda skaliert auf 1000 gleichzeitige Executions ohne dass du was tust.

Der Break-Even kommt bei ~500k Requests pro Tag. Ab da wird Lambda teurer als ein Container der 24/7 läuft. Und Cold Starts 100-500ms für Node.js, 1-3 Sekunden für Java machen Lambda für Latenz-kritische APIs unbrauchbar.

export const handler = async (event: APIGatewayEvent) => {
  const order = JSON.parse(event.body!);
  await processOrder(order);
  return { statusCode: 200, body: "OK" };
};

Das ist dein gesamter Deployment-Artifact. Kein Dockerfile. Kein Helm Chart. Kein Cluster. Zip, Upload, fertig.

Provisioned Concurrency löst Cold Starts für $15-30/mo pro Instanz. Für eine API mit konsistentem Traffic sinnvoll. Für sporadische Workloads: Geldverschwendung.

Fargate: Container ohne Server

Fargate ist der Kompromiss. Du schreibst ein Dockerfile, definierst CPU/Memory, und AWS managed den Rest. Kein Cluster, keine Nodes, kein OS-Patching.

Gut wenn dein Team Docker kann aber kein K8s will. Weniger gut wenn du Spot Instances brauchst (Fargate Spot gibt’s, aber mit Einschränkungen) oder Host-Level Networking.

containerDefinitions:
  - name: api
    image: 123456789.dkr.ecr.eu-west-1.amazonaws.com/api:latest
    cpu: 256 # 0.25 vCPU
    memory: 512 # 512 MB
    portMappings:
      - containerPort: 8080

Scaling dauert 30-60 Sekunden für neue Tasks. Für stabile APIs kein Problem. Für spiky Traffic (0 auf 100 Requests in einer Sekunde) zu langsam; da ist Lambda besser.

ECS auf EC2: wenn Kosten zählen

ECS auf EC2 ist der billigste Container-Compute auf AWS. Du managst die EC2 Instances selbst, ECS platziert Container drauf. Capacity Provider + Auto Scaling Group handelt die Skalierung.

Der Trade-off: du bist für OS-Patches, Security Updates und Instance-Gesundheit verantwortlich. Das ist Ops-Arbeit. Aber dafür bekommst du Spot Instances (60-80% Rabatt) und Reserved Capacity.

Stell dir vor: ein Team wechselt von Fargate auf ECS/EC2 mit Spot. Compute-Kosten: von $4.200 auf $1.100 pro Monat. Gleiche Workload. Der Preis: ein Ops-Engineer der sich um die Instances kümmert. Je nach Team rechnet sich das.

EKS: wenn du Kubernetes wirklich brauchst

EKS macht Sinn wenn:

EKS macht keinen Sinn wenn:

Die $73/Monat für die Control Plane sind das geringste Problem. Das Problem sind die 2-4 Wochen Setup, die permanente Maintenance, und die Tatsache dass jedes K8s-Update ein Projekt ist.

Also was nehm ich?

Sporadisch, Event-Driven, unter 15min Runtime? Lambda. Stabile API, Team kann Docker, will kein K8s? Fargate. Hoher Traffic, Kosten kritisch, Ops-Team vorhanden? ECS/EC2 mit Spot. 10+ Services, K8s-Erfahrung, Platform Team? EKS. Unsicher? Fargate. Du kannst jederzeit auf ECS/EC2 oder EKS migrieren.

Das Whitepaper empfiehlt Container für alles. Drei Endpoints und 200 req/s brauchen kein Kubernetes. Die brauchen eine Lambda oder einen Fargate Task.