无服务器 |如何将 Lambda 函数作为触发器连接到 DynamoDB table

Serverless | How to connect a Lambda function as trigger to a DynamoDB table

我正在尝试连接 Lambda 函数作为 DynamoDB 的触发器 table。

在我的 serverless.yml 文件中,我定义了一个 Lambda 函数和一个 DynamoDB table。

问题:如何将 Lambda 函数作为触发器附加到 DynamoDB?

我的serverless.yaml(简体):

functions:
  pushLeadEvent:
    handler: handler.pushLeadEvent
    events:
      - /* WHAT TO DO HERE? */

resources:
  Resources:
    leadEvent:
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: leadEvent
        BillingMode: PAY_PER_REQUEST
        AttributeDefinitions:
          - AttributeName: owner
            AttributeType: S
          - AttributeName: timestamp
            AttributeType: N
        KeySchema:
          - AttributeName: owner
            KeyType: HASH
          - AttributeName: timestamp
            KeyType: RANGE

根据 Serverless Framework documentation 和我个人的经验,我会推荐这个:

functions:
  pushLeadEvent:
    handler: handler.pushLeadEvent
    dependsOn:
     - leadEvent
    events:
     - stream:
       type: dynamodb
       arn: !GetAtt leadEvent.StreamArn
       batchSize: 100
       startingPosition: LATEST
       maximumRetryAttempts: 10
       bisectBatchOnFunctionError: true
       enabled: true

这将:

  • 将您的 Lambda 订阅到 leadEvent table 中的所有更改。
  • 单个批次最多可以有 100 个事件。
  • 如果事件失败,Lambda 将重试最多 10 次
  • 在每次重试时,如果批次有超过 1 个事件,它将分成 2 个分开的批次,每批次减半