Подтвердить что ты не робот

AWS 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 => '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, появляется следующая ошибка:

Указанный ключ не существует.

Что я здесь делаю неправильно?

4b9b3361

Ответ 1

Кажется вероятным, что это ведро было создано в другом регионе, IE не us-west-2. Это единственный раз, когда я видел: "Ведро, к которому вы пытаетесь получить доступ, должно быть адресовано с использованием указанной конечной точки. Пожалуйста, отправьте все будущие запросы в эту конечную точку".

Стандарт США us-east-1

Ответ 3

Я столкнулся с аналогичной ошибкой, потому что ведро находилось в области us-west-2, а в шаблоне URL-адреса было значение bucketname. Однажды я изменил шаблон URL, чтобы иметь bucketname как субдомен URL, чтобы захватить файлы, и он сработал.

Например, предыдущий URL был

https://s3.amazonaws.com/bucketname/filePath/filename

Затем я заменил его как

https://bucketname.s3.amazonaws.com/filePath/filename

Ответ 4

Для многих пакетов API S3 (недавно я столкнулся с этой проблемой npm s3 package), вы можете столкнуться с проблемами, в которых предполагается, что регион US Standard и поиск по имени потребует, чтобы вы явно определяли регион, если вы решили разместить ведро вне этого региона.

Ответ 5

Во время создания S3Client вы можете указать отображение конечной точки в определенную область. Если значение по умолчанию s3.amazonaws.com, тогда ведро будет создано в us-east-1, которое является Северной Вирджинией.

Подробнее о конечных точках и областях S3 в документах AWS: http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region.

Итак, всегда проверяйте о конечной точке/области при создании S3Client и получите доступ к S3, используя тот же клиент в той же области.

Если ведро создано из AWS S3 Console, затем проверьте область из консоли для этого ковша, затем создайте клиент S3 в этом регионе, используя данные конечной точки, упомянутые в приведенной выше ссылке.

Ответ 6

Ни один из приведенных выше ответов не устранил мою проблему.

Приведенные выше ответы, вероятно, являются более вероятной причиной вашей проблемы, но моя проблема заключалась в том, что я использовал неправильное имя корзины. Это было правильное название ведра, просто оно не было моим.

Ведро, на которое я указывал, находилось в другом регионе, где моя лямбда-функция, поэтому проверьте ваше имя!

Ответ 7

Для 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}.

Это исправило проблему для меня.

Ответ 8

Я получил эту ошибку, когда попытался получить доступ к несуществующей корзине.

Я по ошибке переключил переменную пути с переменной имени сегмента, и поэтому имя блока имело значение пути файла. Так что, возможно, еще раз проверьте, правильно ли указано имя корзины, заданное вами по вашему запросу.

Ответ 9

У меня была такая же ошибка. Это произошло, когда клиент s3 был создан с другой конечной точкой, чем та, которая была установлена при создании корзины.

  • КОД ОШИБКИ - Ведро было настроено с EAST Region.

s3Client = Новый AmazonS3Client (AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint.USWest2)

  • FIX

s3Client = Новый AmazonS3Client (AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint. USEast1)

Ответ 10

Я столкнулся с той же проблемой. После большой борьбы я обнаружил, что настоящая проблема связана с зависимостями com.amazonaws. После добавления зависимостей эта ошибка исчезла.

Ответ 11

Я живу в Великобритании, продолжаю пытаться найти регион 'us-west-2'. Так что перенаправлено на "ЕС-запад-2". Правильный регион для S3 - 'eu-west-2'

Ответ 12

Это произошло для меня, когда у меня было ограничение исходного IP-адреса на политику, используемую пользователем (ключ доступа/секретный ключ) для создания корзины s3. Мой IP был точным - но по какой-то причине это не сработало и выдало эту ошибку.