如何使用 AWS Lambda 调用步骤函数 (Python)
How do I invoke a step function using AWS Lambda ( Python)
我正在尝试创建一个包含两个 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 调用 return 得到答案(在本例中是数字 70)?
我已经阅读了 AWS 文档和 AWS API Gateway with Step Function 这个问题,但我仍然不清楚。
- 我怎样才能创建一个新的 lambda(或使用以上两个中的任何一个)函数,invokes/executes 这个步骤的函数是 return 答案?
- 是否有任何其他方法可以通过 API 调用 return 阶跃函数的答案?
我的问题和这个有点相似。
我尝试在 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 }"
}
- 请让我知道我需要在上面做哪些更改才能通过 API 调用 return 答案 (70)。
P.S:我想使用步进函数部署我的机器学习模型,这只是我尝试的一个简单测试。
您可以使用 describe_execution 方法来获取您的 stepfunction 的最终结果。您必须将执行 arn 作为输入传递给此方法。
下面的 python 代码将打印给定执行 arn 的输出。
import boto3
client = boto3.client('stepfunctions')
executionArn = ''
response = client.describe_execution(
executionArn=executionArn
)
#print(response)
print(response.get('output'))
我正在尝试创建一个包含两个 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 调用 return 得到答案(在本例中是数字 70)?
我已经阅读了 AWS 文档和 AWS API Gateway with Step Function 这个问题,但我仍然不清楚。
- 我怎样才能创建一个新的 lambda(或使用以上两个中的任何一个)函数,invokes/executes 这个步骤的函数是 return 答案?
- 是否有任何其他方法可以通过 API 调用 return 阶跃函数的答案?
我的问题和这个有点相似
具有 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 }"
}
- 请让我知道我需要在上面做哪些更改才能通过 API 调用 return 答案 (70)。
P.S:我想使用步进函数部署我的机器学习模型,这只是我尝试的一个简单测试。
您可以使用 describe_execution 方法来获取您的 stepfunction 的最终结果。您必须将执行 arn 作为输入传递给此方法。
下面的 python 代码将打印给定执行 arn 的输出。
import boto3
client = boto3.client('stepfunctions')
executionArn = ''
response = client.describe_execution(
executionArn=executionArn
)
#print(response)
print(response.get('output'))