Я пытаюсь удалить загруженные файлы изображений с помощью 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
, появляется следующая ошибка:
Указанный ключ не существует.
Что я здесь делаю неправильно?
Кажется вероятным, что это ведро было создано в другом регионе, IE не us-west-2. Это единственный раз, когда я видел: "Ведро, к которому вы пытаетесь получить доступ, должно быть адресовано с использованием указанной конечной точки. Пожалуйста, отправьте все будущие запросы в эту конечную точку".
Стандарт США
us-east-1
Я столкнулся с аналогичной ошибкой, потому что ведро находилось в области us-west-2
, а в шаблоне URL-адреса было значение bucketname. Однажды я изменил шаблон URL, чтобы иметь bucketname как субдомен URL, чтобы захватить файлы, и он сработал.
Например, предыдущий URL был
https://s3.amazonaws.com/bucketname/filePath/filename
Затем я заменил его как
https://bucketname.s3.amazonaws.com/filePath/filename
Проверьте местоположение вашего контейнера в консоли, затем используйте его в качестве ссылки на конечную точку для использования: http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region
region: 'us-west-1',
чем?
Я столкнулся с той же проблемой. После большой борьбы я обнаружил, что настоящая проблема связана с зависимостями com.amazonaws. После добавления зависимостей эта ошибка исчезла.
У меня была такая же ошибка. Это произошло, когда клиент s3 был создан с другой конечной точкой, чем та, которая была установлена при создании корзины.
s3Client = Новый AmazonS3Client (AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint.USWest2)
s3Client = Новый AmazonS3Client (AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint. USEast1)
Я получил эту ошибку, когда попытался получить доступ к несуществующей корзине.
Я по ошибке переключил переменную пути с переменной имени сегмента, и поэтому имя блока имело значение пути файла. Так что, возможно, еще раз проверьте, правильно ли указано имя корзины, заданное вами по вашему запросу.
Во время создания 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 в этом регионе, используя данные конечной точки, упомянутые в приведенной выше ссылке.
Для 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}.
Это исправило проблему для меня.
Для многих пакетов API S3 (недавно я столкнулся с этой проблемой npm s3 package), вы можете столкнуться с проблемами, в которых предполагается, что регион US Standard и поиск по имени потребует, чтобы вы явно определяли регион, если вы решили разместить ведро вне этого региона.