Невозможно создать Kinesis Client в функции Lambda - PullRequest
1 голос
/ 19 марта 2019

Я создал функцию Lambda, которая запускается потоком DynamoDB. Я пытаюсь обработать события Dynamodb и поместить их в поток Kinesis после некоторой трансформации. Лямбда имеет полный доступ как к 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 голосов
/ 22 марта 2019

После нескольких дней царапин на голове я решил повозиться с настройкой своей функции Lambda.Похоже, проблема была вызвана OutOfMemoryError.Я увеличил память моей функции Lambda, и она начала работать.

Похоже, что во время создания KinesisClient JVM выходила из метапространства.Я провел некоторое исследование и обнаружил этот поток стекового потока .Пожалуйста, перейдите по ссылке, чтобы просмотреть подробное обсуждение аналогичного сценария.

...