質問: ### 前提・実現したいこと PHP/Laravel5.6を利用しています。 1つWebサーバから あるシステムでAWS契約(A)のS3バケットと 別のシステムでAWS契約(B)のS3バケットとの両方を参照したいです。 /config/filesystems.phpには、(A)のIAMユーザのアクセスキーなどを設定しており、 (A)のS3バケットポリシー設定でこのIAMユーザにてアクセスできます。 (B)からは別のIAMユーザを払い出されており、それによって(B)のS3バケット へアクセスするという要件があります。 AWS S3ストレージでfilesystems.phpにアクセスキーなど指定するところで 動的に異なるIAMユーザのアクセスキーに変更して操作したいと思ってます。 ### 発生している問題・エラーメッセージ filesystems.phpに設定した、envから取得する値1つしか動作できません。 filesystems.phpの中の配列を分岐するにもフレームワーク上で管理されているようなので どのタイミングで、どのパラメータを使って切りかえたよいものか、 また、それができるのかどうかがわかりません。 ### 該当のソースコード `/config/filesystems.php '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'),` ### 試したこと AWS S3ストレージでfilesystems.phpにアクセスキーなど指定すると S3に対してアップロード、ダウンロードできることは確認できています。 .envファイルのS3アクセスキー2回修正して、 それぞれのIAMユーザでの動作S3バケットポリシーで アクセスできる、できないなど異なる動作がされていることは確認しました。 ### 補足情報(FW/ツールのバージョンなど) (A)のIAMユーザで(B)のS3バケットが見れるように (B)側に設定してもらうしかないでしょうか?
回答: Laravelのファイルストレージは同じドライバに対して複数のディスクを持てるので、(B)の方の設定を`config/filesystem.php`に対して適当な名前で追加してやればいけると思います。(必要な環境変数も.envに追加してください) ``` 's3_b' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID_B'), 'secret' => env('AWS_SECRET_ACCESS_KEY_B'), 'region' => env('AWS_DEFAULT_REGION_B'), 'bucket' => env('AWS_BUCKET_B'), 'url' => env('AWS_URL_B'), ... ``` あとは使用するときに`disk()`メソッドでディスク名を指定してください。 ``` $contents = Storage::disk('s3_b')->get('file.jpg'); ```