我试图用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 => '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,会出现以下错误:

指定的密钥不存在。

我哪里做错了?


当前回答

我也遇到过同样的问题。经过一番挣扎,我发现真正的问题出在网站上。amazonaws依赖性。添加依赖项后,此错误消失。

其他回答

我也犯了同样的错误。当s3客户端创建的端点与创建桶时设置的端点不同时,就会发生这种情况。

错误码-桶设置与东部地区。

s3Client = New AmazonS3Client(AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint.USWest2)

修复

s3Client = New AmazonS3Client(AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint.USEast1)

以上答案都不能解决我的问题。

上面的答案可能更可能是您的问题的原因,但我的问题是我使用了错误的桶名。这是一个有效的桶名,只是不是我的桶名。

我指向的桶是在不同的区域,我的lambda函数,所以检查你的桶名!

在创建S3Client期间,您可以指定到特定区域的端点映射。如果默认为s3.amazonaws.com,那么桶将在us-east-1创建,这是北弗吉尼亚。

AWS文档中关于S3端点和区域的更多详细信息:http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region。

因此,在创建S3Client并使用同一区域中的同一客户端访问S3资源时,始终要确保端点/区域。

如果桶是从AWS S3控制台创建的,则从控制台检查该桶的区域,然后使用上面链接中提到的端点详细信息在该区域中创建S3 Client。

我也遇到过同样的问题。经过一番挣扎,我发现真正的问题出在网站上。amazonaws依赖性。添加依赖项后,此错误消失。

对于仍然面临此问题的ppl,尝试按如下方式将s3_host添加到配置散列中

   :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}.

这为我解决了问题。