При работе с Lambda Task State существует 3 способа структурирования состояния вашей задачи:
1. Запрос ответа:
Этот метод возвращает полный ответ API, включая поле SdkHttpMetadata. Я подозреваю, что причина возврата полного HTTP-ответа заключается в том, что это единственный способ, которым вы можете вызывать лямбда-функцию асинхронно из пошаговой функции (асинхронные лямбда-вызовы возвращают только код состояния). Пример:
"CallLambda": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "MyFunction",
"InvocationType": "Event|RequestResponse|DryRun"
},
"End": true
}
2. Лямбда ARN как ресурс:
Я считаю, что это то, что вы ищете. При указании ARN лямбда-функции в качестве ресурса, пошаговые функции будут синхронно вызывать вашу лямбда-функцию и возвращать только результат из вашей лямбда-функции без метаданных ответа API. В этом случае ваш входной сигнал состояния будет передан в качестве полезной нагрузки для вашей лямбда-функции, или вы можете использовать InputPath / Parameters для фильтрации / изменения данных, отправляемых в качестве полезной нагрузки.
"CallLambda": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-west-2:123456789012:function:my-function",
"ResultPath": "$.current_task_result",
"End": true
}
Использование ввода, как в вашем примере Вышеуказанная задача выдаст вам следующий вывод:
{
"previous_task_result": 100,
"next_task_input": "asdf",
"current_task_result": {
<Your Lambda Functions Result>
}
}
3. .WaitForTaskToken:
Передает токен вашей функции, приостанавливает выполнение до тех пор, пока не будет получен вызов SendTaskSuccess или SendTaskFailed (этот метод возвращает результат / ошибку из SendTaskSuccess или SendTaskFailed без дополнительных HTTP-метаданные).
"CallLambda": {
"Type": "Task",
"Resource":"arn:aws:states:::lambda:invoke.waitForTaskToken",
"Parameters": {
"FunctionName": "MyFunction",
"Payload":{
"token.$":"$$.Task.Token"
}
},
"End": true
}