【发布时间】:2018-06-06 12:16:36
【问题描述】:
我正在尝试使用 aws-java-sdk 版本 1.11.339 从 AWS 获取 ECR 授权令牌。我创建了一个类,如下所示:
public class ECRTokenGetter {
private static final Logger LOGGER = LoggerFactory.getLogger(ECRTokenGetter.class);
private static final int SINGLE_ELEMENT_INDEX = 0;
public static String getEcrAuthorisationToken(Credentials creds, String awsRegion, String registryId) {
LOGGER.debug("Obtaining temporary authorisation credentials from AWS ECR");
AmazonECR ecrClient = AmazonECRClientBuilder.standard()
.withRegion(awsRegion)
.withCredentials(new AWSStaticCredentialsProvider(new BasicSessionCredentials(
creds.getAccessKeyId(),
creds.getSecretAccessKey(),
creds.getSessionToken())))
.build();
return ecrClient.getAuthorizationToken(new GetAuthorizationTokenRequest()
.withRegistryIds(registryId))
.getAuthorizationData().get(SINGLE_ELEMENT_INDEX)
.getAuthorizationToken();
}
}
不幸的是,在执行代码时,我收到以下异常:
Exception in thread "main" java.lang.IllegalArgumentException: hostname cannot be null
at com.amazonaws.util.AwsHostNameUtils.parseRegion(AwsHostNameUtils.java:79)
at com.amazonaws.util.AwsHostNameUtils.parseRegionName(AwsHostNameUtils.java:59)
at com.amazonaws.auth.internal.AWS4SignerRequestParams.resolveRegion(AWS4SignerRequestParams.java:121)
at com.amazonaws.auth.internal.AWS4SignerRequestParams.<init>(AWS4SignerRequestParams.java:103)
at com.amazonaws.auth.AWS4Signer.sign(AWS4Signer.java:225)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1212)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1058)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:743)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:717)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513)
at com.amazonaws.services.ecr.AmazonECRClient.doInvoke(AmazonECRClient.java:1742)
at com.amazonaws.services.ecr.AmazonECRClient.invoke(AmazonECRClient.java:1718)
at com.amazonaws.services.ecr.AmazonECRClient.executeGetAuthorizationToken(AmazonECRClient.java:992)
at com.amazonaws.services.ecr.AmazonECRClient.getAuthorizationToken(AmazonECRClient.java:966)
at com.mycode.utils.ecr.aws.ECRTokenGetter.getEcrAuthorisationToken(ECRTokenGetter.java:27)
at com.mycode.utils.ecr.AWSAuthTester.main(AWSAuthTester.java:32)
我还可以观察到 AWS SDK 创建的请求对象在入口点有一个 NULL 主机,如下图所示。
DefaultRequest 对象
我该如何解决这个问题?
【问题讨论】:
-
我在客户端库版本 1.11.351 的 DynamoDB scan() 中遇到了类似的问题(1.11.351 很好)。
标签: java aws-java-sdk