DynamoDB cannot access stream — stream is not enabled
TL;DR — コンシューマー(Lambda イベントソースマッピング、Kinesis Adapter リーダー、または生の DescribeStream/GetShardIterator 呼び出し)が、Streams がオフ のテーブルで DynamoDB ストリームを読もうとした、または Streams が再有効化される前の古いストリーム ARN を使いました。テーブルで DynamoDB Streams を有効にし、コンシューマーをテーブルの 現在の LatestStreamArn に向けてください。
意味
Cannot access stream arn:aws:dynamodb:us-east-1:111122223333:table/Orders/stream/... .
Please ensure the ARN is correct and the stream is enabled.
DynamoDB Streams must be enabled on the table.DynamoDB Streams は オプトイン 機能です。テーブルは、StreamEnabled: true の StreamSpecification を設定したときのみストリームを持ちます。リーダー — 多くの場合 Lambda イベントソースマッピング — が、アクティブなストリームのないテーブル(またはもう存在しない ARN)に配線されると、マッピングはアタッチできず、ストリームにアクセスできないと報告します。
発生する理由
- テーブルで Streams が有効化されたことがない のに、コンシューマーがそれを期待している。
- Streams が無効化されて再有効化された — 各有効化は 真新しい ストリーム ARN(新鮮なタイムスタンプサフィックス付き)を発行します。古い ARN を保持するコンシューマーは、最大でもあと 24 時間読み取り可能な無効化されたストリームを読んでおり、その後レコードは期限切れになります。
- Infrastructure-as-code のドリフト — CDK/CloudFormation/Terraform のコンシューマーが、ストリーム設定を伝播しなかった名前/ARN でインポートされたテーブルを参照するため、ツールは Streams がオフだと考える。
- 誤ったストリーム ARN — 実際の
LatestStreamArnの代わりに、テーブル ARN や.../stream/latestプレースホルダーを使う。
修正方法
- テーブルで Streams を有効にします。
UpdateTable、コンソール、または IaC 経由で、StreamSpecification{ StreamEnabled: true, StreamViewType: NEW_AND_OLD_IMAGES }(またはコンシューマーが必要とするビュータイプ)を設定します。 - 現在のストリーム ARN を読みます。
DescribeTableを呼び出してLatestStreamArnフィールドを使います。手作りやキャッシュされた ARN は決して使いません。 - 無効化/有効化のサイクルの後、コンシューマーを新しい ARN に向け直します。Lambda イベントソースマッピングが古いストリームにバインドされていたら再作成します。
- 読み取り権限を付与します — コンシューマーのロールには、ストリーム ARN に対する
dynamodb:DescribeStream、GetRecords、GetShardIterator、ListStreamsが必要です。 - テーブル ARN とストリーム ARN を混同しないでください — ストリーム ARN は
/stream/<timestamp>で終わり、テーブル ARN はそうではありません。
コンソールなしでテーブルとそのストリーム設定を検査する必要がありますか?DynoTable デスクトップアプリ はテーブルの横にストリームステータスを表示するため、リーダーを向ける前にオンであることを確認できます。
DynoTable で再試行する前に
Lambda のイベントソースマッピングを付ける前に、DynoTable でテーブルを開き、Streams が有効かどうかと、どの StreamViewType が設定されているか(テーブル詳細)を確認しましょう。DynoTable はストリームの設定をスキーマの隣に表示するので、AWS コンソールを行き来する必要がありません。
Streams を無効にして再度有効にすると ARN が変わります — DynoTable でテーブルを更新し、AWS から現在のストリームの識別子(CLI/DescribeTable の LatestStreamArn)をコンシューマーにコピーしてください。正しいアカウント/リージョンのプロファイルから外れないよう、⌘P を使いましょう。日々のアイテムの確認は DynoTable、ストリームのコンシューマーは Lambda/Kinesis のツールという住み分けです。Streams を切り替えたあともテーブルがキーによる読み取りを返すことは、クエリビルダーで確認できます。
出典
- Change data capture for DynamoDB Streams (2026-07-13 時点で検証)
- Process Amazon DynamoDB records with Lambda (2026-07-13 時点で検証)
関連するエラー
- ResourceNotFoundException — テーブルまたはストリーム ARN がそもそも存在しない。
- The ARN provided is invalid — 不正な形式のストリーム ARN。
- Learn: DynamoDB Streams
参考資料
- Change data capture for DynamoDB Streams — Amazon DynamoDB Developer Guide
- Process Amazon DynamoDB records with Lambda — AWS Lambda Developer Guide
- StreamSpecification — Amazon DynamoDB API Reference
- DescribeTable — Amazon DynamoDB API Reference
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。