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
, появляется следующая ошибка:
Указанный ключ не существует.
Что я здесь делаю неправильно?
Ответы
Ответ 1
Кажется вероятным, что это ведро было создано в другом регионе, IE не us-west-2. Это единственный раз, когда я видел: "Ведро, к которому вы пытаетесь получить доступ, должно быть адресовано с использованием указанной конечной точки. Пожалуйста, отправьте все будущие запросы в эту конечную точку".
Стандарт США us-east-1
Ответ 2
Проверьте местоположение вашего контейнера в консоли, затем используйте его в качестве ссылки на конечную точку для использования:
http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region
Ответ 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)
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 был точным - но по какой-то причине это не сработало и выдало эту ошибку.