1 Вопрос: Загрузка в AWS s3 bucket в Laravel 5.8 дает мне сообщение «Ошибка при получении учетных данных с сервера метаданных профиля экземпляра»

вопрос создан в Wed, May 8, 2019 12:00 AM

У меня есть приложение Laravel 5.8, которое я пытаюсь настроить, чтобы мои загрузки загружались в корзину Amazon s3, но каждый раз, когда я пытаюсь сохранить сообщение с прикрепленным изображением, я получаю сообщение об ошибке Error retrieving credentials from the instance profile metadata server. (cURL error 28: (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)). Существует много сообщения в Интернете об этом, но никто не смог помочь мне решить мою проблему. Я использую Valet в своей локальной среде, если это поможет. У меня также есть "league/flysystem-aws-s3-v3": "^1.0",, установленный в моих зависимостях. Я получаю ту же ошибку при использовании тинкера. Спасибо.

filesystems.php

...
's3' => [
    'driver' => 's3',
    'version' => 'latest',
    'credentials' => array(
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
    ),
    'region' => env('AWS_DEFAULT_REGION'),
    'bucket' => env('AWS_BUCKET'),
],
...

.env

...
    AWS_ACCESS_KEY_ID=ASTRINGOFNUMBERSANDLETTERS
    AWS_SECRET_ACCESS_KEY=anotherstrngofnumbersandletters
    AWS_DEFAULT_REGION=us-west-1
    AWS_BUCKET=bucket-name
...

PostController.php

...
if ($request->has('photo')) {
    // Get image file
    $image = $request->file('photo');
    // Make a image name based on user name and current timestamp
    $name = Str::slug($request->input('user_id')).time();
    // Define folder path
    $folder = '/uploads/posts/' . $user_id . '/';
    // Make a file path where image will be stored [ folder path + file name + file extension]
    $filePath = $folder . $name. '.' . $image->getClientOriginalExtension();
    // Upload image
    $this->uploadOne($image, $folder, 's3', $name);
    // Set user profile image path in database to filePath
    $post->photo = $filePath;
}
...
    
0
1 ответ                              1                         

Вы должны проверить, какая версия AWS PHP SDK фактически используется, как если бы она была меньше, чем версия 3. Я считаю (не знаю точно, какая версия это изменила, извините), тогда массив учетных данных не требуется, и вы просто передаете ключ и секретировать непосредственно в соответствии с областью и значениями корзины.

например, вот так:

...
's3' => [
    'driver' => 's3',
    'version' => 'latest',
    'key' => env('AWS_ACCESS_KEY_ID'),
    'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'region' => env('AWS_DEFAULT_REGION'),
    'bucket' => env('AWS_BUCKET'),
],
...

Вам также следует посмотреть, как копировать .aws /credentials в домашний каталог веб-сервера, чтобы проверить, не является ли это проблемой с правами доступа пользователя www, у которого возникают проблемы с чтением файла. Хотя это не очень хорошая идея как постоянное решение, и вам лучше всего использовать хранилище параметров для хранения значений и доступа к ним таким образом. Вам нужно обновить разрешения роли, чтобы разрешить доступ к ней, но это гораздо более безопасный способ настройки.

    
0
2019-05-08 17: 47: 51Z
  1. Я использую 3.0. Обновлены ключ и секрет без учетных данных, но все равно появляется та же ошибка.
    2019-05-08 17: 45: 50Z
  2. Я просто добавил несколько дополнительных предложений к ответу на test /try
    2019-05-08 17: 48: 52Z
  3. Спасибо. Я попробую.
    2019-05-08 17: 50: 29Z
  4. эта статья должна дать вам преимущество, если вы пытаетесь использовать метод хранилища параметров medium.com/@khandelwal12nidhi/…
    2019-05-08 17: 52: 28Z
источник размещен Вот