AWS S3: адрес, к которому вы пытаетесь получить доступ, должен быть адресован с использованием указанной конечной точки

143

Я пытаюсь удалить загруженные файлы изображений с помощью 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, появляется следующая ошибка:

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

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

  • 3
    Это случилось со мной, когда я случайно указал неправильный регион для указанного сегмента.
  • 0
    Это может быть из-за неправильного имени региона AWS.
Теги:
amazon-web-services

9 ответов

259
Лучший ответ

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

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

  • 27
    Никогда бы не подумал об этом, но у меня это сработало! В AWS SDK регионом «Стандарт США» является AWSRegionUSEast1.
  • 0
    Искал ответ как установить регион. Спасибо!
Показать ещё 4 комментария
15

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

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

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

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

https://bucketname.s3.amazonaws.com/filePath/filename
  • 0
    Ввод полностью квалифицированного имени работал для меня, например. s3-ap-southeast-1.amazonaws.com/ng-spark/Java8.json для корзины, которая находится в зоне доступности Сингапура
15

Проверьте местоположение вашего контейнера в консоли, затем используйте его в качестве ссылки на конечную точку для использования: http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

  • 2
    Можете ли вы объяснить, как? Заменить region: 'us-west-1', чем?
  • 0
    @AamirAfridi это зависит от того, какой SDK вы используете. Я использую iOS SDK, и в провайдере учетных данных есть параметр, в котором вы можете указать регион. Я установил это в регионе, который я намерен использовать.
0

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

0

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

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

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

  • FIX

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

0

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

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

0

Во время создания 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 в этом регионе, используя данные конечной точки, упомянутые в приведенной выше ссылке.

0

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

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

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню