我正在尝试设置一个Lambda函数,该函数将在文件上传到S3存储桶时对其进行处理。我需要一种方法来查看console.log
上载文件时的输出,但是我不知道如何将Lambda函数链接到CloudWatch。
通过查看context
我的日志组/aws/lambda/wavToMp3
和日志流为的对象,我知道了2016/05/23/[$LATEST]hex_code_redacted
。因此,我在CloudWatch中创建了该组和流,但是没有任何日志记录到它。
我正在尝试设置一个Lambda函数,该函数将在文件上传到S3存储桶时对其进行处理。我需要一种方法来查看console.log
上载文件时的输出,但是我不知道如何将Lambda函数链接到CloudWatch。
通过查看context
我的日志组/aws/lambda/wavToMp3
和日志流为的对象,我知道了2016/05/23/[$LATEST]hex_code_redacted
。因此,我在CloudWatch中创建了该组和流,但是没有任何日志记录到它。
Answers:
为了使lambda函数创建日志流并将日志发布到cloudwatch,lambda执行角色需要具有以下权限。
{
"Statement": [
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Effect": "Allow",
"Resource": "arn:aws:logs:*:*:*"
}
]
}
请参阅以下AWS文档以获取更多详细信息 http://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role
Log group not found
。在这里添加它,以便其他人使用它都会找到这个答案
更新策略后,似乎必须更新函数的设置以刷新所有作业实例以读取新策略。
因此,如果在IAM中更新角色策略后仅从Lambda控制台单击“测试”按钮,则缓存的Lambda实例仍将具有旧的角色权限,因此您仍将看不到任何日志写入Cloudwatch日志。
只需将您的超时时间更改一秒钟,然后单击“保存并测试”按钮,您将开始在Cloudwatch中查看日志。
为了使lambda函数创建日志流并将日志发布到cloudwatch,lambda执行角色需要具有以下权限
我已经拥有这些权限,但是没有用。
只需将您的超时时间更改一秒钟,然后单击“保存并测试”按钮,您将开始在Cloudwatch中查看日志。
我更改了超时时间,已保存并且日志仍然无法正常工作。
我分配了另一个角色,日志仍然无法正常工作。
最后为我工作的是单击“创建自定义角色”,然后单击“允许”。就是这样,并且开始生成日志,但是由于我不想使用新角色,而是想使用现有角色,因此之后我只是分配了现有角色就可以了。因此,从技术上讲,我应该回到无法使用的原始配置,但现在可以使用了。去搞清楚。
确保在lambda函数“配置”中具有“现有角色”的完整路径:
角色:选择一个现有角色现有角色:service-role / yourRoleName
出于某种原因,仅键入yourRoleName将对某些服务(例如SES)有效,但不适用于CloudWatch。
另外,您可以尝试创建一个新角色,而不使用现有角色。这将创建具有正确配置的角色(希望如此)。
对于这个问题,我试图通过以下方法在Cloudformation脚本中创建日志组:AWS :: Logs :: LogGroup,然后尝试将Lambda日志推送到该日志组。:P新手在仔细阅读之后,我发现Lambda使用上述格式创建了自己的日志:/ aws / lambda /我们只需要为此日志组提供策略许可,或者仅提供具有以下资源的通用许可即可:arn:aws:日志::: *
希望这可以帮助
如其他答案所述,您需要授予lambda权限才能将日志发布到云监视日志。AWSAWSLambdaExecute
仅为此提供了策略。它的json是-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:*"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::*"
}
]
}
您可以在分配给lambda的角色中添加此策略,并且应该开始查看日志。
注意:它还具有S3读/写访问权限。如果您不希望这样做,则可以仅使用日志部分来创建自定义策略。
它可能已经记录了,我们只是找不到我们期望的记录...
app.use(function simpleLogger (req, res, next) {
console.info('[Logger]', req.method, req.originalUrl)
next()
})
表演GET /hello?world=1
后
本地控制台:(简单明了,不错!)
[Logger] GET /hello?world=1
CloudWatch Logs :(您可以在下面轻松找到确切的日志吗?)
START RequestId: a3552c34-f7a6-11e8-90ba-2fb886f31fb0 Version: $LATEST
2018-12-04T09:26:11.236Z a3552c34-f7a6-11e8-90ba-2fb886f31fb0 [Logger] GET /hello?world=1
END RequestId: a3552c34-f7a6-11e8-90ba-2fb886f31fb0
REPORT RequestId: a3552c34-f7a6-11e8-90ba-2fb886f31fb0 Duration: 41.02 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 29 MB
结论:太冗长,无法找到原始日志。
有一篇名为“如何使用CloudWatch监视AWS Lambda”的文章,其中有“如何在Lambda中使用CloudWatch日志”部分。看来您已经找到了答案,但是对于没有IAM特定问题的任何人,这可能会有所帮助。