Java应用中S3Client调用createBucket报UnknownHostException,但AWS CLI命令可正常创建桶的问题排查
Java应用中S3Client调用createBucket报UnknownHostException,但AWS CLI命令可正常创建桶的问题排查
我最近碰到一个特别费解的问题:我的Java应用连接NetApp StorageGRID的S3 API网关时,listBuckets操作能正常跑通,但一调用createBucket或者putObject就会抛出这个异常:
software.amazon.awssdk.core.exception.SdkClientException: Received an UnknownHostException
最开始我以为是权限不足,毕竟列表桶能成功但创建桶不行,还打算找NetApp管理员确认权限。不过我用AWS CLI命令却能毫无问题地创建桶:
aws --endpoint-url https://theendpointurltomynetappstoragegrid:10444 s3api create-bucket --bucket testbucket11
而我在Java代码里是这么实现创建桶逻辑的:
String accessKeyId = "MyAccessKeyID"; String secretAccesskey = "MySecretAccessKey"; String endpointUrl = "https://theendpointurltomynetappstoragegrid:10444"; StaticCredentialsProvider credentialsProvider = StaticCredentialsProvider.create( AwsBasicCredentials.create(accessKeyId, secretAccesskey)); // 创建S3客户端 S3Client s3Client = S3Client.builder() .credentialsProvider(credentialsProvider) .region(Region.US_EAST_1) .endpointOverride(URI.create(endpointUrl)) .overrideConfiguration(ClientOverrideConfiguration.builder() .build()) .build(); // 这个listBuckets能正常执行,说明连接是没问题的 ListBucketsResponse listBucketsResponse = s3Client.listBuckets(); CreateBucketRequest createBucketRequest = CreateBucketRequest.builder() .bucket("testbucket11") .build(); // 这里总是抛出SdkClientException: Received an UnknownHostException s3Client.createBucket(createBucketRequest);
折腾了半天我才找到根源:AWS SDK默认会用虚拟主机样式构造请求URL(比如把桶名拼到域名前面,变成testbucket11.theendpointurltomynetappstoragegrid:10444),但我的NetApp StorageGRID不支持这种格式,导致域名解析失败抛出UnknownHostException。而AWS CLI默认是用路径样式访问的,所以能正常工作。
解决方法其实很简单,只需要在构建S3Client的时候加上.forcePathStyle(true)配置,强制SDK使用路径样式的URL(桶名会作为URL路径的一部分,而不是域名前缀):
// 修改后的S3 Client构建代码 S3Client s3Client = S3Client.builder() .credentialsProvider(credentialsProvider) .region(Region.US_EAST_1) .endpointOverride(URI.create(endpointUrl)) .forcePathStyle(true) // 关键配置:强制启用路径样式访问 .overrideConfiguration(ClientOverrideConfiguration.builder() .build()) .build();
加上这个配置后,createBucket操作就和CLI一样能正常执行了。
备注:内容来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

