amazon-web-services - 根据错误消息重试 StepFunction 任务
问题描述
根据 AWS StepFunction 文档,可以配置每个错误的重试,但我想知道是否可以使用错误消息中的详细信息来定义重试策略?
就我而言,我正在触发 Glue ETL 作业,该作业可能会因自定义异常而失败,NoDataLoadedException
因此我想识别它并且不要重试。这是我的任务定义(第一个Retry
块永远不会发生):
"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
用来识别任务的重试策略?
解决方案
我遇到过同样的问题。
如果我的 Glue Job 没有在 S3 中写入任何数据,我想停止 Step Functions 中的工作流程。我最终做的是在 Glue 作业之后立即创建一个 Lambda,以检查文件是否写入特定时间戳分区下的存储桶中。Lambda 可以向 Step Functions 返回一个值(true、false;如果有数据或没有数据),并使用类型选择任务更改工作流程。
"If_Data": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.input",
"StringEquals": "True",
"Next": "TableCrawler"
}
],
"Default": "FinishedNoData"
},
推荐阅读
- entity-framework-6 - Entity Framework 6 or Core - 使用类似“DataReader”的模式读取查询结果
- java - 在不同操作系统上运行时使用 maven 编译 JAR 忽略 log4j2 属性
- javascript - 将 HTML 元素从一个页面移动到另一个页面
- c# - c#点云到网格
- mysql - MySQL 错误 1114:表已满
- javascript - 请解释 react.js 应用中上下文的使用
- c++ - 如何在 Visual Studio 2017 C++ 上添加预处理器定义?
- angular - Angular Material 概述了输入和 ngx-translate
- xml - 从日期输入面板格式化日期
- reactjs - Rect Styleguidist:意外的令牌导入