#amazon-web-services #aws-api-gateway #aws-step-functions
Вопрос:
Я возился с пошаговыми функциями и нашел отличное решение для организации лямбд, вызываемых из шлюза API, с использованием нового синхронного экспресс-рабочего процесса, но столкнулся с проблемой, из-за которой я не могу настроить внешний json на выходе. Я могу изменить все в узле «вывод» ответа json, используя ResultPath и OutputPath, но все остальное сохраняется и отправляется обратно пользователю (информация, которая не нужна, например, BillingDetails).
Я должен использовать шлюз HTTP API, так как он единственный, который может синхронно вызывать пошаговые функции, и вы не можете преобразовать ответ там, поэтому я хочу посмотреть, есть ли какой-либо способ преобразовать этот ответ без необходимости создавать какой-либо дополнительный слой поверх пошаговой функции, что в некотором роде разрушило бы всю цель их использования в первую очередь.
Как заставить функцию Step возвращать только» выходной » узел json и отфильтровывать все остальное?
Определение функции шага выглядит следующим образом:
{
"Comment": "Simple Lambda Function",
"StartAt": "Invoke Lambda function",
"States": {
"Invoke Lambda function": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"ResultPath": "$",
"OutputPath": "$.Payload",
"Parameters": {
"FunctionName": "LAMBDA ARN",
"Payload": {
"input.$": "$"
}
},
"End": true
}
}
}
И вывод из этого конечного автомата через шлюз API производит следующее:
{
"billingDetails": {
"billedDurationInMilliseconds": 500,
"billedMemoryUsedInMB": 64
},
"executionArn": "ARN",
"input": "{rn "sendToQueue": "true",rn "retryNumber": 1,rn "uploadFile": "testS3file"rn }",
"inputDetails": {
"__type": "com.amazonaws.swf.base.model#CloudWatchEventsExecutionDataDetails",
"included": true
},
"name": "name",
"output": "{"statusCode":200,"body":"{\"input\": {\"sendToQueue\": \"true\", \"retryNumber\": 1, \"uploadFile\": \"testS3file\"}}"}",
"outputDetails": {
"__type": "com.amazonaws.swf.base.model#CloudWatchEventsExecutionDataDetails",
"included": true
},
"startDate": 1.618947563121E9,
"stateMachineArn": "ARN",
"status": "SUCCEEDED",
"stopDate": 1.618947563572E9
}
Ответ №1:
У меня был тот же вопрос, и я задал его некоторым внутренним сотрудникам AWS, и они сказали, что на данный момент невозможно изменить вывод.
Обходным решением, как вы и предлагали, является API-шлюз — > Лямбда — > > Пошаговая функция вместо API-шлюза — > > > Пошаговая функция.
Комментарии:
1. Спасибо, что добавили свой ответ, не тот ответ, на который я надеялся, но все больше и больше казалось, что это будет единственный способ добиться этого. Я немного удивлен, что они даже добавили и продвинули эту функцию, когда на данный момент нет хорошего способа ее реализовать. Надеюсь, скоро будет добавлена возможность возвращать правильный ответ через шлюз API.