如何以编程方式告知AWS Step函数执行已完成?

2024-09-27 02:25:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过SageMaker笔记本中的Python单元触发步骤函数执行,如下所示:

state_machine_arn = 'arn:aws:states:us-west-1:1234567891:stateMachine:alexanderMyPackageStateMachineE3411O13-A1vQWERTP9q9'
sfn = boto3.client('stepfunctions')
..
sfn.start_execution(**kwargs)  # Non Blocking Call
run_arn = response['executionArn']
print(f"Started run {run_name}. ARN is {run_arn}.")

然后,为了检查执行(根据输入可能需要几个小时才能完成)是否已完成,在开始对结果进行自定义后期分析之前,我手动执行了一个单元格,包括:

response = sfn.list_executions(
    stateMachineArn=state_machine_arn,
    maxResults=1
)
print(response)

其中我可以从输出中看到执行的状态,例如'status': 'RUNNING'

如何实现自动化,即触发Step函数并仅在执行完成后继续执行分析后自定义逻辑?例如,是否有一个阻止调用来启动执行,或者我可以使用一个回调方法

我可以考虑放置一个sleep方法,这样Python笔记本单元将定期调用list_executions()并检查状态,并且只有在执行完成后,才继续执行其余代码。我可以从统计学上确定睡眠时间,但我想知道是否有更简单/更准确的方法


PS:Related:How to avoid simultaneous execution in aws step function,但是我希望避免创建任何新的AWS资源,正因为如此,我希望在笔记本中完成所有工作

PPS:我无法对MyPackage和步骤函数定义进行任何更改


Tags: 方法函数runawsresponse步骤笔记本machine
1条回答
网友
1楼 · 发布于 2024-09-27 02:25:13

根据评论

如果不创建新资源(不允许创建CloudWatch事件规则、lambda函数),也不允许对现有步骤函数进行任何更改,那么迭代池将是最佳解决方案

AWS CLI和boto3实现了类似的解决方案(不是针对Step功能),而是针对一些其他服务。它们被称为waiters(例如ec2 waiters)。因此,基本上您必须为Step函数创建自己的侍者,因为AWS不提供这样的侍者。AWS使用我记忆中的服务员睡眠时间15秒

相关问题 更多 >

    热门问题