In your laravel home project directory Issue artisan command.
php artisan make:provider MyDynamoDBServiceProvider
The command will generate file in app/Provider/MyDynamoDBServiceProvider.php
1. Add libraries below, just put just after use Illuminate\Support\ServiceProvider;
use Aws\DynamoDb\DynamoDbClient;
use Aws\DynamoDb\Session\SessionHandler;
use Aws\Credentials\Credentials;
use Session;
use Log;
2. Put code below in you register method.
Log:info(__METHOD__);
Session::extend('dynamodb', function ($app) {
// Get a shortcut to config data
$cfg = $app['config']->get('session');
// Do the real work of hooking up Dynamo as session handler
$credential = new Credentials('YOUR_ACCESS_KEY', 'YOUR_SECRET_KEY');
$dynamoDb = DynamoDbClient::factory([
'region' => 'ap-northeast-1',
'version' => '2012-08-10',
'credentials' => $credential,
]);
$sessionHandler = $dynamoDb->registerSessionHandler([
'table_name' => $cfg['table'],
'hash_key' => 'key',
'session_lifetime' => 60 * $cfg['lifetime'], // minutes to seconds
'consistent_read' => true,
'locking_strategy' => null,
'automatic_gc' => true,
'gc_batch_size' => 25,
'max_lock_wait_time' => 10,
'min_lock_retry_microtime' => 10000,
'max_lock_retry_microtime' => 50000
]);
// Set the start of the session id to the cookie name - optional
$sessionHandler->open('', $cfg['cookie']);
return $sessionHandler;
});
3. Full Code will look like this.
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Aws\DynamoDb\DynamoDbClient;
use Aws\DynamoDb\Session\SessionHandler;
use Aws\Credentials\Credentials;
use Session;
use Log;
class MyDynamoDBServiceProvider extends ServiceProvider{
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
Log:info(__METHOD__);
Session::extend('dynamodb', function ($app) {
// Get a shortcut to config data
$cfg = $app['config']->get('session');
// Do the real work of hooking up Dynamo as session handler
$credential = new Credentials('YOUR_ACCESS_KEY', 'YOUR_SECRET_KEY');
$dynamoDb = DynamoDbClient::factory([
'region' => 'ap-northeast-1',
'version' => '2012-08-10',
'credentials' => $credential,
]);
$sessionHandler = $dynamoDb->registerSessionHandler([
'table_name' => $cfg['table'],
'hash_key' => 'key',
'session_lifetime' => 60 * $cfg['lifetime'],
'consistent_read' => true,
'locking_strategy' => null,
'automatic_gc' => true,
'gc_batch_size' => 25,
'max_lock_wait_time' => 10,
'min_lock_retry_microtime' => 10000,
'max_lock_retry_microtime' => 50000
]);
// Set the start of the session id to the cookie name - optional
$sessionHandler->open('', $cfg['cookie']);
return $sessionHandler;
});
}
}4. Add it in you app provider config. Edit config/app.php and find providers section.
'providers' => [
.... some other provider list here
App\Providers\MyDynamoDBServiceProvider::class
];
NOTE: Please don't Use DynamoDBServiceProvider or DynamoServiceProvider name if you dont like some have ache.
Happy Reading
Reference:
To get more idea about AWS credentialService Providers
Adding Custom Session Drivers