LambdaCall не возвращает полезную нагрузку в InvokeResult

#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)