使用LocalStack docker container,Java测试容器时"DynamoDbException: An unknown operation was requested."问题



我有一个使用DynamoDB的应用程序。我用docker提升了Dynamo,并使用DynamoDbClient进行处理。事实上,我已经使用docker为发电机一段时间了。我使用了testcontainers lib并创建了GenericContainer;amazon/dynolderdb local:最新";形象一切都很好。但最近我开始使用其他AWS技术,如S3和SQS,所以我决定将LocalStack Container用于所有这些技术。使用相同的客户端和配置。S3和SQS都很好,但Dynamo开始在处理我的PartiQL语句的executeStatement方法上失败(对我来说,准确使用PartiQL很重要,而不是在Java的sdk中使用嵌入方法("DynamoDbException:请求了未知操作";。我不明白问题出在哪里,因为我只换了码头集装箱。这是我的代码码头筹集:

private static final DockerImageName DOCKER_IMAGE_NAME = DockerImageName.parse("localstack/localstack")
.withTag("latest");
GenericContainer<?> localStackContainer = new LocalStackContainer(DOCKER_IMAGE_NAME)
.withServices(SQS, S3, DYNAMODB)
localStackContainer.start();

配置:(它是在scala上写的,但对这个问题来说并不重要(*端点中的端口动态替换为docker创建的端口

dynamodb {
region = "eu-central-1"
endpoint = "http://localhost:4569"
accessKeyId = "DEFAULT_ACCESS_KEY"
secretAccessKey = "DEFAULT_SECRET"
sessionToken = "DEFAULT_SESSION_TOKEN"
}

客户端创建:

@Bean
public DynamoDbClient dynamodb(final GlobalConfiguration globalConfiguration) {
GlobalConfiguration.Dynamodb ddb = globalConfiguration.dynamodb();
URI uri = URI.create(ddb.endpoint());
Region region = Region.of(ddb.region());
AwsBasicCredentials awsBasicCredentials = AwsBasicCredentials.create(ddb.accessKeyId(), ddb.secretAccessKey());
StaticCredentialsProvider staticCredentialsProvider = StaticCredentialsProvider.create(awsBasicCredentials);
return DynamoDbClient.builder()
.endpointOverride(uri)
.region(region)
.credentialsProvider(staticCredentialsProvider)
.build();
}

代码失败的地方:

dynamoDbClient.executeStatement(builder -> builder.statement(query));

看起来localstack的DynamoDB实现还不支持PartiQL。希望很快!

相关内容

最新更新