#amazon-web-services #function #aws-lambda #payload #invoke-result
#amazon-web-services #функция #aws-lambda #полезная нагрузка #вызов-результат
Вопрос:
Я создал функцию в AWS lambda, которая вызывает вторую лямбда-функцию с помощью LambdaCall.
public InvokeResult invokeResponse() {
InvokeResult invokeResult = lambdaCall.invokeLambda(invokeRequestParameters.getFunctionName(), invokeRequestParameters.getPayload());
return invokeResu<
}
Полезная нагрузка представляет собой строку «Версия». Во втором лямбда-выражении код handleRequest содержит:
public String handleRequest(InputStream inputStream, Context context) {
ObjectMapper mapper = new ObjectMapper();
try {
String text = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)).lines().collect(Collectors.joining("n"));
if (text.equals(""Version"")) {
VersionResponse versionResponse = getVersion();
return mapper.writeValueAsString(versionResponse);
}
return null;
} catch (Exception error) {
LOGGER.info(error);
return null;
}
VersionResponse — это простой POJO, и я подтвердил, что GetVersion возвращает объект VersionResponse . В настоящее время лямбда-выражение извлекает «строку версии», и GetVersion работает нормально. Однако, когда строка возвращается, результат InvokeResult имеет нулевую полезную нагрузку. Есть идеи, что я делаю не так?
Комментарии:
1. Вызывается ли вызов как
RequestResponse
? Это значение по умолчанию, поэтому я бы не ожидал, что это будет вашей проблемой, но если вы установите дляEvent
него значение, вы не получите полезную нагрузку в результате.2. В настоящее время используется InvokeRequest invokeRequest = (новый InvokeRequest()).С именем функции (functionName). withPayload(«»» lambdaPayload «»»).withInvocationType(InvocationType.RequestResponse); таким образом, это тип RequestResponse :-/
Ответ №1:
Это случилось со мной (в NodeJS), потому что в лямбда-выражении, использующем асинхронную функцию, я забыл добавить a return resultValue
, чтобы вернуть правильное значение, поэтому лямбда-выражение не имело подходящего значения для возврата и использовалось null
в качестве возвращаемого значения. Я думаю, что это тоже может произойти, если в лямбде, использующем параметр обратного вызова, вы забудете вызвать callback(null, result)