我在指南之后在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日志组中。有人在Java上有相同的经验吗?有人有相同的经历吗?是否有解决方法的解决方法?
还发布在AWS论坛上:https://forums.aws.amazon.com/thread.jspa?threadid=254747
找到了此根本原因。角色策略不允许创建正确的日志资源,并且默默失败了。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": "*"
}
]
}