AWS S3: Відро, до якого ви намагаєтеся отримати доступ, має бути адресовано за допомогою вказаної кінцевої точки


185

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

Вказаного ключа не існує.

Що я тут роблю неправильно?


6
Це сталося зі мною, коли я випадково вказав неправильну область для вказаного відра.
The Muffin Man

Це може бути через неправильну назву області AWS.
Dattatray

Відповіді:


311

Здається, це відро було створене в іншому регіоні, тобто не нам-захід-2. Це єдиний раз, коли я бачив "Відро, до якого ви намагаєтеся отримати доступ, потрібно адресувати за допомогою вказаної кінцевої точки. Будь ласка, надсилайте всі майбутні запити до цієї кінцевої точки."

Американський стандарт є us-east-1


30
Ніколи б не думав про це, але це працювало на мене! У AWS SDK регіон "Стандарт США" здається AWSRegionUSEast1.
Nerrolken

Шукав відповідь, як встановити регіон. Дякую!
Силар

6
Якщо ви використовуєте клієнт Ruby, встановіть ENV["AWS_REGION"]правильне значення (наприклад "us-east-1") для відра перед ініціалізацією клієнта
Abe Voelker

Що робити, якщо вам потрібно використовувати більше одного відра (наприклад, розробка / постановка / виробництво тощо)?
yekta

1
У мене була така ж проблема в Java. Ваше рішення допомогло. Вони використовують дивні імена в S3. Кінцева
точка

21

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


2
Чи можете ви пояснити, як? Замінити region: 'us-west-1',чим?
Аамір Африді

@AamirAfridi залежить від того, який SDK ви використовуєте. Я використовую iOS SDK, і в постачальника даних облікових даних є параметр, де можна встановити регіон. Я встановив це для регіону, який я маю намір використовувати.
Джей Q.

У мене просто був подібний приклад, де я оптимізував область відра, але я пропустив оновлення доменного імені. Виправлення полягало в заміні попереднього доменного імені на нове, як видно з посилання на кінцеву точку на консолі S3 для цього відра. Приклад: я замінив https://s3.amazonaws.com/mybucket/myasset.jpgз , https://mybucket.s3-ap-southeast-2.amazonaws.com/myasset.jpgщоб виправити цю помилку.
Фаб'єн Хаддаді

19

Я зіткнувся з подібною помилкою, оскільки відро було в регіоні, us-west-2а шаблон URL-адреси мав назву відра в шляху. Одного разу я змінив шаблон URL-адреси, щоб мати ім'я відра як піддомен URL для захоплення файлів, і воно спрацювало.

Наприклад, наприклад, попередня URL-адреса була

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

Потім я його замінив як

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

Введення повноцінного імені працювало для мене Напр. s3-ap-southeast-1.amazonaws.com/ng-spark/Java8.json для відра, що знаходиться в зоні наявності Сінгапуру
Nilesh Gule

1

Для багатьох пакетів API S3 (у мене нещодавно була проблема з пакетом npm s3 ), ви можете зіткнутися з проблемами, де регіон вважається стандартним для США, і для пошуку за назвою потрібно буде чітко визначити регіон, якщо ви вирішите розмістити відро за межами цього регіону.


1

Під час створення S3Client можна вказати відображення кінцевих точок у конкретному регіоні. Якщо за замовчуванням s3.amazonaws.comбуде створено відро, в us-east-1якому знаходиться Північна Вірджинія.

Детальніше про кінцеві точки S3 та регіони в документах AWS: http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region .

Отже, завжди переконайтеся у кінцевій точці / регіоні, створюючи S3Client та отримуйте доступ до SouC Resouces, використовуючи той самий клієнт у тому ж регіоні.

Якщо відро створено з консолі AWS S3, то перевірте область консолі для цього відра, а потім створіть клієнт S3 у цьому регіоні, використовуючи деталі кінцевої точки, зазначені у вищенаведеному посиланні.


1

Жодна з наведених відповідей не вирішила мого питання.

Наведені вище відповіді, ймовірно, є причиною вашої проблеми, але моя проблема полягала в тому, що я використовував неправильну назву відра. Це дійсне ім’я відра, це просто не моє відро.

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


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

Я отримав цю помилку, коли спробував отримати доступ до відра, яке не існувало.

Я помилково переключив змінну шляху зі змінною імені відра, і тому ім'я відра мало значення шляху файлу. Тож можливо повторно перевірте, чи ім’я відра, яке ви встановили у своєму запиті, правильне.


0

У мене була така ж помилка. Це сталося, коли клієнт s3 був створений з іншою кінцевою точкою, ніж та, яка була встановлена ​​під час створення відра.

  • КОД ПОМИЛКИ - Відро було створено з регіоном EAST.

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

  • Виправлення

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


0

Я стикався з тією ж проблемою. Після великої боротьби я виявив, що справжня проблема полягає в залежності від com.amazonaws. Після додавання залежності ця помилка зникла.


0

Я живу в Великобританії продовжував пробувати "us-west-2'region". Тож переспрямовано на "eu-west-2". Правильна область для S3 - "eu-west-2"


0

Це сталося для мене, коли у мене виникло обмеження джерела ip щодо політики, яку використовує користувач (ключ доступу / секретний ключ) для створення відра s3. Мій IP був точним - але він чомусь не працював, і дав цю помилку.


0

Після тривалого пошуку я знайшов робоче рішення. Питання було через неправильне region-code.

нижче перелік кодів регіонів, встановіть відповідний і ваша проблема буде вирішена.

Code                         Name
US East (Ohio)               us-east-2

US East (N. Virginia)       us-east-1

US West (N. California)     us-west-1

US West (Oregon)            us-west-2

Asia Pacific (Hong Kong)    ap-east-1

Asia Pacific (Mumbai)       ap-south-1

Asia Pacific (Osaka-Local)  ap-northeast-3

Asia Pacific (Seoul)        ap-northeast-2

Asia Pacific (Singapore)    ap-southeast-1

Asia Pacific (Sydney)       ap-southeast-2

Asia Pacific (Tokyo)        ap-northeast-1

Canada (Central)            ca-central-1

Europe (Frankfurt)          eu-central-1

Europe (Ireland)            eu-west-1

Europe (London)             eu-west-2

Europe (Paris)             eu-west-3

Europe (Stockholm)         eu-north-1

Middle East (Bahrain)      me-south-1

South America (São Paulo)   sa-east-1

Ви можете знайти свій код регіону, натиснувши правий кут назви відра.

введіть тут опис зображення

Щоб дізнатися більше про режим, натисніть


0

Я зіткнувся з цією проблемою під час використання іншого профілю AWS. Я побачив помилку, коли я використовував обліковий запис із правами адміністратора, тому можливість дозволів видалася малоймовірною.

Це дійсно домашня тварина, що AWS настільки схильна видавати повідомлення про помилки, які мають таку незначну кореляцію з необхідними діями, з точки зору користувача.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.