在几乎相同的服务器上,相同的代码在本地和生产中失败,但在我们的登台服务器上运行。当我们尝试与存储桶中的项目进行交互时,我们会得到Error retrieving credentials...
。
- Envoyer部署服务器,登台和生产服务器,并由Forge配置到AWS EC2实例。
- 两个实例都使用相同的存储桶策略命中同一个存储桶。
- .env设置对所有人都相同,减去服务器名称和调试
Aws\Exception\CredentialsException
Error retrieving credentials from the instance profile metadata server. (cURL error 28: Connection timed out after 1003 milliseconds (see http://curl.haxx.se/libcurl/c/libcurl-errors.html))
"laravel/framework": "5.4.*", // 5.4.25
"aws/aws-sdk-php-laravel": "~3.0", // 3.1.0
"guzzlehttp/guzzle": "~6.0", // 6.2.3
function getPhoto($personID)
{
$contents = '';
$id = $personID;
$cloudFront = env('AWS_CLOUDFRONT_PHOTO'); // d212rosgvhtylp.cloudfront.net
$fileKey = filePath($id) . '_t.jpg'; // 9ae299a1990e79d62f07c28bb60ecf6f_t.jpg
$fileURL = $cloudFront . '/' . filePath($id) . '_t.jpg'; // d212rosgvhtylp.cloudfront.net/9ae299a1990e79d62f07c28bb60ecf6f_t.jpg
// check if in remote storage then get contents
$contents = Storage::disk('s3photo')->get($fileKey); /* ****** FAILS HERE ****** */
// stream bioPhoto
header('Content-Type: image/jpeg');
echo $contents;
}
答案 0 :(得分:1)
确保.env文件包含AWS客户端的正确值后,请运行以下命令:
php artisan config:clear
这应该清除你的问题,如果它是由最初的env数据不正确或丢失引起的,不确定缓存是否自己更新但配置缓存似乎非常持久。
答案 1 :(得分:1)
我最近遇到了这个问题。就我而言,它在本地工作,而不是在 EC2 实例上。我不太了解。最后我意识到我在默认文件夹〜/ .aws / credentials中本地设置了 IAM ,所以在本地一切都很好。所以我在laravel源代码中戳了一下,我注意到laravel将在文件 services.php config文件夹中接受连接配置。
编辑config / services.php并输入AWS IAM密钥。
'mailgun' => [
'domain' => env('MAILGUN_DOMAIN'),
'secret' => env('MAILGUN_SECRET'),
],
'ses' => [
'key' => env('AWS_KEY'),
'secret' => env('AWS_SECRET'),
'region' => env('AWS_REGION'),
],
'sparkpost' => [
'secret' => env('SPARKPOST_SECRET'),
],
'stripe' => [
'model' => App\User::class,
'key' => env('STRIPE_KEY'),
'secret' => env('STRIPE_SECRET'),
],
所以我看到我的.env文件没有 AWS IAM 登录密钥,这些密钥是在config /services.php文件中调用的。
经过一次小小的调整后,一切都很顺利。
答案 2 :(得分:1)
我在.env文件中两次 中输入了AWS_ACCESS_KEY_ID之后,遇到了这个问题。
.env:
AWS_ACCESS_KEY_ID=MYREALID
AWS_SECRET_ACCESS_KEY=myrealkey
...
...a lot of variables..
...
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS SDK会尝试在其他地方搜索这些凭据,因为这会发生错误。
答案 3 :(得分:0)
如果您传递错误的ENV变量,请检查您的config/filesystems.php
:
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
请参阅:https://github.com/laravel/laravel/blob/master/config/filesystems.php#L60
并确保.env
中的键匹配。
可以肯定,他们在最近的几次更新中都更改了名称。