AWS-Cost-Audit a-icking Search Pipeline

Account: 063507503859 (Icking-eigene Org, NICHT Agentic-Ventures). Cloud-Kosten zahlt Icking direkt. Region: eu-central-1. Live-Check: Token für icking-SSO-Profil abgelaufen — Zahlen basieren auf Terraform-Stand (letzter Commit 12.02.2026). Drift bei 3 Monaten Stillstand minimal.

Was deployed ist (laut Terraform)

Infra-Stack (envs/shared)

  • RDS Postgres 17db.t4g.micro, 20 GB gp3, Single-AZ, Backup-Retention 1 Tag, Performance Insights AN (7d), Enhanced Monitoring 60s-Interval, CloudWatch-Logs-Export, publicly_accessible=true
  • Secrets Manager Secret mit 15-Tage-Rotation

App-Stack (envs/prod)

  • 4 Lambdas (Image-Container):
    • embedding — 3008 MB RAM, x86_64, Timeout 600s, ECR-Image
    • reranking — 6144 MB RAM, x86_64, Timeout 600s, ECR-Image
    • searchpipeline — 512 MB, Timeout 600s, SQS-triggered, max concurrency 50
    • status-handler — 128 MB (ECR-Image)
  • 2 Lambdas (Zip): api-handler 128 MB, auth-handler 128 MB
  • Provisioned Concurrency: envs/prod/app.tf:21 setzt models_concurrency = 2 — überschreibt den Default -1. Beide Modell-Lambdas haben 2 provisioned instances 24/7.
  • Lambda-Warmer: EventBridge alle 5 Minuten pro Lambda → ~52k Invocations/Monat (fast gratis)
  • SQS Standard Queue + DLQ
  • API Gateway v2 (HTTP) mit 3 Routes + Lambda-Authorizer
  • 4 ECR-Repos mit Lifecycle. Embedding-Image ~3GB, Reranking ~6GB
  • CloudWatch Logs 14 Tage Retention überall — sauber
  • VPC: Default-VPC, kein NAT-Gateway, keine VPC-Endpoints. RDS publicly_accessible, Lambdas nicht im VPC. Die einzige gute Nachricht.

Plattform-Stack (envs/global)

  • 3 CodeBuild-Projekte — request-basiert, ~0 EUR im Idle
  • S3-Read-Policy auf externen Bucket leistungen-dach-data

Nicht deployed

  • Kein SageMaker-Endpoint — Fine-Tuning lief als CodeBuild/Lambda, kein 24/7-GPU.

Kosten-Tabelle (eu-central-1, EUR/Monat, aktueller Idle-Workload)

KomponenteTypEUR/MonatAnmerkung
Lambda Provisioned Concurrency embedding24/7~332 × 3008 MB × 730h
Lambda Provisioned Concurrency reranking24/7~672 × 6144 MB × 730h
RDS db.t4g.micro Single-AZ24/7~130,018 USD/h × 730
RDS Storage gp3 20 GB24/7~2,5
RDS Backup 1 Tag24/7~0innerhalb Free-Storage
RDS Performance Insights24/7~0Free Tier 7d
RDS Enhanced Monitoring 60s24/7~0gratis bei 60s
Secrets Manager (RDS + auth)24/7~0,80,40 USD/Secret
API Gateway v2 (HTTP)request~01 USD/Mio req — Idle ≈ 0
SQS Standard + DLQrequest~0erste 1 Mio gratis
ECR Storage (~12 GB)24/7~1,10,10 USD/GB
Lambda Warmer Invocations24/7~0,51s × 6 GB × 8640/Monat
CloudWatch Logs (14d, low traffic)gemischt~1konservativ
Lambda Compute echte Requestsrequest~0Pilot, keine Last
SUMME~119 EUR/Monat

