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 17 —
db.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-Imagereranking— 6144 MB RAM, x86_64, Timeout 600s, ECR-Imagesearchpipeline— 512 MB, Timeout 600s, SQS-triggered, max concurrency 50status-handler— 128 MB (ECR-Image)
- 2 Lambdas (Zip):
api-handler128 MB,auth-handler128 MB - Provisioned Concurrency:
envs/prod/app.tf:21setztmodels_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)
| Komponente | Typ | EUR/Monat | Anmerkung |
|---|---|---|---|
| Lambda Provisioned Concurrency embedding | 24/7 | ~33 | 2 × 3008 MB × 730h |
| Lambda Provisioned Concurrency reranking | 24/7 | ~67 | 2 × 6144 MB × 730h |
| RDS db.t4g.micro Single-AZ | 24/7 | ~13 | 0,018 USD/h × 730 |
| RDS Storage gp3 20 GB | 24/7 | ~2,5 | |
| RDS Backup 1 Tag | 24/7 | ~0 | innerhalb Free-Storage |
| RDS Performance Insights | 24/7 | ~0 | Free Tier 7d |
| RDS Enhanced Monitoring 60s | 24/7 | ~0 | gratis bei 60s |
| Secrets Manager (RDS + auth) | 24/7 | ~0,8 | 0,40 USD/Secret |
| API Gateway v2 (HTTP) | request | ~0 | 1 USD/Mio req — Idle ≈ 0 |
| SQS Standard + DLQ | request | ~0 | erste 1 Mio gratis |
| ECR Storage (~12 GB) | 24/7 | ~1,1 | 0,10 USD/GB |
| Lambda Warmer Invocations | 24/7 | ~0,5 | 1s × 6 GB × 8640/Monat |
| CloudWatch Logs (14d, low traffic) | gemischt | ~1 | konservativ |
| Lambda Compute echte Requests | request | ~0 | Pilot, keine Last |
| SUMME | ~119 EUR/Monat |
Top-3-Kostentreiber (Idle):
- Provisioned Concurrency reranking (~67 EUR)
- Provisioned Concurrency embedding (~33 EUR)
- RDS db.t4g.micro inkl. Storage (~16 EUR)
Zwei 24/7-Posten machen ~85% der Rechnung. Bei null Nutzung.
Quick-Wins
| Maßnahme | Aufwand | Ersparnis EUR/Monat | Funktional ok? |
|---|---|---|---|
models_concurrency = -1 in envs/prod/app.tf:21 statt 2 | 1-Zeilen-Edit + terraform apply | ~100 | Ja — 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 genutzt | 1-Zeilen-Edit | ~0,5 | Akzeptable Cold-Start-Wahrscheinlichkeit |
| RDS stoppen (manuell, AWS startet automatisch nach 7 Tagen) | manuell via Console | ~13 | Nur bei Pause — kein Kunde dran |
| Performance Insights + Enhanced Monitoring aus | TF-Edit | ~0 | Bei db.t4g.micro überdimensioniert |
| Secrets-Rotation auf 90d statt 15d | TF-Edit | ~0 | Vermeidet 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):
| Alternative | EUR/Monat | Trade-offs |
|---|---|---|
| (a) Single EC2 t4g.medium + Postgres+pgvector + sentence-transformers lokal | ~25-35 | Self-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-80 | Aurora 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-50 | Fargate 0,5 vCPU 24/7 ≈ 14 EUR, RDS 16. Ein Container hält Embedding + Rerank + Search |
| (d) Aktuelle Architektur OHNE Provisioned Concurrency | ~18-25 | Quick-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 applymitaws sso login --profile ickingneu authentifizieren undterraform planlaufen 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 ickinglaufen 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)