如何解决调用 SNS 主题后,状态机任务卡在“正在运行”状态
我有一个步骤函数,可以发布到 SNS 主题,然后发送电子邮件通知。电子邮件通知按预期发送,但是当任务应该退出并终止 step 函数时,它会卡在“运行”状态。有谁知道我哪里出错了或可能导致这种情况的原因是什么?
"ErrorNotification": {
"Type": "Task","Resource":"arn:aws:states:::sns:publish.waitForTaskToken","OutputPath": "$","Parameters": {
"TopicArn": "<topic-arn>","Message":{
"Input.$":"$","TaskToken.$":"$$.Task.Token"
}
},"End": true
},
解决方法
这一行
"Resource":"arn:aws:states:::sns:publish.waitForTaskToken",
实现一个 Wait for a Callback with the Task Token
Call Amazon SNS with Step Functions
以下包含一个任务状态,该状态发布到 Amazon SNS 主题,然后等待返回任务令牌。请参阅使用任务令牌等待回调。
{
"StartAt":"Send message to SNS","States":{
"Send message to SNS":{
"Type":"Task","Resource":"arn:aws:states:::sns:publish.waitForTaskToken","Parameters":{
"TopicArn":"arn:aws:sns:us-east-1:123456789012:myTopic","Message":{
"Input.$":"$","TaskToken.$":"$$.Task.Token"
}
},"End":true
}
}
}
在这种情况下,您需要检查是否正在从处理回调并将最终响应发回的(通常是 lambda)发送适当的事件。
例如,我通过 lambda 处理我的回调功能,大致类似于下面的 successful
或 failed
。
...
LOG.info(f"Sending task heartbeat for task ID {body['taskToken']}")
STEP_FUNCTIONS_CLIENT.send_task_heartbeat(taskToken=body["taskToken"])
is_task_success = random.choice([True,False])
if is_task_success:
LOG.info(f"Sending task success for task ID {body['taskToken']}")
STEP_FUNCTIONS_CLIENT.send_task_success(
taskToken=body["taskToken"],output=json.dumps({"id": body['id']})
)
else:
LOG.info(f"Sending task failure for task ID {body['taskToken']}")
STEP_FUNCTIONS_CLIENT.send_task_failure(
taskToken=body["taskToken"],cause="Random choice returned False."
)
..
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。