Top-3-Kostentreiber (Idle):

  1. Provisioned Concurrency reranking (~67 EUR)
  2. Provisioned Concurrency embedding (~33 EUR)
  3. RDS db.t4g.micro inkl. Storage (~16 EUR)

Zwei 24/7-Posten machen ~85% der Rechnung. Bei null Nutzung.

Quick-Wins

MaßnahmeAufwandErsparnis EUR/MonatFunktional ok?
models_concurrency = -1 in envs/prod/app.tf:21 statt 21-Zeilen-Edit + terraform apply~100Ja — Warmer alle 5 Min hält warm. Cold-Start kommt zurück bei erstem Request nach >5 Min, danach normal. Pilot-tauglich.
Warmer-Rate auf 15 Min wenn Pilot wenig genutzt1-Zeilen-Edit~0,5Akzeptable Cold-Start-Wahrscheinlichkeit
RDS stoppen (manuell, AWS startet automatisch nach 7 Tagen)manuell via Console~13Nur bei Pause — kein Kunde dran
Performance Insights + Enhanced Monitoring ausTF-Edit~0Bei db.t4g.micro überdimensioniert
Secrets-Rotation auf 90d statt 15dTF-Edit~0Vermeidet 6× pro Monat Lambda-Rotation

Kombiniert: ~119 EUR → ~18 EUR/Monat ohne Funktionsverlust.

Architektur-Alternativen (grobe Größenordnung)

Same workload (10k-Positionen-Embedding-Index, 1 GAEB-Datei/Tag, semantische Suche):

AlternativeEUR/MonatTrade-offs
(a) Single EC2 t4g.medium + Postgres+pgvector + sentence-transformers lokal~25-35Self-managed, 1 GB-Modell im Container. Keine Auto-Scaling, manuelle Backups
(b) Aurora Serverless v2 (min 0,5 ACU) + Bedrock Titan/Cohere Embedding API~50-80Aurora min 0,5 ACU ≈ 45 EUR, Bedrock-Embeddings ~0,0001/1k Tokens → bei 10k Positionen einmal indexieren ≈ 0,10 EUR
(c) Single ECS Fargate Task (0,5 vCPU, 2 GB) + RDS db.t4g.micro + embedding-API extern~35-50Fargate 0,5 vCPU 24/7 ≈ 14 EUR, RDS 16. Ein Container hält Embedding + Rerank + Search
(d) Aktuelle Architektur OHNE Provisioned Concurrency~18-25Quick-Win oben. Cold-Starts bei seltenen Requests, akzeptabel im Pilot

Empfehlung: Erst (d) — kostet einen Commit. Wenn der Pilot dauerhaft niedrigen Traffic hat: (c) ist die nüchternste Rebuild-Option (1 Container statt 4 Lambdas), ähnliche Kosten, weniger Komplexität.

Caveats

  • Live-Drift nicht geprüft — SSO-Token abgelaufen. Vor jedem terraform apply mit aws sso login --profile icking neu authentifizieren und terraform plan laufen lassen.
  • Kosten unter Last sehen anders aus — Zahlen oben sind Idle. Pro 1000 Suchen: grob 0,50-1 EUR zusätzlich.
  • Cost Explorer hätte den Drift-Check trivial gemacht — bitte nach SSO-Login aws ce get-cost-and-usage --time-period Start=2026-04-14,End=2026-05-14 --granularity MONTHLY --metrics UnblendedCost --group-by Type=DIMENSION,Key=SERVICE --profile icking laufen lassen, dann echte Zahlen statt Schätzung.

Relevante Files

  • ~/source/a-icking/terraform/envs/prod/app.tf (Zeile 21 — der eine Edit-Punkt)
  • ~/source/a-icking/terraform/modules/lambda-warmer/variables.tf (warmup_rate)
  • ~/source/a-icking/terraform/stacks/app/variables.tf (Defaults für embedding/reranking memory)
  • ~/source/a-icking/terraform/modules/rds/main.tf (Performance Insights + Monitoring schaltbar)