DynamoDB にトリガーはありますか?
はい。DynamoDB のトリガーは DynamoDB Streams と AWS Lambda から組み立てられます。ストリームがアイテム単位の変更をすべて捕捉し、そのストリームを購読する Lambda 関数がそれに応じて自動的に実行されます。CREATE TRIGGER 文はありません。トリガーのコードはデータベースの外、Lambda に置かれます。
トリガーの仕組み
テーブルで DynamoDB Streams を有効にし、ストリームの ARN を Lambda 関数に関連付けます。作成・更新・削除はすべてストリームレコードとして捕捉されます。Lambda サービスは 1 秒に 4 回ストリームをポーリングし、新しいレコードのバッチで関数を同期的に呼び出します。イベントをフィルターして、関心のある変更に対してだけ関数が動くようにもできます。
関数が実際に受け取るもの
StreamViewType: NEW_AND_OLD_IMAGES でストリームを有効にし、注文を 1 件書き、ステータスを変更し、削除してから、GetRecords でシャードを読み戻しました。出てきたレコードは 3 つ、INSERT、MODIFY、REMOVE です。以下は真ん中のもの、逐語です。
{
"eventID": "77dabd57-20e1-4827-83e9-0fa20153adb0",
"eventName": "MODIFY",
"eventVersion": "1.1",
"eventSource": "aws:dynamodb",
"awsRegion": "ddblocal",
"dynamodb": {
"ApproximateCreationDateTime": 1785266820,
"Keys": {"pk": {"S": "ORDER#1"}},
"NewImage": {
"total": {"N": "42"},
"pk": {"S": "ORDER#1"},
"status": {"S": "SHIPPED"}
},
"OldImage": {
"total": {"N": "42"},
"pk": {"S": "ORDER#1"},
"status": {"S": "PENDING"}
},
"SequenceNumber": "000000000000000019180",
"SizeBytes": 67,
"StreamViewType": "NEW_AND_OLD_IMAGES"
}
}両方のイメージがレコードに入っています。PENDING から SHIPPED へという問いは、テーブルへ問い合わせ直すことなく関数の中で答えられます。トリガーの中の GetItem は読み取り 1 回分の費用がかかるうえ、次の書き込みと競走するので、どちらのイメージも記述していない第三の状態を渡してくることがあります。
ビュータイプはストリームを有効にするときに選び、既に書かれたレコードはそのとき要求したものしか持ちません。KEYS_ONLY や NEW_IMAGE を選ぶと、後から差分を取る OldImage は存在しません。
Lambda は同じレコードを Records 配列に入れて関数に渡し、eventSourceARN フィールドを追加します。上の awsRegion が ddblocal になっているのは、この実行で DynamoDB Local を使ったからです。サービスに対してならリージョンが入ります。
トリガーの用途
典型的な用途には、値が変わったときの通知の送信、ワークフローの起動、集計値やカウンターの維持、そして永続的な監査証跡のための各変更の耐久ストレージ(S3 など)への複写があります。関数がエラーになると、Lambda は成功するかレコードが期限切れになるまでバッチをリトライします。リトライとバッチ処理の挙動は設定できます。
知っておきたい制限
AWS は 1 つのストリームに購読する Lambda 関数を最大 2 つまでにすることを推奨しています。それを超えると読み取りのスロットリングを招きかねません。トリガー関数は短命であるべきです。重い処理は、インラインで長いロジックを走らせるのではなく、非同期のワークフローへ引き渡しましょう。
さらに詳しく
ストリームのモデルそのものは DynamoDB Streams ガイド から始め、トリガーが反応する書き込みを作るには式ビルダー を使い、ストリームに流れ込むアイテムの変更を眺めるには DynoTable をダウンロード してください。
参考資料
- DynamoDB Streams and AWS Lambda triggers — Amazon DynamoDB Developer Guide
- Change data capture for DynamoDB Streams — Amazon DynamoDB Developer Guide
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Using AWS Lambda with Amazon DynamoDB — AWS Lambda Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。
このストリームレコードは 2026-07-28 に、Node v24.18.0 上の @aws-sdk/client-dynamodb 3.1095.0 で DynamoDB Local 3.3.0 に対して捕捉したもので、インデント以外は手を加えずに再掲しています。