簡體   English   中英

使用 Boto3 的 AWS 步驟函數任務成功回調

[英]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回調模式中使用,其中工作流暫停,直到返回任務令牌。 該任務將暫停,直到它通過SendTaskSuccessSendTaskFailure調用接收到該任務令牌。

我會將這個句柄執行 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM