我正在尝试使用以下代码检查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。
答案 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"}}'