在 stepfunctions 中捕获错误时向 sqs 发送消息

Send message to sqs while catch error in stepfunctions

我正在使用带有 serverless-step-functions 插件的无服务器框架。我想检查我的 stepfunction 工作流程中的任何错误并将此错误发送到 sqs 队列。

目前我想将所有输入作为消息传递给队列(MessageBody: $)。但是如果我从队列中获取数据,消息是 $ (美元符号)而不是实际输入。如何将上一步的错误消息发送到队列?

  States:
    state1:
      Type: Task
      Resource:
        Fn::GetAtt: [function1, Arn]
      Next: state2
      Catch:
        - ErrorEquals: [States.ALL]
          Next: sendErrorToDLQ
          ResultPath: $.error
    state2:
      Type: Task
      Resource:
        Fn::GetAtt: [function2, Arn]
      Next: done
      Catch:
        - ErrorEquals: [ States.ALL ]
          Next: sendErrorToDLQ
          ResultPath: $.error
    sendErrorToDLQ:
      Type: Task
      Resource: arn:aws:states:::sqs:sendMessage
      Parameters:
        QueueUrl:
          Ref: ServiceDeadLetterQueue
        MessageBody: $    # <== how to pass input to sqs message
      Next: fail
    fail:
      Type: Fail
    done:
      Type: Succeed

我在连接SNS的时候也是一样的。根据 AWS 文档,我们必须遵循以下结构来发送参数

"MessageBody.$": "$"

参考:https://docs.aws.amazon.com/step-functions/latest/dg/connect-sqs.html