👝
BrefでS3を追加した時はtokenを持たせないといけない
問題
Brefでfilesystems.disksにデフォルトのs3
とは別でS3の設定を追加しても接続できない。
バージョンなど
composer.json
のコピペ(ふんわりでスマソ)
"bref/bref": "^2.1",
"bref/laravel-bridge": "^2.3",
"laravel/framework": "^11.0",
"league/flysystem-aws-s3-v3": "^3.0",
バケットの追加
config/filesystems.php
を以下のように編集した。
// デフォルトのs3。
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
'endpoint' => env('AWS_ENDPOINT'),
'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
'throw' => false,
],
// 追加したs3。
's3_another' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET_ANOTHER'),
'url' => env('AWS_URL'),
'endpoint' => env('AWS_ENDPOINT'),
'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
'throw' => false,
],
結論
追加したs3の設定にtoken
を追加する。
's3_another' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'token' => env('AWS_SESSION_TOKEN'), // これを追加する。
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET_ANOTHER'),
'url' => env('AWS_URL'),
'endpoint' => env('AWS_ENDPOINT'),
'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
'throw' => false,
],
ちょっとだけ深掘り
phpinfo();
で確認すると、実行時の環境変数にAWS_SESSION_TOKEN
がある。
/vendor/bref/laravel-bridge/src/BrefServiceProvider.php
を確認すると、デフォルトのs3
にはtokenとしてセットされていた。
/**
* Set up Bref integration.
*
* @return void
*/
public function register()
{
$this->mergeConfigFrom(__DIR__ . '/../config/bref.php', 'bref');
$this->shareRequestContext();
if (! isset($_SERVER['LAMBDA_TASK_ROOT'])) {
return;
}
$this->app->useStoragePath(StorageDirectories::Path);
$this->fixDefaultConfiguration();
Config::set('app.mix_url', Config::get('app.asset_url'));
Config::set('trustedproxy.proxies', ['0.0.0.0/0', '2000:0:0:0:0:0:0:0/3']);
Config::set('view.compiled', StorageDirectories::Path . '/framework/views');
Config::set('cache.stores.file.path', StorageDirectories::Path . '/framework/cache');
Config::set('cache.stores.dynamodb.token', env('AWS_SESSION_TOKEN'));
Config::set('filesystems.disks.s3.token', env('AWS_SESSION_TOKEN')); // ← ← ← ← ← ここ
Config::set('queue.connections.sqs.token', env('AWS_SESSION_TOKEN'));
Config::set('services.ses.token', env('AWS_SESSION_TOKEN'));
$this->app->when(QueueHandler::class)
->needs('$connection')
->giveConfig('queue.default');
}
なのでs3
には必要ないけど、追加した分には自分でセットしないといけない。(多分)
上下を見るとsqsとか他のにもセットしてくれてる。
Brefって親切なんですねー。
Discussion