它是我们的应用程序运行的区域吗?这样会有最小的延迟,因为它将从部署调用客户端的S3存储区读取相同的区域?
或者是存在S3存储区的区域?
行代码示例:
AmazonS3 amazonS3 = AmazonS3ClientBuilder.standard() .withRegion(Regions.US_EAST_1).build();
请不要做任何猜测工作..支持您的解释的URL(pref doc.aws.amazon.com)将受到高度赞赏..
答案 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
:
配置是否为此构建器生成的客户端启用全局存储区访问。
启用全局存储区访问时,请求路由到的区域可能与
withForceGlobalBucketAccessEnabled
中配置的区域不同,以使请求成功。启用此模式时,当前使用以下行为:
所有不对现有存储分区执行操作的请求(例如
AwsClientBuilder.setRegion(String)
)都将路由到AmazonS3Client.createBucket(String)
配置的区域,除非使用AwsClientBuilder.setRegion(String)
手动覆盖该区域,在这种情况下,请求将被路由到请求中配置的区域。第一次发出引用现有存储桶的请求(例如,
CreateBucketRequest.setRegion(String)
)时,将对AmazonS3Client.putObject(PutObjectRequest)
配置的区域发出请求,以确定创建存储区的区域。此位置可以缓存在客户端中,以便后续请求作用于同一个存储桶。启用此模式有几个缺点,因为如果存储区的位置在物理上远离调用请求的位置,则可能会增加延迟。因此,强烈建议您尽可能知道存储桶的位置,并创建一个特定于区域的客户端来访问该存储桶。