状态机在过程中超时失败,应该怎么解决?

0

【以下的问题经过翻译处理】 我更新了我的状态机以使用任务令牌,现在它在选择时超时。这以前是有效的,第一个 supportticketparse lambda 函数的 cloudwatch 日志并未表明有任何问题。我的猜测是我在有效载荷定义中有错误,但我不确定。这个定义有什么明显的错误吗?如果没有,我还能在哪里寻找潜在的问题?

{
  "Comment": "A description of my state machine",
  "StartAt": "zen sort",
  "TimeoutSeconds": 60,
  "States": {
    "zen sort": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke.waitForTaskToken",
      "OutputPath": "$.Payload",
      "Parameters": {
        "FunctionName": "arn:aws:lambda:us-east-1:363540650061:function:support-ticket-parse:$LATEST",
        "Payload": {
          "ExecutionContext.$": "$$",
          "APIGatewayEndpoint": "https://9084s1lza7.execute-api.us-east-1.amazonaws.com/test/",
          "Payload.$": "$"
        }
      },
      "Next": "Choice"
    },
    "Choice": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.name",
          "StringMatches": "New User Account ",
          "Next": "send email"
        },
        {
          "Not": {
            "Variable": "$.name",
            "StringMatches": "New User Account "
          },
          "Next": "Fail"
        }
      ],
      "Default": "Fail"
    },
    "send email": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke.waitForTaskToken",
      "OutputPath": "$.Payload",
      "Parameters": {
        "FunctionName": "arn:aws:lambda:us-east-1:363540650061:function:send_email:$LATEST",
        "Payload": {
          "ExecutionContext.$": "$$",
          "APIGatewayEndpoint": "https://9084s1lza7.execute-api.us-east-1.amazonaws.com/test/",
          "Payload.$": "$"
        }
      },
      "Retry": [
        {
          "ErrorEquals": [
            "Lambda.ServiceException",
            "Lambda.AWSLambdaException",
            "Lambda.SdkClientException"
          ],
          "IntervalSeconds": 2,
          "MaxAttempts": 6,
          "BackoffRate": 2
        }
      ],
      "End": true
    },
    "Fail": {
      "Type": "Fail"
    }
  }
}
profile picture
专家
已提问 5 个月前15 查看次数
1 回答
0

【以下的回答经过翻译处理】 当您将.waitForTaskToken添加到Lambda任务中时,是否还在Lambda函数或传递令牌的下游其他地方添加了逻辑来接收任务令牌,并调用Step Functions关闭循环?如果没有,那么我认为您在这里只是看到了预期的行为。使用回调模式/.waitForTaskToken,步骤函数将调用您任务中指定的目标,然后暂停工作流程的该部分,直到您回调或超时为止。 https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html#connect-wait-token

这似乎是最有可能的情况,然而您说它“在选择时超时”,这并不相符。我想知道是否只是看起来是这样,因为您可以看到调用了Lambda函数,但看不到Choice状态已经执行。

另外,似乎您正在调用Lambda函数,然后调用API Gateway。如果可能,您需要这些代理Lambda函数,但如果不需要,请注意您可以直接从Step Functions调用API Gateway。 https://docs.aws.amazon.com/step-functions/latest/dg/connect-api-gateway.html

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则