无法导入AWSSecurityTokenServiceClientBuilder获取临时凭证问题
解决AWS SDK 1.7.4中找不到AWSSecurityTokenServiceClientBuilder的问题
这个问题的核心原因很明确:AWSSecurityTokenServiceClientBuilder是AWS SDK 1.11.x版本才引入的构建器类,而你当前使用的是1.7.4版本,这个版本还没有提供这个Builder,得用旧版的客户端实例化方式。
结合你的依赖限制(hadoop-aws 2.7.3绑定aws-java-sdk 1.7.4),修改后的代码如下:
import $ivy.`com.amazonaws:aws-java-sdk:1.7.4` import $ivy.`org.apache.hadoop:hadoop-aws:2.7.3` import com.amazonaws.auth.profile.ProfileCredentialsProvider import com.amazonaws.services.securitytoken.model.AssumeRoleRequest import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient import com.amazonaws.regions.Regions val clientRegion = "*** Client region ***"; val roleARN = "*** ARN for role to be assumed ***"; val roleSessionName = "*** Role session name ***"; // 1.7.4版本创建STS客户端的方式 val stsClient = new AWSSecurityTokenServiceClient(new ProfileCredentialsProvider()) stsClient.setRegion(com.amazonaws.regions.Region.getRegion(Regions.fromName(clientRegion))) val roleRequest = new AssumeRoleRequest() .withRoleArn(roleARN) .withRoleSessionName(roleSessionName) val roleResponse = stsClient.assumeRole(roleRequest) val sessionCredentials = roleResponse.getCredentials()
关键修改点说明:
- 替换
AWSSecurityTokenServiceClientBuilder为AWSSecurityTokenServiceClient的直接实例化,传入凭证提供者 - 使用
setRegion方法设置区域,需要通过Region.getRegion(Regions.fromName(clientRegion))来构建区域对象(1.7.x版本的区域处理方式和新版不同) - 保持其他业务逻辑不变,
AssumeRoleRequest和后续获取临时凭证的逻辑在1.7.4版本中是完全兼容的
另外要注意,AWS SDK 1.x的跨版本兼容性确实很差,尤其是构建器模式这类API在1.7到1.11之间有很大变化,所以必须严格匹配依赖版本的API用法。
内容的提问来源于stack exchange,提问作者Joost Dübken
相关产品推荐
相关产品推荐

