AWS SDK 2 берет на себя роль

@Bean
public DynamoDbClient amazonDynamoDB() {
    final AssumeRoleRequest assumeRoleRequest = AssumeRoleRequest.builder().roleSessionName(UUID.randomUUID().toString()).roleArn("roleArn").build();
    final StsAssumeRoleCredentialsProvider  stsAssumeRoleCredentialsProvider = StsAssumeRoleCredentialsProvider.builder().refreshRequest(assumeRoleRequest).build();
    return DynamoDbClient.builder().credentialsProvider(stsAssumeRoleCredentialsProvider).region(Region.EU_WEST_1)
            .build();
}

получение ошибки

Вызвано: org.springframework.beans.BeanInstantiationException: Не удалось создать экземпляр [software.amazon.awssdk.services.dynamodb.DynamoDbClient]: Заводской метод amazonDynamoDB вызвал исключение; вложенное исключение - java.lang.NullPointerException: клиент STS не должен быть нулевым. по адресу [email protected]/org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate (SimpleInstantiationStrategy.java:185) по адресу [email protected]/org.springframework.beans.factory. support.ConstructorResolver.instantiate (ConstructorResolver.java:650) ... 58 общие кадры пропущены Причина: java.lang.NullPointerException: клиент STS не должен быть нулевым.


person pravinbhogil    schedule 15.07.2020    source источник
comment
Похоже, вы передаете значение NULL в одно из полей. Вы должны отладить его, проверив значения того, что вы передаете в строке, которая сгенерировала ошибку.   -  person John Rotenstein    schedule 16.07.2020
comment
Это сработало, на самом деле это немного сбивает с толку, но, наконец, разобрались ... мы должны настроить клиент sts в запросе. @ Джон Ротенштейн   -  person pravinbhogil    schedule 17.07.2020


Ответы (1)


В предположении, что запрос роли должен установить клиента sts, и он сработал

@Bean
@Primary
public DynamoDbClient amazonDynamoDB() {
    final AssumeRoleRequest assumeRoleRequest = AssumeRoleRequest.builder().roleSessionName(UUID.randomUUID().toString()).roleArn("roleArn").build();
    final StsClient stsClient = StsClient.builder().region(Region.EU_WEST_1).build();
    final StsAssumeRoleCredentialsProvider  stsAssumeRoleCredentialsProvider = StsAssumeRoleCredentialsProvider.builder().stsClient(stsClient).refreshRequest(assumeRoleRequest).build();
    return DynamoDbClient.builder().credentialsProvider(stsAssumeRoleCredentialsProvider).region(Region.EU_WEST_1)
            .build();
}
person pravinbhogil    schedule 16.07.2020
comment
Это было требованием SDK v1, и я надеялся, что он больше не требуется в SDK v2, потому что это не задокументировано. +1 за отладку. - person kdgregory; 30.01.2021