AWS SDK 2 承担角色

pra*_*gil 6 java amazon-dynamodb spring-boot aws-java-sdk-2.x java-14

@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();
}
Run Code Online (Sandbox Code Playgroud)

出现错误

导致: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 客户端不能为空。

pra*_*gil 14

在承担角色请求时需要设置 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();
}
Run Code Online (Sandbox Code Playgroud)

  • 这是 v1 SDK 的要求,我希望 v2 SDK 中不再需要它,因为它[未记录](https://sdk.amazonaws.com/java/api/latest/software/amazon/ awssdk/services/sts/auth/StsAssumeRoleCredentialsProvider.Builder.html)。+1 用于进行调试。 (2认同)