DynamoDBLocal 凭证失败

Bex*_*Bex 4 amazon-web-services amazon-dynamodb

尽管文档表明不需要有效凭证,但 DynamoDBLocal 仍拒绝我的凭证:

适用于 DynamoDB 的 AWS 开发工具包要求您的应用程序配置指定访问密钥值和 AWS 区域值...这些值不必是有效的 AWS 值才能在本地运行。

在这种情况下,我将我的凭据设置~/.aws/credentials为:

[default] 
aws_access_key_id = BogusAwsAccessKeyId
aws_secret_access_key = BogusAwsSecretAccessKey
Run Code Online (Sandbox Code Playgroud)

使用以下命令运行 DynamoDBLocal:

java -Djava.library.path=./DynamoDBLoc_lib -jar DynamoDBLocal.jar 
Run Code Online (Sandbox Code Playgroud)

通过点击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);
  }
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出:

凭证“BogusAwsAccessKeyId”、“BogusAwsSecretAccessKey”com.amazonaws.AmazonServiceException:请求中包含的安全令牌无效。(服务:AmazonDynamoDBv2;状态代码:400;错误代码:UnrecognizedClientException

关于为什么关心凭证的有效性有什么想法吗?

jzo*_*mtn 5

withRegion()在您的代码中,您在调用 后进行调用setEndpoint()。调用将withRegion()端点设置为 DynamoDB 的 us-west-2 端点,这就是您的身份验证失败的原因(因为它实际上要去 DynamoDB us-west-2 区域)。删除withRegion()线。