Amazon web services AWS:使用CloudFormation将死信队列(DLQ)附加到SNS发布到Lambda的正确方法

Amazon web services AWS:使用CloudFormation将死信队列(DLQ)附加到SNS发布到Lambda的正确方法,amazon-web-services,amazon-cloudformation,amazon-sns,Amazon Web Services,Amazon Cloudformation,Amazon Sns,我正试图通过CloudFormation向SNS和Lambda之间的订阅添加DLQ,以捕获无法传递的消息 我通过以下方式实现了这一目标: 在Lambda CloudFormation中创建SNS“Events”属性 使用RedrivePolicy的DLQ和与SNS相同的端点创建SNS订阅 我必须创建这两个资源,因为Lambda SNS Events属性没有DLQ的属性 这是正确的方法吗?我需要同时配置SNSEvent和订阅,这感觉不对。但这是我能找到的唯一能让我将DLQ附加到SNS订阅的方法 如

我正试图通过CloudFormation向SNS和Lambda之间的订阅添加DLQ,以捕获无法传递的消息

我通过以下方式实现了这一目标:

  • 在Lambda CloudFormation中创建SNS“Events”属性
  • 使用RedrivePolicy的DLQ和与SNS相同的端点创建SNS订阅
  • 我必须创建这两个资源,因为Lambda SNS Events属性没有DLQ的属性

    这是正确的方法吗?我需要同时配置SNSEvent和订阅,这感觉不对。但这是我能找到的唯一能让我将DLQ附加到SNS订阅的方法

    如果我们只是使用了订阅,但没有在Lambda中配置SNSEvent呢。如果我们在Lambda中实现了一个通用的处理程序,我们能让它工作吗

    相关云信息配置如下:

    #ReceivedRequestSNS角色
    收到的请求:
    类型:AWS::SNS::Topic
    特性:
    主题名称:!附属的
    -${StackName}-ReceivedRequests-${Stage}
    -StackName:!参考AWS::StackName
    舞台:!参考阶段
    #SNS的DLQ
    收到的请求SSNSDLQ:
    类型:AWS::SQS::队列
    特性:
    队列名称:{“Fn::Sub”:“${AWS::StackName}-ReceivedRequestsDLQ}
    MessageRetentionPeriod:1209600
    可视性超时:5
    #订阅
    ReceivedRequestsToLambda请求:
    类型:AWS::SNS::订阅
    特性:
    协议:lambda
    端点:!附属的
    -${LambdaArn}:实时
    -{LambdaArn:!GetAtt培训通知requestshandler.Arn}
    红河政策:
    死信目标:!GetAtt接收请求SSNSDLQ.Arn
    托皮卡恩:!参考收到的请求
    #DLQ策略
    收到的请求NSDLQ政策:
    类型:AWS::SQS::QueuePolicy
    特性:
    政策文件:
    版本:“2012-10-17”
    声明:
    -   
    效果:允许
    校长:“*”
    操作:sqs:SendMessage
    资源:!GetAtt接收请求SSNSDLQ.Arn
    队列:
    - !Ref接收请求SSNSDLQ
    [...]
    培训通知询问者:
    类型:AWS::Serverless::Function
    特性:
    Handler:'com.test.traininglambda.lambda.handlers.TrainingNotificationRequestsHandler::HandlerRequest'
    运行时:java8
    死信队列:
    类型:SQS
    塔吉特兰:!GetAtt培训通知请求Shandlerdlq.Arn
    活动:
    第七点:
    类型:SNS
    特性:
    主题:!参考收到的请求
    
    作为Lambda定义一部分的SNS事件只是一个包装器,当SAM生成最终模板时,它将转换为订阅。如果已经单独定义了订阅,则不需要这样做。SNS事件作为Lambda定义的一部分只是一个包装器,在SAM生成最终模板时将转换为订阅。如果已经单独定义了订阅,则不需要这样做。