AWS环境下如何查看stdout?

How to view stdout in AWS environment?

下面是 lambda 函数:

exports.lendingLambdaHandler = async (event, context) => {
    const records = event.Records

    console.log(records)

    return {}
};

使用 NodeJS 运行时(作为无服务器应用程序)执行,将传入事件记录写入 stdout

根据定义,console.log 打印到 stdout,如前所述 here,但我需要查看云监视日志,因为这是 AWS 无服务器应用程序:


AWS环境下stdout的正确查看方式是什么?

这是在 AWS Lambda 中处理日志记录的标准方法。快速浏览文档显示没有可用的额外配置选项。

也就是说,有些事情可能更适合您。

正在终端中查看日志:

aws lambda invoke --function-name YOUR_FUNCTION out --log-type Tail

将 Cloudwatch 日志流式传输到其他服务: Link to article

使用流式传输方法可以让您拥有更多控制权,让您可以将日志发送到其他服务,或者自定义日志记录格式并将其保存到您想要的任何位置。

参考资料:

AWS Lambda Docs

Lambda 函数是无服务器的,但这并不意味着没有服务器 运行 宁你的 lambda 函数,它真正的意思是你没有看到那个服务器并且没有完全可以管理它。

当您调用 lambda 函数时,有一组服务器等待启动一个新的 docker 容器,您的 lambda 函数将在其中执行(或者如果您的 lambda 函数正在执行,则重用现有的执行上下文)不断调用),底线是 stdout 在 lambda 的情况下是相同的 stdout 就像你在本地(或在你有权访问的服务器上)有 运行 代码一样,区别在于您无权访问您将观察它的底层 docker 容器。因此,日志也被发送到 CW 日志,以便您可以访问它们。

AWS环境下stdout的正确查看方式是什么?

正如我所提到的,您无权访问正在执行 lambda 函数的底层容器,因此访问日志的正确方法是通过 CW 日志。当然,您可以选择将日志从 CW 流式传输到您喜欢或您的用例需要的任何其他服务。

这应该有效,因为您不必创建输出文件并直接从标准输出读取日志:

aws lambda invoke --function-name LAMBDA_FUNCTION_NAME \
                  --log-type Tail /dev/null \
                  --query 'LogResult' \
                  --output text | base64 -d

如果您需要指定个人资料名称:

aws lambda invoke --function-name LAMBDA_FUNCTION_NAME \
                  --log-type Tail /dev/null \
                  --query 'LogResult' \
                  --output text \
                  --profile PROFILE_NAME | base64 -d