Spring Boot DynamoDB AWS异常

时间:2017-12-28 14:02:45

标签: spring amazon-ec2 amazon-dynamodb aws-sdk

我在AWS DynamoDB上遇到错误:

  

[请求处理失败;嵌套异常是   com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException:The   请求中包含的安全令牌无效。 (服务:   AmazonDynamoDBv2;状态代码:400;错误代码:   UnrecognizedClientException;请求ID:   VJ8R07B81ANC1047P1ANEDS4CRVV4KQNSO5AEMVJF66Q9ASUAAJG)]与root   causecom.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException:   请求中包含的安全令牌无效。 (服务:   AmazonDynamoDBv2;状态代码:400;错误代码:   UnrecognizedClientException;请求ID:   VJ8R07B81ANC1047P1ANEDS4CRVV4KQNSO5AEMVJF66Q9ASUAAJG)

在EC2实例中运行实际的DynamoDB Endpoint。但是,当我运行应用程序并将其指向我的本地DynamoDB时,它可以工作。

任何人都有解决方案吗?感谢。

这是我在DynamoDB上的配置

@Configuration
@EnableDynamoDBRepositories(basePackages = "**.****.***.repository")
public class DynamoConfig {

    @Value("${aws.secret.key}")
    private String awsSecretKey;

    @Value("${aws.access.key}")
    private String awsAccessKey;

    @Value("${aws.dynamodb.endpoint}")
    private String awsDynamoDBEndpoint;

    @Value("${aws.region}")
    private String awsRegion;

    @Bean
    public AmazonDynamoDB amazonDynamoDB() {
        AmazonDynamoDBClientBuilder amazonDynamoDB = AmazonDynamoDBClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(amazonAWSCredentials()))
                .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(awsDynamoDBEndpoint, awsRegion));

//        amazonDynamoDB.setSignerRegionOverride(Regions.fromName(awsRegion).getName());
//        if (!StringUtils.isEmpty(awsDynamoDBEndpoint)) {
//            amazonDynamoDB.setEndpoint(awsDynamoDBEndpoint);
//        }
        return amazonDynamoDB.build();
    }

    @Bean
    public AWSCredentials amazonAWSCredentials() {
        return new BasicAWSCredentials(awsAccessKey, awsSecretKey);
    }
}

P.S我也尝试运行指向实际DynamoDB端点的应用程序,我遇到了同样的错误。

1 个答案:

答案 0 :(得分:1)

如果您为ec2实例配置了角色,则可以删除 withCredentials 方法调用。

凭据按此顺序处理:

  1. 代码已定义
  2. aws客户端配置
  3. 如果找不到先例,它将不使用凭证,只有在实例附加了授予正确权限的iam角色时才会授权