Вызов AWS Lambda в Java из ruby ​​SDK с аргументами - PullRequest
0 голосов
/ 15 июня 2019

Я пытаюсь вызвать функцию AWS Lambda с использованием Ruby SDK v3

    Aws::Lambda::Client.new.invoke_async(function_name: ENV["FUNCTION_NAME"],
                                         invoke_args: { mas: 'que caralho' }.to_json)

Она вызывается, как и ожидалось, но если я печатаю аргументы:

    public void handleRequest(InputStream input, OutputStream output, Context context) {
        String input_string = String.valueOf(input.read());
        input.close();
        logger.info("Received input: " + input_string);
        ...

Они всегдаприйти как "123".В моем звонке нет 123 D:

Я также натолкнулся на аргумент payload, но это не имеет значения, что я там поставил, он жалуется, что это неожиданно

ArgumentError: unexpected value at params[:payload]

Любая помощьпожалуйста?

1 Ответ

1 голос
/ 16 июня 2019

Команда input.read() возвращает по одному символу за раз .

Вот пример кода из Пример: использование Stream для ввода / вывода обработчика (Java) - AWS Lambda :

package example;

import java.io.InputStream;
import java.io.OutputStream;
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
import com.amazonaws.services.lambda.runtime.Context; 

public class Hello implements RequestStreamHandler{
    public void handler(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
        int letter;
        while((letter = inputStream.read()) != -1)
        {
            outputStream.write(Character.toUpperCase(letter));
        }
    }
}

Следовательно, ваш код читает только один символ, и он представляется как целое число. 123 в ascii - это символ {, который является началом передачи JSON в вашу функцию.

Итак, вам нужно будет продолжить чтение, пока оно не вернется -1.

В качестве альтернативы вы можете использовать обычное определение метода, взятое из Обработчик лямбда-функции AWS в Java - AWS Lambda :

outputType handler-name(inputType input, Context context) {
   ...
}

Это позволит вам читать ваши входные данные как одну строку , вместо того, чтобы проходить через поток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...