AWS-Architektur für systematisches Trading.
Cloud-Trading hat einen schlechten Ruf — zu Recht, wenn man die typischen Anfängerfehler sieht: Single-EC2-Instanz, ungesicherte API-Keys, keine Backups, keine Alerts. Richtig gebaut ist AWS aber eine der robustesten Plattformen, die Sie für systematisches Trading bekommen können. Hier zeige ich Ihnen die Architektur, die ich für Mandanten und eigene Strategien einsetze — inklusive der unbequemen Details, die kein Marketingblog erwähnt.
Warum AWS und nicht ein günstiger VPS?
Ein einzelner Hetzner-VPS kostet 5 Euro im Monat, AWS für dieselbe Workload eher 60 bis 120 Euro. Der Unterschied ist nicht Compute, sondern was Sie an Infrastruktur dazubekommen: Multi-AZ-Failover, IAM mit Audit-Trail, KMS für Secrets, CloudWatch für Metriken, EventBridge für saubere Event-Pipelines, Glacier für Compliance-Archive. Für eine Hobby-Strategie ist das Overkill. Für Mandanten-Kapital oder echtes Eigenkapital im sechsstelligen Bereich nicht.
Die zweite, wichtigere Antwort: bei AWS sind Ausfälle bekannt, dokumentiert und kompensierbar. Bei einem kleinen VPS-Anbieter erfahren Sie aus dem Forum, dass das Rechenzentrum brennt, während Ihre Strategie offene Positionen hat. Das ist mir früher passiert. Seitdem ist die Architekturentscheidung in der Cloud klar.
Die Grundarchitektur.
Eine produktive Trading-Plattform auf AWS besteht aus fünf Schichten: Daten-Ingestion, Signal-Engine, Order-Router, State-Storage und Observability. Jede Schicht ist unabhängig deployable, jede hat klare Eingaben und Ausgaben, jede ist in einer eigenen VPC-Subnet-Gruppe isoliert.
- Daten-Ingestion: Lambda-Functions, die per EventBridge-Schedule Broker- und Datenanbieter-APIs abfragen oder per Kinesis Tick-Streams konsumieren.
- Signal-Engine: ECS-Fargate-Tasks mit Python-Code, die Features berechnen und Modelle anwenden. Stateless, horizontal skalierbar.
- Order-Router: SQS-FIFO-Queue plus eine einzelne EC2-Instanz mit Idempotenz-Garantie, die Orders an den Broker schickt.
- State-Storage: DynamoDB für aktuelle Positionen, S3 für Historien, RDS Aurora Postgres für analytische Queries.
- Observability: CloudWatch Logs/Metrics, X-Ray für Tracing, SNS-Topics für Alerts an PagerDuty.
Multi-AZ und Failover.
Eine Single-AZ-Architektur ist im Live-Betrieb keine Option. AWS dokumentiert AZ-Ausfälle mehrmals pro Jahr — meist kurz, manchmal länger. Wenn Ihre Strategie offene Positionen hat und der Order-Router gerade in der ausgefallenen AZ läuft, müssen Sie manuell eingreifen. Das hat um drei Uhr morgens niemand vor.
Die Standardlösung: zwei AZs in einer Region, Active-Standby für stateful Komponenten, Active-Active für stateless. DynamoDB ist von Haus aus Multi-AZ, RDS Aurora ebenfalls wenn man die Multi-AZ-Option setzt. Der Order-Router selbst läuft als Auto-Scaling-Group mit Min=1, Max=1 und Health-Check über die SQS-Konsumrate. Fällt die Instanz aus, startet innerhalb von zwei Minuten eine neue in der zweiten AZ. Während dieser zwei Minuten stauen sich Orders in der FIFO-Queue, gehen aber nicht verloren.
Beispiel: EventBridge-Schedule für Signal-Generierung.
Hier ein typischer Ausschnitt aus einem CloudFormation-Template für eine Tages-Strategie, die täglich um 22:05 UTC (kurz nach US-Close) Signale rechnet:
# cloudformation/signal-engine.yaml
Resources:
SignalSchedule:
Type: AWS::Events::Rule
Properties:
Name: daily-signal-generation
ScheduleExpression: "cron(5 22 ? * MON-FRI *)"
State: ENABLED
Targets:
- Arn: !GetAtt SignalEngineCluster.Arn
Id: signal-engine-target
RoleArn: !GetAtt EventBridgeInvokeRole.Arn
EcsParameters:
TaskDefinitionArn: !Ref SignalEngineTaskDef
LaunchType: FARGATE
NetworkConfiguration:
AwsVpcConfiguration:
Subnets:
- !Ref PrivateSubnetA
- !Ref PrivateSubnetB
SecurityGroups:
- !Ref SignalEngineSG
AssignPublicIp: DISABLED
SignalEngineTaskDef:
Type: AWS::ECS::TaskDefinition
Properties:
Family: signal-engine
Cpu: "2048"
Memory: "8192"
NetworkMode: awsvpc
RequiresCompatibilities: [FARGATE]
ExecutionRoleArn: !GetAtt TaskExecutionRole.Arn
TaskRoleArn: !GetAtt SignalEngineTaskRole.Arn
ContainerDefinitions:
- Name: engine
Image: !Sub "${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/signal-engine:prod"
Essential: true
Environment:
- Name: DDB_TABLE
Value: !Ref PositionsTable
- Name: SIGNAL_QUEUE_URL
Value: !Ref SignalQueue
LogConfiguration:
LogDriver: awslogs
Options:
awslogs-group: /ecs/signal-engine
awslogs-region: !Ref AWS::Region
awslogs-stream-prefix: engine
Drei Dinge sind hier wichtig: erstens das AssignPublicIp: DISABLED — die
Signal-Engine hat keine direkte Internet-Verbindung, nur über NAT-Gateway. Zweitens
getrennte Rollen für Task-Execution (Container starten, Logs schreiben) und Task-Role
(DynamoDB lesen, SQS schreiben). Drittens explizite CPU/Memory-Werte — Fargate-Tasks
ohne Limits sind ein Kostenrisiko.
Secrets, IAM und API-Keys.
Der häufigste Anfängerfehler in Cloud-Trading-Setups: API-Keys in Environment-Variablen im Klartext. Das sehe ich bei fast jedem ersten Audit. Die richtige Lösung ist AWS Secrets Manager mit KMS-Verschlüsselung und automatischer Rotation, wo der Broker es unterstützt.
# Python-Code, der den API-Key zur Laufzeit holt
import boto3
import json
from functools import lru_cache
@lru_cache(maxsize=1)
def get_broker_credentials() -> dict:
client = boto3.client("secretsmanager", region_name="eu-central-1")
response = client.get_secret_value(SecretId="prod/ibkr/api")
return json.loads(response["SecretString"])
def place_order(symbol: str, quantity: int) -> str:
creds = get_broker_credentials()
# ... Order-Logik mit creds["api_key"] und creds["secret"]
Die IAM-Policy für die Task-Role erlaubt nur den secretsmanager:GetSecretValue
für genau diese eine Secret-ARN. Kein Wildcard, keine Pauschalrechte. Wenn jemand den
Container kompromittiert, bekommt er Zugriff auf einen Schlüssel — nicht auf das ganze
Account.
Kostenkontrolle.
AWS-Rechnungen sind das, woran die meisten Hobby-Setups scheitern. Die Hauptverursacher sind selten Compute, sondern: NAT-Gateway-Egress, CloudWatch-Logs ohne Retention, Lambda-Invocations in Endlosschleifen, und vergessene RDS-Instanzen.
- NAT-Gateway: 0,045 USD pro GB Egress. Wenn Sie Tick-Daten ziehen, kann das schnell dreistellig werden. VPC-Endpoints für DynamoDB, S3 und SQS sind kostenlos und ersparen den NAT-Verkehr.
- CloudWatch Logs: Default ist „nie löschen". Setzen Sie Retention auf 14 oder 30 Tage. Für Compliance-Archive: regelmäßiger S3-Export, dann Glacier.
- Budgets und Alerts: ein AWS-Budget mit Forecast-Alert bei 80 % des Monatsbudgets ist Pflicht. Ohne das merken Sie eine durchgehende Lambda-Schleife erst am Monatsende.
- Savings Plans: für ECS-Fargate-Workloads, die 24/7 laufen, lohnt sich ein 1-Jahres-Compute-Savings-Plan. Reduziert die Fargate-Kosten um etwa 25 %.
Disaster Recovery.
Was passiert, wenn die ganze Region eu-central-1 ausfällt? Selten, aber
möglich. Mein Setup für Mandanten mit hohen Beträgen: tägliche DynamoDB-Backups per
AWS Backup nach eu-west-1, S3-Cross-Region-Replication für historische
Daten, Terraform-State in einem dritten Account. Der Failover ist nicht automatisch —
in einem regionalen Ausfall lohnt sich die manuelle Entscheidung, ob man weiter handeln
will oder lieber abwartet.
Wichtiger als ein perfekter Disaster-Recovery-Plan ist eine ehrliche Bewertung: was würde es Sie tatsächlich kosten, wenn die Strategie 24 Stunden offline ist? Bei vielen Setups ist die Antwort „weniger als der monatliche Aufpreis für Multi-Region". Bauen Sie nicht für den Worst Case, den Sie nie sehen — bauen Sie für den realistischen Fall.
Wann AWS die falsche Wahl ist.
AWS ist nicht für jeden. Wenn Sie Latenz im einstelligen Millisekundenbereich brauchen (HFT, Market Making), gehen Sie zu Colocation. Wenn Ihr Strategie-Budget unter 10.000 Euro liegt und Sie eine einzige Strategie betreiben, reicht ein gut konfigurierter VPS mit Backup-Plan. Wenn Sie kein DevOps-Wissen haben und niemanden, der es Ihnen beibringt, wird die Lernkurve Sie überfordern — dann ist eine fertige Plattform wie QuantConnect oder Alpaca die bessere Wahl.
AWS ist die richtige Antwort, wenn Sie mehrere Strategien gleichzeitig betreiben, wenn Audit und Compliance eine Rolle spielen, wenn Sie mit Mandanten-Geld arbeiten, oder wenn Sie eine Infrastruktur bauen wollen, die in fünf Jahren noch sinnvoll ist — statt jedes Jahr neu zu basteln.
Sie planen einen Trading-Stack auf AWS oder migrieren bestehende Strategien in die Cloud? Erstgespräch buchen — wir schauen Architektur, Sicherheit und Kosten gemeinsam an.