Does DynamoDB have triggers?

Yes. DynamoDB triggers are built from DynamoDB Streams plus AWS Lambda: the stream captures every item-level change, and a Lambda function subscribed to the stream runs automatically in response. There is no CREATE TRIGGER statement — the trigger code lives in Lambda, outside the database.

How a trigger works

You enable DynamoDB Streams on the table, then associate the stream's ARN with a Lambda function. Every create, update, and delete is captured as a stream record; the Lambda service polls the stream four times per second and invokes your function synchronously with batches of new records. You can also filter events so the function only runs for the changes you care about.

What the function actually receives

We enabled a stream with StreamViewType: NEW_AND_OLD_IMAGES, wrote one order, changed its status, deleted it, then read the shard back with GetRecords. Three records came out, INSERT, MODIFY, REMOVE. Here is the middle one, verbatim:

{
  "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"
  }
}

Both images are in the record. PENDING to SHIPPED is answerable inside the function, with no call back to the table. A GetItem in a trigger costs a read and races the next write, so it can hand you a third state that neither image describes.

The view type is chosen when you enable the stream, and records already written carry only what it asked for. Pick KEYS_ONLY or NEW_IMAGE and there is no OldImage to diff against later.

Lambda hands your function these same records inside a Records array and adds an eventSourceARN field. The awsRegion above reads ddblocal because this run used DynamoDB Local; against the service it carries the Region.

What triggers are used for

Classic uses include sending notifications when a value changes, kicking off workflows, maintaining aggregates and counters, and copying each change to durable storage (like S3) for a permanent audit trail. If the function errors, Lambda retries the batch until it succeeds or the records expire, with configurable retry and batching behavior.

Limits worth knowing

AWS recommends subscribing at most two Lambda functions to one stream — more can cause read throttling. Trigger functions should be short-lived; for heavy processing, hand off to an asynchronous workflow instead of running long logic inline.

Go deeper

Start with the DynamoDB Streams guide for the stream model itself, use the expression builder to craft the writes your triggers react to, and download DynoTable to watch the item changes that feed your stream.

References

Last verified 2026-07-13 against the official AWS documentation linked above.

The stream record was captured 2026-07-28 against DynamoDB Local 3.3.0 with @aws-sdk/client-dynamodb 3.1095.0 on Node v24.18.0, and is reproduced unedited apart from indentation.

Work with DynamoDB without the Console

A fast DynamoDB desktop client that runs the real SQL DynamoDB can’t — JOINs, GROUP BY, aggregates — with visual editing and an AI agent on your own Bedrock keys.

Free 30-day trial, no credit card — then the Free plan with no time limit.