[英]AWS step functions task success callback using Boto3
概述
When using the start_execution
method for an AWS Step Function with the SDK for Python (Boto3) I have added a 'time.sleep(6)' call to allow the step function execution to complete as a temporary fix.
如果我不添加此 function 執行將失敗,因為 state 機器尚未完成。
代碼
def runStateMachine(dictInput):
response = client.start_execution(
stateMachineArn=arn,
input=json.dumps(dictInput))
time.sleep(6)
executionArn = response["executionArn"]
desc_exec_resp = client.describe_execution(
executionArn=executionArn)
return json.loads(desc_exec_resp["output"])
問題
我可以在沒有睡眠調用的情況下使用某種回調或令牌來完成此操作嗎?
如果我理解正確,這個SendTaskSuccess API 調用可能是我需要的,但我找不到任何代碼示例。
我很好奇您如何無需等待即可在同一個 lambda 調用中恢復狀態。 即使您使用回調,它也會以完全獨立的 lambda 調用結束,具體取決於 lambda 並發設置。
API 調用SendTaskSuccess在回調模式中使用,其中工作流暫停,直到返回任務令牌。 該任務將暫停,直到它通過SendTaskSuccess
或SendTaskFailure
調用接收到該任務令牌。
我會將這個句柄執行 output 部分分解為單獨的 lambda,節省金錢和時間。
為此,您可以為 Step Functions 執行狀態更改配置一個 EventBridge (CloudWatch Events),它可以調用您的 lambda 關於完整詳細信息。 下面是步驟 function 執行的成功SUCCEEDED
的示例,您可以將 lambda 掛接到它。
{
"source": ["aws.states"],
"detail-type": ["Step Functions Execution Status Change"],
"detail": {
"status": ["SUCCEEDED"],
"stateMachineArn": ["arn:aws:states:eu-central-1:1234567890:stateMachine:Mapstate", ""]
}
}
回調可能不適合此流程。 下面是send_task_success的示例
回調模式示例(Amazon SQS、Amazon SNS、Lambda)
import boto3
step_functions = boto3.client('stepfunctions')
def handler(event, context):
# extract token from the event
task_token = event['taskToken']
step_functions.send_task_success(
taskToken=task_token,
output='json output of the task'
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.