it-swarm.com.ru

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

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

Что я здесь не так делаю?

156
user3575214

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

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

248
Marcus Walser

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

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

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

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

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

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

15
Jay Q.

Для многих пакетов S3 API (у меня недавно была эта проблема пакет n3 s3 ), вы можете столкнуться с проблемами, когда предполагается, что регион соответствует стандарту США, и поиск по имени потребует от вас явного определения региона, если вы выберете принять ведро за пределами этого региона.

0
Duncan

Для 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
RamanSM

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

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

0
Sven Möhring

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

0
Shridhar Acharya

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

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

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

0
Peter Grainger

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

0
Rathan

У меня была такая же ошибка. Это произошло, когда клиент 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
Tushar