amazon-web-services - 在 AWS Step Functions (boto3) 中获取任务状态
问题描述
我目前正在使用 boto3(适用于 Python 的 Amazon Web Services (AWS) 开发工具包)来创建状态机、开始执行以及在我的工作人员中检索任务并报告其状态(成功完成或失败)。
我有另一个需要知道任务状态的服务,我想通过从 AWS 检索它来做到这一点。我搜索了可用的方法,只能获取整个状态机/执行的状态(RUNNING|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"]
如果它是“FAILED”,那么我分析历史并获取与我的用例最相关的字段(对于“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
]
推荐阅读
- python - 如何在新列熊猫数据框中获取逗号分隔值?
- spring - 在 Spring Boot 中的 Http 请求中强制编码
- javascript - 两个数组javascript的区别
- python - 为什么默认值不影响 sqlalchemy 中的表?
- python - Open CV Error: Multiple bounding boxes are being created around one single object during automated annotation attempt
- javascript - How should I combine debounce with a MutationObserver
- c++ - 终止进程并关闭所有打开的监听端口
- android - File Not Created in Android P
- python - Scipy Differential Evolution - init specifying start
- android - Android GCM Push notifications not received on some latest OS (Oreo and Pie)