在 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
]