【问题标题】:How do I invoke a step function using AWS Lambda ( Python)如何使用 AWS Lambda ( Python) 调用步进函数
【发布时间】:2019-10-27 15:33:25
【问题描述】:

我正在尝试创建一个包含两个 lambda 函数的简单步进函数。第一个 lambda 函数将两个数字作为用户的输入(例如 num1=2,num2 =5),并将两个数字的总和传递给第二个 lambda 函数。第二个 lambda 函数将第一个 lambda 函数的输出乘以一个常数(比如 10)。

我希望能够获得最终答案(在本例中为 (2+5)*10 = 70))作为 API 调用的输出。

我能够成功执行 Step Function(从 AWS Step Function 控制台)。但是当我调用 API(与 Step Function 集成)时得到的输出不是数字,而是如下:

{
    "executionArn": "arn:aws:states:ap-south-1:123456789012:execution:Test_Math:xxx",
    "startDate": 1560344276.117
}

如何获取 API 调用以返回答案(在本例中为数字 70)?

我已经阅读了 AWS 文档和 AWS API Gateway with Step Function 这个问题,但我仍然不清楚。

  1. 如何创建一个新的 lambda(或使用上述两个中的任何一个)函数来调用/执行此 step 函数以返回答案?
  2. 还有其他方法可以通过 API 调用返回 step 函数的答案吗?

我的问题有点类似于Api gateway get output results from step function?。 我尝试在 API Gateway 中添加第二个方法,该方法将使用 DescribeExecution 操作调用 Step Function,但它不起作用。

带有 StartExecution 动作的 POST 方法的映射模板(application/json)如下:

#set($inputRoot = $input.path('$')) 

#set($data = $util.escapeJavaScript($input.json('$')))

{
  "input": "{ \"num1\": $inputRoot.num1, \"num2\": $inputRoot.num2 }",

  "stateMachineArn": "arn:aws:states:ap-south 1:998338******:stateMachine:Test_Math"
}

我使用 DescribeExecution 操作创建了一个新的 GET 方法,其中包含以下集成请求详细信息:

Integration type: AWS Service
AWS Service: Step Functions
HTTP method: GET
Action: Describe Execution
Content Handling: Passthrough

Mapping template : application/json

#set($inputRoot = $input.path('$'))

#set($data = $util.escapeJavaScript($input.json('$')))

{
   "executionArn": "arn:aws:states:ap-south-1:998338321653:execution:Test_Math:3981114a-da51-411d-9533-8571dc976e2d",

  "input": "{ \"num1\": $inputRoot.num1, \"num2\": $inputRoot.num2 }"
}
  1. 请让我知道我需要在上面进行哪些更改才能通过 API 调用返回答案 (70)。

P.S:我想使用步进函数部署我的机器学习模型,这只是我正在尝试的一个简单测试。

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-api-gateway aws-step-functions


    【解决方案1】:

    您可以使用 describe_execution 方法来获取 stepfunction 的最终结果。您必须将执行 arn 作为输入传递给此方法。

    在此处了解更多详情,https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions.html#SFN.Client.describe_execution

    下面的python代码将打印给定执行arn的输出。

    import boto3
    
    client = boto3.client('stepfunctions')
    executionArn = ''
    
    response = client.describe_execution(
        executionArn=executionArn
    )
    #print(response)
    print(response.get('output'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-18
      • 2021-09-19
      • 2020-01-31
      • 1970-01-01
      • 2021-08-31
      • 2019-08-23
      • 1970-01-01
      相关资源
      最近更新 更多