Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 状态机任务卡在“中”;“运行”;调用SNS主题后的状态_Amazon Web Services_Amazon Sns_Aws Step Functions - Fatal编程技术网

Amazon web services 状态机任务卡在“中”;“运行”;调用SNS主题后的状态

Amazon web services 状态机任务卡在“中”;“运行”;调用SNS主题后的状态,amazon-web-services,amazon-sns,aws-step-functions,Amazon Web Services,Amazon Sns,Aws Step Functions,我有一个step函数,可以发布到SNS主题,然后发送电子邮件通知。电子邮件通知按预期发送,但当任务应该退出并终止step函数时,任务会陷入“运行”状态。有人知道我哪里出了问题,或者是什么原因导致了这一切吗 "ErrorNotification": { "Type": "Task", "Resource":"arn:aws:states:::sns:publish.waitForTaskToken&q

我有一个step函数,可以发布到SNS主题,然后发送电子邮件通知。电子邮件通知按预期发送,但当任务应该退出并终止step函数时,任务会陷入“运行”状态。有人知道我哪里出了问题,或者是什么原因导致了这一切吗

"ErrorNotification": {
  "Type": "Task",
  "Resource":"arn:aws:states:::sns:publish.waitForTaskToken",
  "OutputPath": "$",
  "Parameters": {
    "TopicArn": "<topic-arn>",
    "Message":{  
      "Input.$":"$",
      "TaskToken.$":"$$.Task.Token"
    }
  },
   "End": true
},  
“错误通知”:{
“类型”:“任务”,
“资源”:“arn:aws:states:::sns:publish.waitForTaskToken”,
“OutputPath”:“$”,
“参数”:{
“主题词”:“主题词”,
“电文”:{
“输入.$”:“$”,
“任务令牌.$”:“$$.Task.Token”
}
},
“结束”:正确
},  
此特定行

“资源”:“arn:aws:states:::sns:publish.waitForTaskToken”

实施

下面包含一个任务状态,该状态发布到Amazon SNS主题,然后等待返回任务令牌。请参阅使用任务标记等待回调

{
“StartAt”:“向SNS发送消息”,
“国家”:{
“向SNS发送消息”:{
“类型”:“任务”,
“资源”:“arn:aws:states:::sns:publish.waitForTaskToken”,
“参数”:{
“TopicArn”:“arn:aws:sns:us-east-1:123456789012:myTopic”,
“电文”:{
“输入.$”:“$”,
“任务令牌.$”:“$$.Task.Token”
}
},
“结束”:正确
}
}
}
在这种情况下,您需要检查是否正在从处理回调并返回最终响应的(通常是lambda)发送适当的事件

例如,对于
成功
失败
,我通过lambda处理回调功能,大致如下


...
info(f“发送任务ID{body['taskToken']}的任务检测信号”)
步骤\功能\客户端。发送\任务\心跳信号(taskToken=body[“taskToken”])
is\u task\u success=random.choice([True,False])
如果任务成功:
LOG.info(f“为任务ID{body['taskToken']}发送任务成功”)
步骤\u功能\u客户端。发送\u任务\u成功(
taskToken=body[“taskToken”],
output=json.dumps({“id”:body['id']})
)
其他:
LOG.info(f“发送任务ID{body['taskToken']}的任务失败”)
步骤\功能\客户端。发送\任务\失败(
taskToken=body[“taskToken”],
cause=“随机选择返回False。”
)
..

感谢您抽出时间为我澄清这一点。对于我的用例,我实际上不需要处理回调,所以我只是在我的step函数任务中将它改为“资源”:“arn:aws:states:::sns:publish”。@MountainBiker很高兴它成功了。干杯