尽管documentation表示不需要有效的凭据,但DynamoDBLocal拒绝我的凭据:
适用于DynamoDB的AWS开发工具包要求您的应用程序配置指定访问密钥值和AWS区域值...这些值不必是有效的AWS值才能在本地运行。
在这种情况下,我将凭据~/.aws/credentials
设置为:
[default]
aws_access_key_id = BogusAwsAccessKeyId
aws_secret_access_key = BogusAwsSecretAccessKey
使用以下命令运行DynamoDBLocal:
java -Djava.library.path=./DynamoDBLoc_lib -jar DynamoDBLocal.jar
通过点击http://localhost:8000/shell/
检查它是否正常工作然后运行我的测试Java应用程序:
DefaultAWSCredentialsProviderChain credentialProvider = new DefaultAWSCredentialsProviderChain();
AWSCredentials awsCredentials = credentialProvider.getCredentials();
log.info("creds \"{}\", \"{}\"", awsCredentials.getAWSAccessKeyId(), awsCredentials.getAWSSecretKey());
AmazonDynamoDBClient client = new AmazonDynamoDBClient(credentialProvider);
client.withEndpoint("http://localhost:8000");
client.withRegion(Regions.US_WEST_2);
dynamoDB = new DynamoDB(client);
try {
TableCollection<ListTablesResult> tables = dynamoDB.listTables();
while (tables.iterator().hasNext()) { // <-- exception thrown here
log.info(tables.iterator().next().getTableName());
}
} catch (Exception e) {
log.error("", e);
}
导致此输出:
信誉“BogusAwsAccessKeyId”,“BogusAwsSecretAccessKey” com.amazonaws.AmazonServiceException:请求中包含的安全令牌无效。 (服务:AmazonDynamoDBv2;状态代码:400;错误代码:UnrecognizedClientException
有关为何关注凭据有效性的任何想法?
答案 0 :(得分:4)
在您的代码中,您在致电withRegion()
后致电setEndpoint()
。对withRegion()
的调用是将端点设置为DynamoDB的us-west-2端点,这就是您的身份验证失败的原因(因为它实际上是进入DynamoDB us-west-2区域)。删除withRegion()
行。