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

时间:2017-07-06 15:59:01

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

我正在尝试使用以下代码检查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),但是当我在服务器上尝试此操作时它无法正常工作。我收到了以下错误:

  

缺少必需的客户端配置选项:region:(string)A" region" " s3"需要配置值。服务(例如," us-west-2")。可以在http://docs.aws.amazon.com/general/latest/gr/rande.html找到可用的公共区域和端点列表。 version:(string)A" version"配置值是必需的。指定版本约束可确保您的代码不会受到对服务的重大更改的影响。例如,使用Amazon S3时,您可以将API版本锁定为" 2006-03-01"。您的SDK版本具有以下版本的" s3":*" 2006-03-01"您可以提供最新的"到"版本"配置值,以利用客户端API提供商可以找到的最新API版本。注意:使用' latest'在生产应用程序中不建议使用。可以在每个客户的API文档页面上找到可用API版本的列表:http://docs.aws.amazon.com/aws-sdk-php/v3/api/index.html。如果您无法加载特定的API版本,则可能需要更新SDK的副本。

我不知道为什么它不能在服务器上运行,但是相同的代码正在使用localhost。

4 个答案:

答案 0 :(得分: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
]);

答案 1 :(得分:2)

我遇到了同样的问题,我需要清除配置缓存以修复它。

$ artisan config:clear

答案 2 :(得分:0)

Check .env file variables are matching with filesystems.php  
's3' => [
            'driver' => 's3',
            'key' => env('S3_KEY'),
            'secret' => env('S3_SECRET'),
            'region' => env('S3_REGION'),
            'bucket' => env('S3_BUCKET'),
        ],

答案 3 :(得分:0)

1)确保在.env文件中配置了php artisan config:cache

2)生成自动加载/缓存后,您的环境文件可能已更改。运行:

aws dynamodb scan \
    --table-name table \
    --filter-expression "#k = :id AND attribute_exists(question)" \
    --expression-attribute-names '{"#k": "userId"}' \
    --expression-attribute-values '{":id":{"S": "DETAILS"}}'