Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Missing required client configuration options: region

I am trying to check bucket existence on Amazon S3 using below code:

$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.");
}

It is working on localhost (wamp) but when I tried this on server it is not working. I am getting following error:

Missing required client configuration options: region: (string) A "region" configuration value is required for the "s3" service (e.g., "us-west-2"). A list of available public regions and endpoints can be found at http://docs.aws.amazon.com/general/latest/gr/rande.html. version: (string) A "version" configuration value is required. Specifying a version constraint ensures that your code will not be affected by a breaking change made to the service. For example, when using Amazon S3, you can lock your API version to "2006-03-01". Your build of the SDK has the following version(s) of "s3": * "2006-03-01" You may provide "latest" to the "version" configuration value to utilize the most recent available API version that your client's API provider can find. Note: Using 'latest' in a production application is not recommended. A list of available API versions can be found on each client's API documentation page: http://docs.aws.amazon.com/aws-sdk-php/v3/api/index.html. If you are unable to load a specific API version, then you may need to update your copy of the SDK.

I don't know why it is not working on server but same code is working on localhost.

like image 331
EmptyData Avatar asked Jul 06 '17 15:07

EmptyData


2 Answers

I had the same problem and I needed to clear my config cache to fix it.

$ artisan config:clear
like image 143
Yevgeniy Afanasyev Avatar answered Nov 05 '22 16:11

Yevgeniy Afanasyev


Set region explicitly when creating s3 client instead of relying on defaults.

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
]);
like image 3
RaGe Avatar answered Nov 05 '22 17:11

RaGe