【问题标题】:Serverless | How to connect a Lambda function as trigger to a DynamoDB table无服务器 |如何将 Lambda 函数作为触发器连接到 DynamoDB 表
【发布时间】:2021-01-20 05:21:07
【问题描述】:

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

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

问题:如何将 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

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-dynamodb serverless-framework


    【解决方案1】:

    根据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 表中的所有更改。
    • 单个批次最多可以有 100 个事件。
    • 如果事件失败,Lambda 将重试处理最多 10 次
    • 每次重试时,如果批次有超过 1 个事件,它将被分成 2 个分开的批次

    【讨论】:

    • 谢谢。我收到错误:EventSourceArn.split 不是函数。
    • 您可以尝试在函数定义中添加dependsOn: - leadEvent 吗?就在处理程序定义下,在同一 yaml 级别上,leadEvent 应定义为列表的第一个元素,在此处搜索“dependsOn”以获得更好的示例:serverless.com/framework/docs/providers/aws/guide/…
    • 我让它工作了。需要添加dependsOn(如你所说),还要设置类型:dynamodb 谢谢你的帮助!
    猜你喜欢
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    • 2019-12-15
    • 2018-08-29
    • 2018-07-16
    • 2016-09-17
    相关资源
    最近更新 更多