AWS Python Lambda:如何为步骤函数引发异常

AWS Python Lambda:如何为步骤函数引发异常,python,amazon-web-services,aws-lambda,aws-step-functions,Python,Amazon Web Services,Aws Lambda,Aws Step Functions,我的AWS步骤函数有以下流程,Python lambda应该如何引发MyCustomError 只需使用引发异常(“MyCustomError”)?还是我需要做点别的?官方文档使用node.js作为示例,我没有看到任何Python示例 { "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "Sta

我的AWS步骤函数有以下流程,Python lambda应该如何引发MyCustomError

只需使用
引发异常(“MyCustomError”)
?还是我需要做点别的?官方文档使用node.js作为示例,我没有看到任何Python示例

{
   "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function",
   "StartAt": "HelloWorld",
   "States": {
      "HelloWorld": {
         "Type": "Task",
         "Resource": "arn:aws:lambda:us-east-1:123456789012:function:FailFunction",
         "Retry": [ {
            "ErrorEquals": ["MyCustomError"],
            "IntervalSeconds": 1,
            "MaxAttempts": 2,
            "BackoffRate": 2.0
         } ],
      "End": true
      }
   }
}

当我需要捕获并重试我们所做的API调用时,我做了类似的事情。在第一次连接到Aurora Serverless时,可能需要30秒左右的时间来启动集群。所以,如果我们得到一个超时,我只想抛出一个异常,步骤函数将重试

Step函数状态如下所示,与标准Lambda异常不同,我的自定义异常等待时间不同:

"Hello World": {
  "Type": "Task",
  "Resource": "arn:aws:lambda:us-east-1:123456789012:function:FailFunction"
  "Retry": [
    {
      "ErrorEquals": [
        "Lambda.ServiceException",
        "Lambda.AWSLambdaException",
        "Lambda.SdkClientException"
      ],
      "IntervalSeconds": 2,
      "MaxAttempts": 6,
      "BackoffRate": 2
    },
    {
      "ErrorEquals": [
        "QueryAPIUnavailableException"
      ],
      "IntervalSeconds": 30,
      "MaxAttempts": 5,
      "BackoffRate": 2
    }
  ],
  "End": true      
}
然后Lambda本身只是对一个异常子类进行提升,这个异常子类只不过是一个
过程

class QueryAPIUnavailableException(Exception): pass

def lambda_handler(event, context):
    message = my_query_api.get_message()
    if (message == 'Endpoint request timed out'):
        logger.info("Query API timed out, throwing exception for Step Function retry")
        raise QueryAPIUnavailableException(message)
    else:
        print(f"Got back message: {message}")

猜测一下,将
MyCustomError
定义为
Exception
的子类,然后
raisemycustomerror()