DynamoDB Streams — The ARN provided is invalid

TL;DR — A Streams API call (DescribeStream, GetShardIterator, GetRecords) got a stream ARN that isn't a well-formed, current stream descriptor — usually a /stream/latest placeholder, a table ARN by mistake, or a stale/truncated ARN. Fetch the real ARN from DescribeTable's LatestStreamArn and pass it verbatim.

What it means

ValidationException: The ARN provided is invalid

A DynamoDB stream ARN has a strict shape:

arn:aws:dynamodb:us-west-2:111122223333:table/TestTable/stream/2015-05-11T21:21:33.291

The trailing /stream/<ISO-8601 timestamp> is a specific stream descriptor, not a symbolic name. The Streams endpoint rejects anything that doesn't parse as a valid, existing stream ARN with The ARN provided is invalid.

Why it happens

  • A /stream/latest (or similar) placeholder — some tools and local emulators accept it, but real DynamoDB requires the concrete timestamped descriptor.
  • Passing the table ARN (.../table/TestTable) where a stream ARN was expected.
  • A stale ARN — Streams was disabled and re-enabled, so the timestamp suffix changed and the old ARN is gone.
  • A hand-built or truncated ARN — wrong region, wrong account, missing the /stream/... segment, or an extra whitespace/newline.
  • Region mismatch — the Streams client is configured for a different region than the ARN encodes.

How to fix it

  1. Get the ARN from the source of truth. Call DescribeTable and read Table.LatestStreamArn; use that exact string.
  2. Never synthesize the ARN by hand or use /stream/latest — the timestamp segment is assigned by DynamoDB and can't be guessed.
  3. Use the DynamoDB Streams endpoint, not the main DynamoDB endpoint, for DescribeStream/GetShardIterator/GetRecords.
  4. Match the region of the client to the region in the ARN.
  5. Re-fetch after any Streams toggle — a disable/enable cycle invalidates the previous ARN.

Working with Streams and want the real stream ARN in front of you? The DynoTable desktop app shows the table's live stream descriptor so you copy the correct ARN, not a guessed one.

Work with DynamoDB without the Console

DynoTable is a fast desktop client for DynamoDB — browse tables, run SQL-style queries, and edit items locally.