【问题标题】:serverless - dynamo streams - how to setup destinationConfig?无服务器 - dynamodb 流 - 如何设置destinationConfig?
【发布时间】:2020-08-08 06:13:19
【问题描述】:

我有以下 lambda 配置:

MyFunc:
handler: my_handler
timeout: 60
role: myrole
events:
  - stream:
      type: dynamodb
      arn: <<dynamo_db_stream_arn>
      startingPosition: LATEST
      maximumRetryAttempts: 3
      destinations:
        onFailure: <sqs_queue_arn>
      enabled: True

然而,在部署时,我看不到 onFailure 甚至在 cloudformation 模板中呈现。 我已经按照本文档中的说明进行了设置: https://serverless.com/framework/docs/providers/aws/events/streams/

知道我错过了什么吗?

===========================

所以,完成 Snickers3192 的回答 - 我实际上不确定上面的配置有什么问题,因为无服务器应该支持它,但最终我所做的是在另一个资源中创建流处理程序,所以基本上我的无服务器看起来像这样:

functions:
  MyFunc:
  handler: my_handler
  timeout: 60
  role: myrole

resources:
  Resources:
    MySourceMapping:
      Type: AWS::Lambda::EventSourceMapping
      DependsOn: MyFuncLambdaFunction
      Properties:
        EventSourceArn: <dynamo_db_stream_arn>
        FunctionName: MyFunc
        MaximumRetryAttempts: 3
        StartingPosition: LATEST
        DestinationConfig:
          OnFailure:
            Destination: <sqs_queue_qrn>

【问题讨论】:

    标签: aws-lambda amazon-dynamodb


    【解决方案1】:

    我认为您只是缺少“arn:”

    这对我们有用。

          maximumRetryAttempts: 10
          maximumRecordAgeInSeconds: 300
          bisectBatchOnFunctionError: true
          destinations:
            onFailure:
              arn:
                Fn::GetAtt:
                  - fileReducerDeadLetterQueue
                  - Arn
              type: sqs
    

    【讨论】:

      【解决方案2】:

      尽管我喜欢 serverless 框架,但我不建议将它用于开发 Lambda 函数之外的任何事情,我什至不会使用 http 事件来创建 API 网关。坚持 unix 哲学,做好一件事,这就是我觉得 serverless 应该坚持的方式,而不是尝试成为另一种 terraform 之类的东西,事实并非如此。

      因此,在无服务器中创建您的 Lambda 函数,就是这样。在其他地方做其他事情。如果可以在 Cloudformation AWS::Lambda::EventSourceMapping 中有效地管理资源,那么您可以使用它。如果将它放在resources: 中的serverless.yml 的底部是有意义的,您可以这样做,但如果没有,则让它拥有自己的模板。

      为 DynamoDB 流设置 lambda 需要相当多的权限,我不相信 serverless 会为您做这些。正确的 AWS prod 设置也可能不会让某些外部工具也创建 iam 角色。

      只要您与无服务器默认 cloudformation 模板稍有不同,您就会遇到问题,可能您现在正在花费数小时来开发一个本应为您节省时间的工具,但却违背了它的初衷。我建议创建更多的堆栈而不是更少的堆栈,并在一个堆栈需要另一个 Lambda 时使用约定,这实际上更容易处理,因为当一件事失败时,您仍然可以更新其他堆栈,并在更改时交换堆栈,您不能这样做如果你把它全部放在serverless.yml中。

      【讨论】:

      • 非常有趣,谢谢!此外,将其从 lambda 配置中删除并将其创建为不同的资源就可以了!我将添加解决方案作为编辑
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 2015-08-10
      • 2021-01-29
      • 1970-01-01
      相关资源
      最近更新 更多