Posted at

PHPでFlysystemのAwsS3AdapterをS3互換サービスで使うときにハマったこと

More than 1 year has passed since last update.


ハマった時の状況


  • Laravelを使ってる

  • 環境はDockerで構築

  • S3互換サービスはDocker上のminio


結論

use_path_style_endpointをtrueにするとサブドメインを使わずにバケットを指定することができる


タイムライン


  • LaravelからS3にアップロードしたい

  • S3だけローカルから外すのはびみょい

  • テスト環境としてminioを選択

  • minioをdocker-composeに追加してみる

  • 一通りの設定をして、接続してみる

  • バケット名がサブドメインになるので、docker-composeでの名前解決に失敗する

  • 取り急ぎhostsに名前書いて名前解決できるようにする

  • 依然としてエラー そのようなバケットはありませんと言われる

  • minioのブラウザ側でバケットを作成

  • それでもエラー・・・ よく見るとエラー対象のバケット名が入っていない

  • ひょっとして、サブドメインでバケット名拾えない?

  • ネットの海を彷徨う

  • force_path_styleという設定をrubyのコードないで見つける

  • ダメ元で設定を追加してみる、ダメっぽい

  • AwsS3Adapterのオプションにuse_path_style_endpointというのを見つける

  • 上記オプションをオンにすることで接続が成功