Как вызвать функцию шага с помощью AWS Lambda (Python) - PullRequest
1 голос
/ 13 июня 2019

Я пытаюсь создать простую пошаговую функцию, состоящую из двух лямбда-функций.Первая лямбда-функция принимает два числа в качестве ввода от пользователя (скажем, num1 = 2, num2 = 5) и передает сумму двух чисел во вторую лямбда-функцию.Вторая лямбда-функция умножает вывод первой лямбда-функции на постоянную (скажем, 10).

Я хочу иметь возможность получить окончательный ответ (который (2 + 5) * 10 = 70) вв этом случае) в качестве результата вызова API.

Я могу успешно выполнить функцию шага (из консоли функции шага AWS).Но вывод, который я получаю при вызове API (интегрированный с функцией Step), не является числом, а выглядит следующим образом:

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

Как получить вызов API для возврата ответа (который является числом70 в данном случае)?

Я уже прошел через документацию AWS и AWS API Gateway с функцией шага этот вопрос, но мне все еще не ясно.

  1. Как я могу создать новую лямбда-функцию (или использовать любую из двух вышеупомянутых), которая вызывает / выполняет эту функцию шага для возврата ответа?
  2. Существуют ли другие способы возврата ответа шагафункция через вызов API?

Мой вопрос чем-то похож на этот Шлюз API получает выходные данные из пошаговой функции? .Я попытался добавить второй метод в API Gateway, который вызовет функцию шага с действием DescribeExecution, но он не работает.

Шаблон отображения (application / json) для метода POST с действием StartExecution выглядит следующим образом:

#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"
}

Я создал новый метод GET с действием DescribeExecution со следующими деталями запроса на интеграцию:

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 }"
}
Пожалуйста, дайте мне знать, какие изменения мне нужно внести в вышеуказанное, чтобы иметь возможность вернуть ответ (70) с помощью вызова API.

PS: я хочу развернуть свое машинное обучениемодель с использованием пошаговых функций, и это всего лишь простой тест, который я пробовал.

1 Ответ

3 голосов
/ 13 июня 2019

вы можете использовать description_execution метод для получения окончательного результата вашей пошаговой функции.Вы должны передать выполнение 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'))
...