缺少必需的客户端配置选项:区域

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'

ZooKeeper序列之ZooKeeper配置

window Azure 配置VPN成功后,安装客户端,提示,缺少文件,怎么回事

错误:invalid_request 缺少必需参数:golang 中的 client_id

AWSCognito 配置错误中缺少区域

配置错误:Config 中缺少区域 (AWS)