在没有输出文件的情况下调用aws lambda

Ber*_*ais 6 amazon-web-services aws-cli aws-lambda

我正在尝试使用CLI在AWS上调用lambda:

aws lambda invoke --function-name GetErrorLambda --payload '{"body":"{\"Id\":[\"321\",\"123\"]}"}' \output.
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法在cli上打印输出而不是创建文件.

提前致谢.

小智 18

stdout和stderr基本上是文件,因此可以用于期望一个

aws lambda invoke --function-name GetErrorLambda --payload '{"body":"{\"Id\":[\"321\",\"123\"]}"}' /dev/stdout
Run Code Online (Sandbox Code Playgroud)

尽管在这种情况下,其余命令输出将与之重叠,所以无论如何稍后再处理它可能更好

  • 这是准确的答案 (3认同)
  • 这是一个更好的答案,但请注意,您将获得打印到 stdout 的 lambda 函数的返回值以及对“invoke”的调用的返回值。 (3认同)

Ada*_*son 12

调用lambda函数后,无法直接输出到终端.这可能是设计的,因为输出可能很容易大于窗口的缓冲区大小.

一个简单的解决方法是简单地按照cli命令"捕捉"输出文件的内容,如下所示:

aws lambda invoke --function-name GetErrorLambda --payload '{"body":"{\"Id\":[\"321\",\"123\"]}"}' \output. && cat outputFileName.txt


Mik*_*neu 12

我使用以下命令:

aws lambda invoke --function-name name --payload '{...}' /dev/stdout 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

这个想法是将命令输出重定向到stderr和函数结果到stdout.


Mar*_*lle 12

您可以使用当前的 tty 作为输出文件,这允许命令输出仍然被重定向:

> aws lambda invoke --function-name name --payload '{}' $(tty) >/dev/null
LAMBDA_OUTPUT
Run Code Online (Sandbox Code Playgroud)

用于/dev/stdout输出文件之类的工作。问题#1:命令输出与它混淆:

> aws lambda invoke --function-name name --payload '{}' /dev/stdout
{ACTUAL_OUTPUT
  "StatusCode": 200,
  "ExecutedVersion": "$LATEST"
}
Run Code Online (Sandbox Code Playgroud)

问题 #2:如果您尝试重定向 stdout,那么您也只是定向了 lambda 结果。您至少可以通过管道将它们分开cat

> aws lambda invoke --function-name name --payload '{}' /dev/stdout | cat
ACTUAL_OUTPUT{
  "StatusCode": 200,
  "ExecutedVersion": "$LATEST"
}
Run Code Online (Sandbox Code Playgroud)

  • aws lambda invoke --function-namegreetingsOnDemand --payload "$payload" $(tty) >/dev/null --- Windows 10 git bash - [Errno 2] 没有这样的文件或目录:'/dev/pty0' (2认同)