从Java使用AWS Lambda进行日志记录似乎已被破坏

时间:2017-04-29 15:04:45

标签: java amazon-web-services lambda

我按照指南在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

1 个答案:

答案 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": "*"
        }
    ]
}