Java s3sdk能否找到一个bucket';这是一个独立的区域吗?
我正在编写一个AmazonS3客户端,它可能访问不同地区的存储桶。我们的IT部门对传出HTTP的要求相当严格,我希望对该客户端使用路径式访问,以避免对每个新bucket进行防火墙更改 我的客户机使用java SDK v1.4.4.2。作为测试,我在新加坡创建了一个bucket,然后进行了一个列出对象的S3单元测试,并将其更改为使用路径样式访问:Java s3sdk能否找到一个bucket';这是一个独立的区域吗?,java,amazon-s3,Java,Amazon S3,我正在编写一个AmazonS3客户端,它可能访问不同地区的存储桶。我们的IT部门对传出HTTP的要求相当严格,我希望对该客户端使用路径式访问,以避免对每个新bucket进行防火墙更改 我的客户机使用java SDK v1.4.4.2。作为测试,我在新加坡创建了一个bucket,然后进行了一个列出对象的S3单元测试,并将其更改为使用路径样式访问: AmazonS3 client = new AmazonS3Client(environ); client.setS3ClientOptions(new
AmazonS3 client = new AmazonS3Client(environ);
client.setS3ClientOptions(new S3ClientOptions().withPathStyleAccess(true));
当我使用这个版本的客户端运行单元测试时,所有S3访问都失败,错误是我必须设置正确的端点
我的问题是,我是否必须添加逻辑来查找bucket的区域并为客户端设置该区域?或者可以将SDK设置为独立完成此操作?看起来SDK应该能够自动完成这项工作,因为查找bucket位置的功能就在这里
作为一个附带问题,使用路径样式访问是否存在任何特定的性能问题?如果我还不知道bucket的位置,我假设这只是一个额外的往返查询。但是,正如中所述,路径样式语法要求您在尝试访问bucket时使用特定于区域的端点。换句话说,对于路径式访问,您必须告诉SDK哪个区域是bucket,而不是试图自己确定它
就性能而言,应该没有区别。如果需要客户端访问不同区域中的对象,可能需要使用以下选项:
AmazonS3ClientBuilder builder.withForceGlobalBucketAccessEnabled(true)
要建立您的客户。。。看
即使客户机默认区域与目标bucket/object不同,这也可以确保请求成功
另外,如果需要获取bucket“mybucketname”的确切端点,可以使用():
s3client.headBucket(HeadBucketRequest("mybucketname")).getBucketRegion()