无法使用Lambda函数创建Kinesis Client

时间:2019-03-19 17:19:41

标签: aws-lambda aws-sdk amazon-kinesis

我创建了一个由DynamoDB流触发的Lambda函数。我正在尝试处理Dynamodb事件,并在进行一些转换后将它们放入Kinesis流。 Lambda可以完全访问DynamoDB和Kinesis流。 我正在使用Cloudwatch检查日志,并且可以看到DynamoDb事件已成功处理。但是,当我尝试创建Kinesis客户端(存在于其他类中)时,代码将失败。我尝试记录错误,甚至打印错误,但没有帮助。有时日志以该消息结尾

END RequestId: {some request id}

其他时候,出现以下错误

log4j:WARN No appenders could be found for logger (com.amazonaws.AmazonWebServiceClient).

创建Kinesis客户端时,代码失败。在创建Kinesis客户端之前,我可以看到日志消息/打印语句。但是正确的那行代码失败了。我不确定是什么问题。有人可以帮我吗?

这是代码失败的类

private  AmazonKinesis kinesisClient;
private String streamName;

    public TestKinesisPut(String streamName) {
        this.streamName = streamName;

        BasicAWSCredentials awsCreds = new BasicAWSCredentials("ACCESS_KEY", "SECRET_KEY");

        System.out.println("aws creds are: " + awsCreds);
        clientBuilder = AmazonKinesisClientBuilder.standard().withRegion(Regions.AP_SOUTH_1).
                withCredentials(new AWSStaticCredentialsProvider(awsCreds));
        System.out.println("Credentials are set: \n " + clientBuilder);

        try {
            System.out.println("This one is new \n About to build new kinesis client");

            // the code fails after this line
            kinesisClient = clientBuilder.build();

        System.out.println("failed to build client");
        }
        catch(Exception e) {
            System.out.println("failed to initialize producer: " + e.getMessage());
            kinesisClient = null;
        }
    }

谢谢

1 个答案:

答案 0 :(得分:0)

几天后,我决定修改Lambda函数的配置。看来问题是由OutOfMemoryError引起的。我增加了Lambda函数的内存,它开始起作用。

似乎在创建KinesisClient时,JVM脱离了元空间。我做了一些研究,发现了这个stackoverflow thread。请参考链接以查看有关类似情况的详细讨论。