You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手求助:Serverless配置DynamoDB触发器失败

Troubleshooting DynamoDB Trigger Configuration in Serverless

Hey there! As someone who’s stumbled through this exact issue when starting out with Serverless, let’s break down the most common fixes to get your DynamoDB trigger working:

1. Make Sure Your DynamoDB Table Has Streams Enabled

First things first—your table needs to be configured to generate streams in the first place. If you’re defining the table in your Serverless resources section, you must explicitly enable streams:

resources:
  Resources:
    MyDynamoDbTable:
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: MyDynamoDbTable
        AttributeDefinitions:
          - AttributeName: id
            AttributeType: S
        KeySchema:
          - AttributeName: id
            KeyType: HASH
        ProvisionedThroughput:
          ReadCapacityUnits: 1
          WriteCapacityUnits: 1
        StreamSpecification:  # This section is non-negotiable!
          StreamEnabled: true
          StreamViewType: NEW_IMAGE  # Pick the view type your use case needs

Without this StreamSpecification, there’s no stream ARN to reference, so your trigger config will fail silently.

2. Add Required IAM Permissions for Your Lambda

Serverless doesn’t always auto-add the permissions Lambda needs to read from DynamoDB streams. Add these to your provider section:

provider:
  name: aws
  runtime: nodejs18.x  # Adjust to your preferred runtime
  iamRoleStatements:
    - Effect: Allow
      Action:
        - dynamodb:GetRecords
        - dynamodb:GetShardIterator
        - dynamodb:DescribeStream
        - dynamodb:ListStreams
      Resource:
        Fn::GetAtt:
          - MyDynamoDbTable
          - StreamArn

This ensures your Lambda has the access it needs to consume stream events.

3. Double-Check YAML Indentation

YAML is ruthless about indentation—if your stream config isn’t nested under the correct function’s events block, it won’t be applied. Verify your structure looks like this:

functions:
  myStreamHandler:  # Your Lambda function name
    handler: handler.processStream  # Path to your handler code
    events:
      - stream:
          type: dynamodb
          batchSize: 100
          enabled: true
          arn:
            Fn::GetAtt:
              - MyDynamoDbTable
              - StreamArn

A common mistake is misindenting the stream block so it’s not tied to your function’s events.

4. Inspect Deployment Logs and CloudFormation Stack

Run serverless deploy and watch the output closely. If there’s an error (like an invalid ARN or missing permissions), it’ll show up here. If deployment succeeds but the trigger isn’t visible:

  • Head to the AWS CloudFormation console
  • Find your Serverless stack
  • Check the "Resources" tab for a resource of type AWS::Lambda::EventSourceMapping
    • If it’s missing, your config wasn’t parsed correctly
    • If it exists, check its status for error details

5. Validate Hardcoded ARN Format

If you tried hardcoding the ARN, make sure it follows this exact structure:

arn:aws:dynamodb:us-east-1:123456789012:table/MyDynamoDbTable/stream/2024-05-20T12:34:56.789

Replace the region, account ID, table name, and stream timestamp with your actual values. You can copy the correct ARN directly from your DynamoDB table’s "Exports and streams" tab in the AWS console.


内容的提问来源于stack exchange,提问作者jta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:27:11