无法在 Lambda 函数中创建 Kinesis 客户端
Unable to create Kinesis Client in Lambda function
我创建了一个由 DynamoDB 流触发的 Lambda 函数。我正在尝试处理 Dynamodb 事件并在进行一些转换后将它们放入 Kinesis 流中。 Lambda 可以完全访问 DynamoDB 和 Kinesis 流。
我正在使用 Cloudwatch 检查日志,可以看到 DynamoDb 事件已成功处理。但是当我尝试创建 Kinesis 客户端(出现在不同的 class 中)时,代码失败了。我尝试记录错误,甚至打印它,但没有帮助。有时日志以这条消息结尾
END RequestId: {some request id}
其他时候,我得到以下错误
log4j:WARN No appenders could be found for logger (com.amazonaws.AmazonWebServiceClient).
代码在创建 Kinesis 客户端时失败。在创建 Kinesis 客户端之前,我可以看到日志消息/打印语句。但是就在那一行代码失败了。我不确定是什么问题。有人可以帮我吗?
这是代码失败的class
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;
}
}
谢谢
经过几天的摸索,我决定修改我的 Lambda 函数的配置。看起来问题是由 OutOfMemoryError
引起的。我增加了 Lambda 函数的内存,它开始工作了。
似乎在创建 KinesisClient 时,JVM 正在脱离元空间。我做了一些研究,发现了这个 。请参阅 link 查看类似场景的详细讨论。
我创建了一个由 DynamoDB 流触发的 Lambda 函数。我正在尝试处理 Dynamodb 事件并在进行一些转换后将它们放入 Kinesis 流中。 Lambda 可以完全访问 DynamoDB 和 Kinesis 流。 我正在使用 Cloudwatch 检查日志,可以看到 DynamoDb 事件已成功处理。但是当我尝试创建 Kinesis 客户端(出现在不同的 class 中)时,代码失败了。我尝试记录错误,甚至打印它,但没有帮助。有时日志以这条消息结尾
END RequestId: {some request id}
其他时候,我得到以下错误
log4j:WARN No appenders could be found for logger (com.amazonaws.AmazonWebServiceClient).
代码在创建 Kinesis 客户端时失败。在创建 Kinesis 客户端之前,我可以看到日志消息/打印语句。但是就在那一行代码失败了。我不确定是什么问题。有人可以帮我吗?
这是代码失败的class
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;
}
}
谢谢
经过几天的摸索,我决定修改我的 Lambda 函数的配置。看起来问题是由 OutOfMemoryError
引起的。我增加了 Lambda 函数的内存,它开始工作了。
似乎在创建 KinesisClient 时,JVM 正在脱离元空间。我做了一些研究,发现了这个