Aws lambda 无服务器-dynamo streams-如何设置目标配置?

Aws lambda 无服务器-dynamo streams-如何设置目标配置?,aws-lambda,amazon-dynamodb,Aws Lambda,Amazon Dynamodb,我有以下lambda配置: MyFunc: handler: my_handler timeout: 60 role: myrole events: - stream: type: dynamodb arn: <<dynamo_db_stream_arn> startingPosition: LATEST maximumRetryAttempts: 3 destinations: onFailure

我有以下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
MyFunc:
处理者:我的处理者
超时:60
角色:我的角色
活动:
-流:
类型:发电机B

arn:尽管我喜欢
serverless
framework,但除了开发Lambda函数之外,我不建议使用它,我甚至不会使用
http
事件来创建API网关。坚持unix理念做一件好事,这就是我觉得无服务器应该坚持的,而不是试图成为另一个平台或其他东西,事实并非如此

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

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


只要您与无服务器默认cloudformation模板有一点点不同,您就会遇到问题,可能您现在花了几个小时在一个本应为您节省时间的工具上,因此无法达到其目的。我建议制作更多的堆栈而不是更少的堆栈,当一个堆栈需要另一个堆栈中的Lambda时,使用约定,这实际上更容易操作,因为当一件事情失败时,您仍然可以更新其他堆栈,并在更改时交换堆栈,如果将所有堆栈都放在
无服务器.yml
中,您就无法做到这一点。我认为您只是缺少了“arn:”

这是对我们有用的东西

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

非常有趣,谢谢!此外,将其从lambda配置中删除并将其创建为不同的资源也起到了作用!我将添加作为编辑解决方案
      maximumRetryAttempts: 10
      maximumRecordAgeInSeconds: 300
      bisectBatchOnFunctionError: true
      destinations:
        onFailure:
          arn:
            Fn::GetAtt:
              - fileReducerDeadLetterQueue
              - Arn
          type: sqs