Ruby on rails AWS S3:您尝试访问的存储桶必须使用指定的端点进行寻址
我正在尝试使用AWS SDK Core Ruby Gem删除上传的图像文件 我有以下代码:Ruby on rails AWS S3:您尝试访问的存储桶必须使用指定的端点进行寻址,ruby-on-rails,ruby,amazon-web-services,amazon-s3,Ruby On Rails,Ruby,Amazon Web Services,Amazon S3,我正在尝试使用AWS SDK Core Ruby Gem删除上传的图像文件 我有以下代码: require 'aws-sdk-core' def pull_picture(picture) Aws.config = { :access_key_id => ENV["AWS_ACCESS_KEY_ID"], :secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"], :region =
require 'aws-sdk-core'
def pull_picture(picture)
Aws.config = {
:access_key_id => ENV["AWS_ACCESS_KEY_ID"],
:secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"],
:region => 'us-west-2'
}
s3 = Aws::S3::Client.new
test = s3.get_object(
:bucket => ENV["AWS_S3_BUCKET"],
:key => picture.image_url.split('/')[-2],
)
end
但是,我得到以下错误:
您试图访问的存储桶必须使用指定的端点寻址。请将所有未来请求发送到此终结点
我知道该地区是正确的,因为如果我将其更改为us-east-1
,将显示以下错误:
指定的密钥不存在
我做错了什么?这个桶似乎是在另一个地区创建的,即不是美国西部2号。这是我唯一一次看到“您试图访问的存储桶必须使用指定的端点寻址。请将所有未来的请求发送到此端点。” 美国标准为
US-east-1
检查控制台中的bucket位置,然后将其用作要使用的端点的参考:
对于许多S3API包(我最近遇到了这个问题),您可能会遇到该地区被认为是美国标准的问题,如果选择在该区域之外托管bucket,则按名称查找需要显式定义该区域。我遇到了类似的错误,因为bucket位于region
us-west-2
中,并且URL模式的路径中有bucketname。有一次,我改变了URL模式,将bucketname作为URL子域来抓取文件,结果成功了
例如,以前的URL是
https://s3.amazonaws.com/bucketname/filePath/filename
然后我将其替换为
https://bucketname.s3.amazonaws.com/filePath/filename
对于仍面临此问题的ppl,请尝试将s3_主机添加到配置哈希中,如下所示
:storage => :s3,
:s3_credentials => {:access_key_id => access key,
:secret_access_key => secret access key},
:bucket => bucket name here,
:s3_host_name => s3-us-west-1.amazonaws.com or whatever comes as per your region}.
这为我解决了这个问题。在创建S3Client的过程中,您可以指定到特定区域的端点映射。如果默认值为
s3.amazonaws.com
,则将在北弗吉尼亚州的us-east-1
中创建bucket
AWS文档中有关S3端点和区域的更多详细信息:
因此,在创建S3Client和使用同一区域中的同一客户端访问S3资源时,始终确保端点/区域
如果bucket是从AWS S3控制台创建的,则检查控制台中该bucket的区域,然后使用上述链接中提到的端点详细信息在该区域中创建S3客户端 当我试图访问一个不存在的bucket时,出现了这个错误
我错误地将path变量与bucket name变量切换,因此bucket name具有文件路径值。因此,如果您在请求中设置的bucket名称是正确的,可能需要再次检查。我也有同样的错误。它发生在s3客户端创建时使用的端点与创建bucket时设置的端点不同
- 错误代码-存储桶是用EAST Region设置的
- 修理
s3Client=New Amazon3Client(AWS_ACCESS_KEY、AWS_SECRET_KEY、RegionEndpoint.USEast1)我也遇到过同样的问题。经过一番努力,我发现真正的问题是com.amazonaws依赖项。添加依赖项后,这个错误消失了。上述答案都没有解决我的问题 上面的答案可能更可能是问题的原因,但我的问题是我使用了错误的bucket名称。这是一个有效的桶名,它不是我的桶
我指向的bucket位于lambda函数的另一个区域,所以请检查您的bucket名称 我住在英国,一直在为“us-west-2”地区努力。因此,被重定向到“eu-west-2”。S3的正确区域是“eu-west-2”当我对用户用于创建S3存储桶的策略(访问密钥/密钥)有源ip约束时,我就遇到了这种情况。我的IP是准确的——但由于某种原因它无法工作,并给出了这个错误。经过长时间的搜索,我找到了一个有效的解决方案。问题是因为错误的
地区代码
下面是区域代码列表,设置适当的区域代码,您的问题将得到解决
Code Name
US East (Ohio) us-east-2
US East (N. Virginia) us-east-1
US West (N. California) us-west-1
US West (Oregon) us-west-2
Asia Pacific (Hong Kong) ap-east-1
Asia Pacific (Mumbai) ap-south-1
Asia Pacific (Osaka-Local) ap-northeast-3
Asia Pacific (Seoul) ap-northeast-2
Asia Pacific (Singapore) ap-southeast-1
Asia Pacific (Sydney) ap-southeast-2
Asia Pacific (Tokyo) ap-northeast-1
Canada (Central) ca-central-1
Europe (Frankfurt) eu-central-1
Europe (Ireland) eu-west-1
Europe (London) eu-west-2
Europe (Paris) eu-west-3
Europe (Stockholm) eu-north-1
Middle East (Bahrain) me-south-1
South America (São Paulo) sa-east-1
点击右下角的bucket name,您可以找到您的地区代码
有关模式详细信息,我在使用不同的AWS配置文件时遇到此问题。我在使用具有管理员权限的帐户时看到了错误,因此权限问题的可能性似乎不大
从用户的角度来看,AWS很容易发出与所需操作几乎没有关联的错误消息,这真是我的一大烦恼。在我的例子中,我选择了错误的RegionEndpoint。在选择了正确的RegionEndpoint之后,它开始工作:)我从来没有想到过,但它对我起了作用!在AWS SDK中,“美国标准”区域似乎是AWSRegionUSEast1。我们正在寻找如何设置区域的答案。谢谢如果您使用的是Ruby客户端,请在初始化客户端之前将ENV[“AWS_REGION”]
设置为bucket的正确值(例如“us-east-1”
),如果您需要使用多个bucket(例如dev/staging/production等),我在Java中也遇到了同样的问题。你的解决方案有帮助。他们在S3中使用奇怪的名称。区域的端点,存储库中对象名称的键…您能解释一下如何操作吗?将区域:“us-west-1”替换为什么?@AamirAfridi它取决于您使用的SDK。我使用的是iOS SDK,在凭证提供程序中,有一个参数,您可以在其中设置区域。我已经将其设置为我打算使用的区域。我刚刚有一个类似的例子,我优化了bucket的区域,但我建议更新域名。修复方法是用新域名替换以前的域名,如S3控制台中该bucket的端点引用所示。示例:我替换了https://s3.amazonaws.com/mybucket/myasset.jpg
与https://mybucket.s3-ap-southeast-2.amazonaws.com/myasset.