gpt4 book ai didi

amazon-web-services - 根据错误消息重试 StepFunction 任务

转载 作者:行者123 更新时间:2023-12-05 06:28:10 25 4
gpt4 key购买 nike

根据 AWS StepFunction 文档,可以为每个错误配置重试,但我想知道是否可以使用错误消息中的详细信息来定义重试策略?

在我的例子中,我正在触发 Glue ETL 作业,该作业可能因自定义异常 NoDataLoadedException 而失败,所以我想识别它并且不重试。这是我的任务定义(第一个 Retry block 永远不会发生):

"ExecuteEtl": {
"Type": "Task",
"Resource": "arn:aws:states:::glue:startJobRun.sync",
"Parameters": {
"JobName.$": "$.jobName",
"Arguments.$": "$.jobArguments"
},
"Retry" : [{
"ErrorEquals": [ "NoDataLoadedException" ],
"MaxAttempts": 0
},{
"ErrorEquals": [ "States.Timeout", "States.TaskFailed", "States.Runtime" ],
"MaxAttempts": 4,
"IntervalSeconds": 60,
"BackoffRate": 2
}],
"Next": "ExtractGlueJobExecutionId"
}

这是失败输出:

{
"resourceType": "glue",
"resource": "startJobRun.sync",
"error": "{\"AllocatedCapacity\":10,\"Arguments\":{},\"Attempt\":0,\"CompletedOn\":1549662956476,\"ErrorMessage\":\" NoDataLoadedException No data loaded from...",
"cause": "States.TaskFailed"
}

是否可以使用 error.ErrorMessage 来确定任务的重试策略?

最佳答案

NoDataLoadedException 错误添加到 Catch block 中.在其中,您可以定义 Next 步骤。这应该有效:

"ExecuteEtl": {
"Type": "Task",
"Resource": "arn:aws:states:::glue:startJobRun.sync",
"Parameters": {
"JobName.$": "$.jobName",
"Arguments.$": "$.jobArguments"
},
"Retry" : [{
"ErrorEquals": [ "States.Timeout", "States.TaskFailed", "States.Runtime" ],
"MaxAttempts": 4,
"IntervalSeconds": 60,
"BackoffRate": 2
}],
"Catch": [{
"ErrorEquals": [ "NoDataLoadedException" ],
"Next": "NoDataStep"
}],
"Next": "ExtractGlueJobExecutionId"
}

因为 NoDataLoadedException 不会被 Retry block 处理,所以它会落入 Catch,这是您可以对其使用react的地方。

关于amazon-web-services - 根据错误消息重试 StepFunction 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54600927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com