在 AWS Step Functions (boto3) 中获取任务状态
Get tasks status in AWS Step Functions (boto3)
我目前正在使用 boto3(Python 的 Amazon Web Services (AWS) SDK)来创建状态机、开始执行以及在我的工作人员中检索任务并报告它们的状态(成功完成或失败) ).
我有另一个服务需要知道任务的状态,我想通过从 AWS 检索它来做到这一点。我搜索了可用的方法,只能获取状态 machine/execution 作为一个整体的状态 (运行|SUCCEEDED|FAILED|TIMED_OUT|ABORTED).
还有get_execution_history方法,但是每个步骤都由一个顺序编号的id标识,并且没有关于任务本身的信息(仅在"stateEnteredEventDetails"事件中,其中的名称任务存在,但后续事件可能与其无关,因此无法知道任务是否成功。
是否真的无法检索特定任务的状态,还是我遗漏了什么?
谢谢!
我遇到了同样的问题,似乎步骤函数没有将状态和任务视为实体,因此没有 API 来获取有关它们的信息。
为了获取有关任务状态的信息,您需要解析执行历史记录中的信息。在我的例子中,我首先检查执行状态:
import boto3
import json
client = boto3.client("stepfunctions")
response = client.describe_execution(
executionArn=EXECUTION_ARN
)
status = response["status"]
如果它是“失败”,那么我分析历史并获取与我的用例最相关的字段(对于“TaskFailed”类型的事件):
response = client.get_execution_history(
executionArn=EXECUTION_ARN,
maxResults=1000
)
events = response["events"]
while response.get("nextToken"):
response = client.get_execution_history(
executionArn=EXECUTION_ARN,
maxResults=1000,
nextToken=response["nextToken"]
)
events += response["events"]
causes = [
json.loads(e["taskFailedEventDetails"]["cause"])
for e in events
if e["type"] == "TaskFailed"
]
return [
{
"ClusterArn": cause["ClusterArn"],
"Containers": [
{
"ContainerArn": container["ContainerArn"],
"Name": container["Name"],
"ExitCode": container["ExitCode"],
"Overrides": cause["Overrides"]["ContainerOverrides"][i]
}
for i, container in enumerate(cause["Containers"])
],
"TaskArn": cause["TaskArn"],
"StoppedReason": cause["StoppedReason"]
}
for cause in causes
]
我目前正在使用 boto3(Python 的 Amazon Web Services (AWS) SDK)来创建状态机、开始执行以及在我的工作人员中检索任务并报告它们的状态(成功完成或失败) ).
我有另一个服务需要知道任务的状态,我想通过从 AWS 检索它来做到这一点。我搜索了可用的方法,只能获取状态 machine/execution 作为一个整体的状态 (运行|SUCCEEDED|FAILED|TIMED_OUT|ABORTED).
还有get_execution_history方法,但是每个步骤都由一个顺序编号的id标识,并且没有关于任务本身的信息(仅在"stateEnteredEventDetails"事件中,其中的名称任务存在,但后续事件可能与其无关,因此无法知道任务是否成功。
是否真的无法检索特定任务的状态,还是我遗漏了什么?
谢谢!
我遇到了同样的问题,似乎步骤函数没有将状态和任务视为实体,因此没有 API 来获取有关它们的信息。
为了获取有关任务状态的信息,您需要解析执行历史记录中的信息。在我的例子中,我首先检查执行状态:
import boto3
import json
client = boto3.client("stepfunctions")
response = client.describe_execution(
executionArn=EXECUTION_ARN
)
status = response["status"]
如果它是“失败”,那么我分析历史并获取与我的用例最相关的字段(对于“TaskFailed”类型的事件):
response = client.get_execution_history(
executionArn=EXECUTION_ARN,
maxResults=1000
)
events = response["events"]
while response.get("nextToken"):
response = client.get_execution_history(
executionArn=EXECUTION_ARN,
maxResults=1000,
nextToken=response["nextToken"]
)
events += response["events"]
causes = [
json.loads(e["taskFailedEventDetails"]["cause"])
for e in events
if e["type"] == "TaskFailed"
]
return [
{
"ClusterArn": cause["ClusterArn"],
"Containers": [
{
"ContainerArn": container["ContainerArn"],
"Name": container["Name"],
"ExitCode": container["ExitCode"],
"Overrides": cause["Overrides"]["ContainerOverrides"][i]
}
for i, container in enumerate(cause["Containers"])
],
"TaskArn": cause["TaskArn"],
"StoppedReason": cause["StoppedReason"]
}
for cause in causes
]