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

指定的密钥不存在。

我哪里做错了?


当前回答

当我试图访问一个不存在的桶时,我得到了这个错误。

我错误地将路径变量与桶名变量交换,因此桶名具有文件路径值。所以可能需要仔细检查,你在请求上设置的桶名是否正确。

其他回答

我在c#.net上得到了这个异常,它在更改客户端创建的RegionEndpoint值后得到了修复,如下所示

var client = new AmazonS3Client(accesKey,secretKey, RegionEndpoint.APSoutheast2)

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

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

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

修复

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

在我的例子中,我选择了错误的RegionEndpoint。选择正确的RegionEndpoint后,它开始工作:)

似乎这个桶是在一个不同的地区创建的,IE而不是us-west-2。这是我唯一一次看到“您试图访问的桶必须使用指定的端点进行寻址。请将所有未来的请求发送到此端点。”

美国标准是US -east-1

当我对用户(访问密钥/秘密密钥)用于创建s3桶的策略有一个源ip约束时,就发生了这种情况。我的IP是准确的——但出于某种原因,它不能工作,并给出了这个错误。