DynamoDB Streams — The ARN provided is invalid
TL;DR — Ein Streams-API-Aufruf (DescribeStream, GetShardIterator, GetRecords) hat einen Stream-ARN bekommen, der kein wohlgeformter, aktueller Stream-Deskriptor ist — meist ein /stream/latest-Platzhalter, versehentlich ein Tabellen-ARN, oder ein veralteter bzw. abgeschnittener ARN. Hol den echten ARN aus LatestStreamArn von DescribeTable und übergib ihn unverändert.
Was es bedeutet
ValidationException: The ARN provided is invalidEine DynamoDB-Stream-ARN hat eine strenge Form:
arn:aws:dynamodb:us-west-2:111122223333:table/TestTable/stream/2015-05-11T21:21:33.291Das nachgestellte /stream/<ISO-8601-Zeitstempel> ist ein spezifischer Stream-Deskriptor, kein symbolischer Name. Der Streams-Endpoint weist alles zurück, was sich nicht als gültige, existierende Stream-ARN parsen lässt, mit The ARN provided is invalid.
Warum es passiert
- Ein
/stream/latest-(oder ähnlicher)-Platzhalter — manche Tools und lokale Emulatoren akzeptieren ihn, aber echtes DynamoDB verlangt den konkreten, zeitgestempelten Deskriptor. - Übergabe der Tabellen-ARN (
.../table/TestTable), wo eine Stream-ARN erwartet wurde. - Eine veraltete ARN — Streams wurde deaktiviert und wieder aktiviert, sodass der aktuelle Stream der Tabelle einen neuen Deskriptor hat; der alte Stream bleibt nach der Deaktivierung nur 24 Stunden lesbar, dann laufen seine Datensätze ab.
- Eine von Hand gebaute oder abgeschnittene ARN — falsche Region, falsches Konto, fehlendes
/stream/...-Segment oder ein zusätzliches Leerzeichen/Zeilenumbruch. - Region-Konflikt — der Streams-Client ist für eine andere Region konfiguriert, als die ARN kodiert.
So behebst du es
- Hole die ARN aus der Source of Truth. Rufe
DescribeTableauf und liesTable.LatestStreamArn; verwende genau diesen String. - Synthetisiere die ARN niemals von Hand und verwende nicht
/stream/latest— das Zeitstempel-Segment wird von DynamoDB zugewiesen und kann nicht erraten werden. - Nutze den DynamoDB-Streams-Endpoint, nicht den Haupt-DynamoDB-Endpoint, für
DescribeStream/GetShardIterator/GetRecords. - Bringe die Region des Clients mit der Region in der ARN in Einklang.
- Hole nach jedem Streams-Umschalten neu — ein Deaktivierungs-/Aktivierungszyklus erzeugt einen brandneuen Stream mit einem anderen Deskriptor, sodass die vorherige ARN nicht mehr auf den aktiven Stream zeigt.
- Entferne Leerzeichen beim Kopieren. Ein abschließender Zeilenumbruch an einer ansonsten gültigen ARN lässt die Validierung weiterhin fehlschlagen.
In DynoTable erkennen
DynoTable shows each table's LatestStreamArn in the table metadata panel — copy it verbatim instead of hand-building /stream/latest placeholders. Öffne die Tabelle mit ⌘K and expand Stream details bevor du wire a Lambda or KCL consumer.
Nutze den Query Builder to confirm the table is reachable with the same profile that owns the stream. Switch Regions with ⌘P; Verbindung testen on Einstellungen → Profile must match the ARN's Region. Siehe Mit AWS verbinden und Installation. Never hand-build the /stream/<timestamp> suffix — copy LatestStreamArn from DescribeTable every time. A table ARN (.../table/Name) is not a stream ARN and triggers the same validation failure.
Quellen
- Change data capture for DynamoDB Streams (verifiziert 2026-07-13)
- GetShardIterator — Amazon DynamoDB Streams API Reference (verifiziert 2026-07-13)
Verwandte Fehler
- Cannot access stream — stream is not enabled — Streams ist aus oder die ARN zeigt auf einen verschwundenen Stream.
- ValidationException — ungültige Parameterwerte
- Learn: DynamoDB Streams
Referenzen
- Change data capture for DynamoDB Streams — Amazon DynamoDB Developer Guide
- GetShardIterator — Amazon DynamoDB Streams API Reference
- DescribeStream — Amazon DynamoDB Streams API Reference
- DescribeTable — Amazon DynamoDB API Reference
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.