我按照指南在Python和Java(简单的hello world)中创建了相同的函数。使用相同的角色,Python版本按预期工作,生成日志流条目并打印" ok"。
from __future__ import print_function
import json
print('Loading function')
def lambda_handler(event, context):
return "ok"
但是,Java版本不会记录具有相同角色和设置的任何内容。
package com.streambright;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class Dbmgmt implements RequestHandler<Object, Object> {
@Override
public String handleRequest(Object in, Context ctx) {
System.out.println("test");
ctx.getLogger().log("o hai");
return "ok";
}
}
我想知道为什么它没有把任何东西放到CloudWatch Log Groups中。有没有人有相同的Java经验?有没有人有同样的经历?有解决方法吗?
也发布在AWS论坛上:https://forums.aws.amazon.com/thread.jspa?threadID=254747
答案 0 :(得分:1)
找到了这个的根本原因。角色策略不允许创建正确的日志资源,并且它以静默方式失败。 AWS UI对于帮助识别此问题并没有太大帮助,我在审核期间意外地遇到了这个问题。在将资源改为*之后,lambda函数能够创建日志资源。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"xray:PutTraceSegments",
"xray:PutTelemetryRecords",
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"ec2:CreateNetworkInterface",
"ec2:DeleteNetworkInterface",
"ec2:DescribeNetworkInterfaces",
"kms:Decrypt"
],
"Resource": "*"
}
]
}