【问题标题】:Uploading to AWS s3 bucket in Laravel 5.8 gives me "Error retrieving credentials from the instance profile metadata server"在 Laravel 5.8 中上传到 AWS s3 存储桶时出现“从实例配置文件元数据服务器检索凭证时出错”
【发布时间】:2019-05-09 01:47:51
【问题描述】:

我有一个 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",。使用 tinker 时出现同样的错误。谢谢。

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;
}
...

【问题讨论】:

    标签: php laravel amazon-web-services amazon-s3


    【解决方案1】:

    您应该检查它实际使用的 AWS PHP 开发工具包的版本,就好像它低于版本 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 复制到 Web 服务器主目录作为测试,以查看是否是 www 用户无法读取文件的权限问题。不过,作为永久解决方案并不是一个好主意,您最好考虑使用参数存储来存储值并以这种方式访问​​它们。您需要更新角色的权限以允许对此进行访问,但这是一种更安全的配置方式。

    【讨论】:

    • 我使用的是 3.0.在没有凭据的情况下更新了密钥和密钥,但仍然出现相同的错误。
    • 我只是在答案中添加了一些进一步的建议来测试/尝试
    • 谢谢。我试试看。
    • 如果您正在尝试参数存储方法medium.com/@khandelwal12nidhi/…,这篇文章应该可以让您抢先一步
    猜你喜欢
    • 2017-11-25
    • 2018-04-18
    • 2019-05-06
    • 1970-01-01
    • 2021-12-27
    • 2019-05-25
    • 2021-06-02
    • 1970-01-01
    • 2016-02-01
    相关资源
    最近更新 更多