【问题标题】:Unable to create Kinesis Client in Lambda function无法在 Lambda 函数中创建 Kinesis 客户端
【发布时间】:2019-03-19 17:19:40
【问题描述】:

我创建了一个由 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;
        }
    }

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-04-15
      • 2016-07-26
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      相关资源
      最近更新 更多