我正在尝试使用 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”的形式出现。我的电话中没有 123 D:
我还遇到了 payload
参数,但我放在那里的内容并不重要,它提示这是意外的
ArgumentError: unexpected value at params[:payload]
请问有什么帮助吗?
最佳答案
input.read()
命令一次返回一个字符。
这是来自 Example: Using Stream for Handler Input/Output (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
。
或者,您可以使用取自 AWS Lambda Function Handler in Java - AWS Lambda 的正常方法定义。 :
outputType handler-name(inputType input, Context context) {
...
}
这将让您将输入作为一个字符串读取,而不必循环遍历流。
关于java - 从 ruby SDK 使用参数调用 Java 中的 AWS Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56611026/