aws-cdk - 错误处理程序未捕获 Aws 阶跃函数超时
问题描述
我有以下状态,其中超时没有被捕获,但是有“States.ALL”的捕获。根据这里https://docs.aws.amazon.com/step-functions/latest/dg/concepts-error-handling.html 它应该是。你能告诉我有什么问题吗?
"PublishIotCmd&WaitTask": {
"Next": "SuccedTask",
"Retry": [
{
[..]
}
],
"Catch": [
{
"ErrorEquals": [
"States.ALL"
],
"ResultPath": "$.error",
"Next": "ErrorHandlerTask"
}
],
"Type": "Task",
"TimeoutSeconds": 600,
"ResultPath": "$.cmdResult",
"Resource": "arn:aws:states:::lambda:invoke.waitForTaskToken",
"Parameters": {
"FunctionName": "xx",
"Payload": {
"token.$": "$$.Task.Token",
"request.$": "$.detail"
}
}
},
在特定情况下,超时是由于任务没有通过 sendTaskSuccess 获得令牌。错误当然是这个,但没有调用“ErrorHandlerTask”,状态机只是挂起。
const publishIot = new tasks.LambdaInvoke(this, 'PublishIotCmd&WaitTask', {
lambdaFunction: iotSendCommandFn,
payload: sfn.TaskInput.fromObject({
token: sfn.JsonPath.taskToken,
//request: sfn.JsonPath.entirePayload,
request: sfn.JsonPath.stringAt('$.detail'),
}),
resultPath: '$.cmdResult',
integrationPattern: sfn.IntegrationPattern.WAIT_FOR_TASK_TOKEN,
timeout: Duration.minutes(TIMEOUT_WAIT_REPLY_SECONDS),
先感谢您
解决方案
对于任务令牌,我相信您应该使用心跳超时而不是一般超时。
在文档中,它调用了““HeartbeatSeconds”:600 字段将心跳超时间隔设置为 10 分钟。并且“如果等待任务在 10 分钟内没有收到有效的任务令牌,则任务将失败并出现 States.Timeout 错误名称。”
我认为因为它是一个不同的服务集成,Heartbeat 在这里工作。
https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html#connect-wait-token
推荐阅读
- typescript - typescript - 使用字符串文字类型在运行时检查字符串
- tensorflow - 从 GCP 存储桶中获取数据会出现超时错误
- python - 读取 6 个没有标题的 CSV 文件的更好方法
- reactjs - 创建一个自定义提示框并等待用户在 React Material UI 中输入
- azure-devops-server-2019 - 在 DevOps Server 2019 中查找许可证详细信息
- html - 赛普拉斯从任何下拉列表中选择任何值
- hyperledger-fabric - Hyperledger Fabric如何通过fabric-ca-client生成peer sans证书
- flutter - MissingPluginException(在通道 plugins.flutter.io/shared_preferences 上找不到方法 getAll 的实现)
- sql - SQL 中的两个条件必须为真
- flutter - 颤振barcode_scan改变颜色