我在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端点的应用程序,我遇到了同样的错误。
答案 0 :(得分:1)
如果您为ec2实例配置了角色,则可以删除 withCredentials 方法调用。
凭据按此顺序处理: