我正在尝试使用 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) {
...
}
这将允许您将输入作为一个字符串读取,而不必遍历流。