Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 列出特定区域的S3存储桶_Amazon Web Services_Amazon S3_Bucket - Fatal编程技术网

Amazon web services 列出特定区域的S3存储桶

Amazon web services 列出特定区域的S3存储桶,amazon-web-services,amazon-s3,bucket,Amazon Web Services,Amazon S3,Bucket,我正在使用AWS Ruby SDK v2获取S3存储桶名称。有没有办法从特定区域获取S3存储桶 我现在的做法是: buckets = s3_client.list_buckets.buckets.map(&:name) buckets.select { |name| s3_client.get_bucket_location(:bucket => name).location_constraint == @region } 这将获取bucket中的所有bucket。然后我过滤那些

我正在使用AWS Ruby SDK v2获取S3存储桶名称。有没有办法从特定区域获取S3存储桶

我现在的做法是:

buckets = s3_client.list_buckets.buckets.map(&:name)
buckets.select { |name| s3_client.get_bucket_location(:bucket => name).location_constraint == @region }
这将获取
bucket
中的所有bucket。然后我过滤那些来自我用
@region
指定的区域


我希望通过AWS SDK只发出一个请求就可以做到这一点。这有可能吗?

我用PHP SDK通过client->getBucketLocation()解决了这个问题。对于多区域客户端,您只需使用“LocationConstraint”,对于标准的单区域客户端,我可以通过捕获未定义区域的异常来处理此问题

也就是说,对于RubySDK(我不太熟悉),亚马逊建议您使用它(作为示例):


更多信息可以在这里找到:

我不知道。我想,您可以通过维护bucket到region的独立DB映射来构建一个黑客解决方案。S3客户端在实例化时不需要region参数吗?()它是否仍然返回所有桶,而不考虑区域?是的,它返回,是的,它返回。。。但无论您询问哪个端点,所有S3区域都知道所有bucket的存在,这可能至少部分是因为bucket名称空间的全局设计。@jarmod感谢您的建议!谢谢@sdmeyers!我最终求助于你写的东西,但我只想提出一个请求。例如,在获取存储桶时传入区域名称,并且可以在一个请求中完成。
require 'aws-sdk-s3'  # v2: require 'aws-sdk'

region = 'us-west-2'
s3 = Aws::S3::Resource.new(region: region)

s3.buckets.limit(50).each do |b|
  if s3.client.get_bucket_location(bucket: b.name).location_constraint == region
    puts "#{b.name}"
  end
end