使用参数从 ruby SDK 在 Java 中调用 AWS Lambda



我正在尝试使用 Ruby SDK v3 调用 AWS Lambda 函数

    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"的形式出现。我的呼叫 D 中没有 123:

我也遇到了payload论点,但我放在那里什么并不重要,它抱怨这是出乎意料的

ArgumentError: unexpected value at params[:payload]

有什么帮助吗?

input.read() 命令一次返回一个字符

下面是示例:将流用于处理程序输入/输出 (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));
        }
    }
}

因此,您的代码只读取一个字符,并且它以整数形式出现。 ASCII 中的123{字符,它是传递给函数的 JSON 的开头。

因此,您需要继续阅读,直到它返回 -1 .

或者,您可以使用常规方法定义,该定义取自 Java 中的 AWS Lambda 函数处理程序 - AWS Lambda:

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

这将允许您将输入作为一个字符串读取,而不必遍历流。

最新更新