我有一个用 golang 编写的 lambda 函数。我通过调用 HTTP API 网关来运行它。它运行正常,但我想查看由我的 golang 程序生成的 stderr 中写入的日志。
我试过这
aws logs describe-log-groups
但它显示空数组:
{
"logGroups": []
}
实际上,只有当我直接调用 lambda 函数而不使用 API 网关时,我才能看到日志,如下所示:
aws lambda invoke --function-name $FUNCTION_NAME $output --log-type Tail --query 'LogResult'
在这种情况下,日志会在调用后立即打印。
但是当我通过 HTTP API 网关调用 lambda 函数时,如果能看到它的日志就更好了。
更新 1
我添加了一个名为的日志组/aws/lambda/$FUNCTION_NAME
:
aws logs create-log-group --log-group-name /aws/lambda/$FUNCTION_NAME
并向其中添加日志流:
aws logs create-log-stream --log-group-name /aws/lambda/$FUNCTION_NAME --log-stream-name /aws/lambda/$FUNCTION_NAME
然后我通过 API 调用 lambda 函数来生成一些日志。现在检查日志:
aws logs get-log-events --log-group-name /aws/lambda/$FUNCTION_NAME --log-stream-name /aws/lambda/$FUNCTION_NAME
并得到响应:
{
"nextForwardToken": "f/7872383232323",
"events": [],
"nextBackwardToken": "b/8080823092093"
}
所以我没有任何活动...嗯...
我在控制台中检查了这个日志组。那里也是空的。
更新 2
我CloudWatchFullAccess
为这个 lambda 函数附加的角色添加了策略:
aws iam attach-role-policy --role-name $roleName \
--policy-arn arn:aws:iam::aws:policy/CloudWatchFullAccess
调用 API,重新检查日志,仍然是空的。有趣的是,当我列出角色策略时,它显示一个空数组。虽然,我刚刚在上面设置了 CloudWatchFullAccess。
aws iam list-role-policies --role-name $roleName
{
"PolicyNames": []
}
答案1
当您创建 lambda 函数时,它应该有一个与之关联的日志组,但您的帐户中似乎没有任何日志组。您可以尝试创建一个具有该名称的新日志组'/aws/lambda/<function_name>'
,看看是否能解决问题。我还会尝试登录到 Web 控制台以验证您是否在那里看到相同的问题。您还可以通过 Cloud Watch 中的控制台创建日志组。