缺少必需的客户端配置选项:区域
Posted
技术标签:
【中文标题】缺少必需的客户端配置选项:区域【英文标题】:Missing required client configuration options: region 【发布时间】:2017-07-06 15:59:00 【问题描述】:我正在尝试使用以下代码检查 Amazon S3 上的存储桶是否存在:
$credentials = new Aws\Common\Credentials\Credentials($creds['access_key_id'], $creds['secret_access_key']);
$client = Aws\S3\S3Client::factory(array( 'credentials' => $credentials ) );
if( ! $client->doesBucketExist($creds['bucket']) )
throw new Exception("Bucket (" . $creds['bucket'] . ") does not exist.");
它在 localhost (wamp) 上工作,但是当我在服务器上尝试它时它不工作。我收到以下错误:
:(字符串)“s3”服务需要“区域”配置值(例如,“us-west-2”)。可以在http://docs.aws.amazon.com/general/latest/gr/rande.html 找到可用公共区域和端点的列表。版本:(字符串)需要“版本”配置值。指定版本约束可确保您的代码不会受到对服务的重大更改的影响。例如,在使用 Amazon S3 时,您可以将 API 版本锁定为“2006-03-01”。您的 SDK 版本具有以下版本的“s3”: *“2006-03-01”您可以为“版本”配置值提供“最新”,以利用您客户端 API 的最新可用 API 版本提供者可以找到。注意:不建议在生产应用程序中使用“最新”。可以在每个客户端的 API 文档页面上找到可用 API 版本的列表:http://docs.aws.amazon.com/aws-sdk-php/v3/api/index.html。如果您无法加载特定的 API 版本,那么您可能需要更新您的 SDK 副本。
我不知道为什么它不能在服务器上运行,但相同的代码在 localhost 上运行。
【问题讨论】:
您可能在本地主机上的 aws 配置文件(主目录中的 .aws 文件夹)中设置了默认区域,但在服务器上没有? 【参考方案1】:我遇到了同样的问题,我需要清除我的配置缓存来修复它。
$ artisan config:clear
【讨论】:
【参考方案2】:在创建 s3 客户端时明确设置区域,而不是依赖默认值。
use Aws\Credentials\Credentials;
use Aws\S3\S3Client;
$result = $stsClient->getSessionToken();
$credentials = new Credentials(
$result['Credentials']['AccessKeyId'],
$result['Credentials']['SecretAccessKey'],
$result['Credentials']['SessionToken']
);
$s3Client = new S3Client([
'version' => '2006-03-01',
'region' => 'us-west-2',
'credentials' => $credentials
]);
【讨论】:
为什么我需要提供Aws\Credentials\Credentials
而不是Aws\Common\Credentials\Credentials
取决于您使用的 aws-sdk-php 版本。 2.8 vs 3.0 Common 消失了。请参阅1 与 2【参考方案3】:
检查.env
文件变量是否与filesystems.php
匹配
's3' => [
'driver' => 's3',
'key' => env('S3_KEY'),
'secret' => env('S3_SECRET'),
'region' => env('S3_REGION'),
'bucket' => env('S3_BUCKET'),
],
【讨论】:
欢迎来到 Stack Overflow!感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation would greatly improve its long-term value 通过展示为什么这是一个很好的解决问题的方法,并将使其对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。【参考方案4】:1) 确保您在 .env
文件中配置了 S3_KEY, S3_SECRET, S3_REGION, S3_BUCKET
等
2) 生成自动加载/缓存后,您的环境文件可能已更改。运行:
php artisan config:cache
【讨论】:
以上是关于缺少必需的客户端配置选项:区域的主要内容,如果未能解决你的问题,请参考以下文章
类型错误:get() 缺少 1 个必需的位置参数:'index1'
window Azure 配置VPN成功后,安装客户端,提示,缺少文件,怎么回事