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 не должен иметь значение null. по адресу spring.beans@5.2.7.RELEASE/org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) по адресу spring.beans@5.2.7.RELEASE/org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:650) ... 58 пропущенных общих кадров Причина: java.lang.NullPointerException: клиент STS не должен иметь значение null.

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();
}
Другие вопросы по тегам