withSgion(Regions)的AmazonS3ClientBuilder采取什么参数?

时间:2018-02-02 13:41:54

标签: amazon-web-services amazon-s3 amazon-ec2 aws-sdk

AmazonS3ClientBuilder的withRegion(Regions)采取什么参数?从AWS文档中可以看出“它设置了客户端使用的区域。”

  1. 它是我们的应用程序运行的区域吗?这样会有最小的延迟,因为它将从部署调用客户端的S3存储区读取相同的区域?

  2. 或者是存在S3存储区的区域?

  3. 行代码示例:

    AmazonS3 amazonS3 = AmazonS3ClientBuilder.standard() .withRegion(Regions.US_EAST_1).build();

    请不要做任何猜测工作..支持您的解释的URL(pref doc.aws.amazon.com)将受到高度赞赏..

1 个答案:

答案 0 :(得分:1)

https://docs.aws.amazon.com/general/latest/gr/rande.html

  

某些服务(如IAM)不支持区域;因此,他们的端点不包括区域。某些服务(如Amazon EC2)允许您指定不包含特定区域的端点,例如https://ec2.amazonaws.com。在这种情况下,AWS将端点路由到us-east-1。

     

如果服务支持区域,则每个区域中的资源是独立的。例如,如果您在一个区域中创建Amazon EC2实例或Amazon SQS队列,则实例或队列独立于另一个区域中的实例或队列。

在这种情况下,可以在特定区域中创建S3存储桶,并且可以访问多个REST端点。对于S3,您必须连接到与存储区相同的区域(区域不可知的ListAllMyBuckets之类的调用除外)。对于其他服务,您不需要。

https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

正如您所指出的,AmazonS3ClientBuilder的Javadoc非常模糊,因为它继承了withBuilder的{​​{1}}文档,该文档由支持区域的服务和不支持区域的服务继承。

为了进一步增加混淆,特别是在阅读分散在互联网上的旧建议时,过去可以使用S3 Java API从相同的区域访问任何存储桶(这些调用可能慢一点。可以使用AwsClientBuilder

恢复此行为

https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Builder.html#withForceGlobalBucketAccessEnabled-java.lang.Boolean-

  

配置是否为此构建器生成的客户端启用全局存储区访问。

     

启用全局存储区访问时,请求路由到的区域可能与withForceGlobalBucketAccessEnabled中配置的区域不同,以使请求成功。

     

启用此模式时,当前使用以下行为:

     

所有不对现有存储分区执行操作的请求(例如AwsClientBuilder.setRegion(String))都将路由到AmazonS3Client.createBucket(String)配置的区域,除非使用AwsClientBuilder.setRegion(String)手动覆盖该区域,在这种情况下,请求将被路由到请求中配置的区域。

     

第一次发出引用现有存储桶的请求(例如,CreateBucketRequest.setRegion(String))时,将对AmazonS3Client.putObject(PutObjectRequest)配置的区域发出请求,以确定创建存储区的区域。此位置可以缓存在客户端中,以便后续请求作用于同一个存储桶。

     

启用此模式有几个缺点,因为如果存储区的位置在物理上远离调用请求的位置,则可能会增加延迟。因此,强烈建议您尽可能知道存储桶的位置,并创建一个特定于区域的客户端来访问该存储桶。