👻

Laravel9でS3を使うときAWS_URLとAWS _ENDPOINTはいらない

2022/07/02に公開

8->9になったことでStorageファサードを使うときにファサードが利用するアダプターが右記に変わった。league/flysystem-aws-s3-v3 "^3.0"これに伴いこれまでのfilesystem.php.envの設定も変わったみたい。

8の場合の設定

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'),
        ],
.env
AWS_ACCESS_KEY_ID=XXXXX
AWS_SECRET_ACCESS_KEY=XXXXXXXXX
AWS_DEFAULT_REGION=ap-northeast-1
AWS_BUCKET=XXXXXX
AWS_URL=https://XXXXXXXXX

上記の設定で問題なく動く。

9の場合

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'),
            'endpoint' => env('AWS_ENDPOINT'),
            'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
            'throw' => true, // default false
        ],
.env
AWS_USE_PATH_STYLE_ENDPOINT=false
AWS_ACCESS_KEY_ID=XXXXX
AWS_SECRET_ACCESS_KEY=XXXX
AWS_DEFAULT_REGION=ap-northeast-1
AWS_BUCKET=XXXXXXX

アダプターがurlを生成してくれるのでAWS_URLAWS_ENDPOINTを環境変数として持たなくて良くなったってことみたい。

ちなみに原理の部分はまだ確認できていないが、AWS_URLが設定されていると、ssl周りのエラーが出てStorageファサード経由でS3を操作できなくなった。

Aws\S3\Exception\S3Exception with message 'Error executing "ListObjectsV2" on "https://aws-bucket"; AWS HTTP error: cURL error 60: SSL: no alternative certificate subject name matches target host name 'aws-bucket-name' (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for aws-bucket-url

ファサード経由ではなくS3clientとかアダプターを自分で組み立てて、http通信の時にcacert.pem使うように設定するとアクセス、操作自体はできたので、中途半端にfilesystems.phpで設定するとアダプターがそちらの設定を優先して作る形になってしまっているのかも知れないと思った、が普通にStorage使えるようになったので掘るのはまた今度にする。

Discussion