在使用Kinesis Consumer Library版本2开发Kinesis Consumer并将Dynamo DB端点覆盖到localstack端点时,由于SSL握手错误,该库无法创建租赁表。
我可以确认使用AWS的Dynamo DB时创建表成功,但是一旦将端点URL覆盖到本地堆栈URL,Dynamo DB客户端将在多次重试后无法创建租赁表。堆栈跟踪不是那么有用,但是Wireshark会显示所有SSL握手错误,因此我只能假设Amazon SDK不接受localstack证书。我找不到任何有关如何使用software.amazon.awssdk
软件包禁用证书验证的提示。
Region region = Region.of("us-east-1");
DefaultCredentialsProvider credentialsProvider = DefaultCredentialsProvider.create();
DynamoDbAsyncClient dynamoClient = DynamoDbAsyncClient.builder()
.region(region)
.endpointOverride(URI.create("https://localhost:4569"))
.credentialsProvider(credentialsProvider)
.build();
/ edit,这是基于来自Amazon的示例:https://docs.aws.amazon.com/streams/latest/dev/kcl2-standard-consumer-java-example.html
答案 0 :(得分:0)
在kotlin中,我正在这样设置环境变量:
System.setProperty(SDKGlobalConfiguration.DISABLE_CERT_CHECKING_SYSTEM_PROPERTY, "true");
实际上,这将允许您将localstack用于DynamoDB,这正是我设置上述环境变量的原因。
更多环境变量可以在aws-java-sdk github repo
中找到答案 1 :(得分:0)
在 SDK 版本 2 中需要使用选项:software.amazon.awssdk.http.SdkHttpConfigurationOption#TRUST_ALL_CERTIFICATES
使用示例:
private SdkAsyncHttpClient buildSdkAsyncHttpClient() {
return NettyNioAsyncHttpClient.builder()
.buildWithDefaults(
AttributeMap.builder()
.put(SdkHttpConfigurationOption.TRUST_ALL_CERTIFICATES, true)
.build()
);
}