Last time I wrote a post about how to cache AWS credentials. This time I decided to show how it can be used in Laravel.
You can create an additional adapter in your Laravel application. This time I wanted to cache AWS credentials for the S3 storage service.
Let’s create new class
app/Providers/AwsS3CredentialsServiceProvider.php
Class content:
<?php
namespace App\Providers;
use Aws\Credentials\CredentialProvider;
use Aws\DoctrineCacheAdapter;
use Aws\S3\S3Client;
use Doctrine\Common\Cache\FilesystemCache;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\ServiceProvider;
use League\Flysystem\AwsS3v3\AwsS3Adapter;
use League\Flysystem\Filesystem;
class AwsS3CredentialsServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
Storage::extend('s3cached', function ($app, $config) {
$s3Config = $config;
$s3Config['version'] = 'latest';
if (! empty($config['key']) && ! empty($config['secret'])) {
$s3Config['credentials'] = Arr::only($config, ['key', 'secret', 'token']);
} else {
$cache = new DoctrineCacheAdapter(new FilesystemCache('/tmp/cache'));
$provider = CredentialProvider::defaultProvider();
$s3Config['credentials'] = CredentialProvider::cache($provider, $cache);
}
$root = $s3Config['root'] ?? null;
$options = $config['options'] ?? [];
$streamReads = $config['stream_reads'] ?? false;
return new Filesystem(new AwsS3Adapter(new S3Client($s3Config), $s3Config['bucket'], $root, $options, $streamReads), $config);
});
}
}
The last step we need to do is to autoload the newly created class. This can be done in the config/app.php config file in the provider’s section.
'providers' => [ App\Providers\AwsS3CredentialsServiceProvider::class,
...
]
Now let’s change or create a new config in filesystem.php. I used the same s3 config and changed the driver parameter from s3 to s3cached:
's3' => [
'driver' => 's3cached',
'key' => env('AWS_ACCESS_KEY_ID'),
...
],