質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

0回答

1737閲覧

The PutObject operation requires non-empty parameter: Bucket

退会済みユーザー

退会済みユーザー

総合スコア0

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/04/06 11:15

編集2021/04/07 05:20

前提・実現したいこと

画像投稿サイトをAWSでデプロイをして、ユーザーが投稿フォームから画像の投稿する時、エラーが発生するようになりました。文字だけの投稿なら問題なくできます。

.envの設定を変更すれば、解決できると思っておりましたが、以下の対処法でも解決することができませんでした。

踏み台サーバーからSSH接続をして、2台のwebサーバー(Private1,2)に接続をして、

$cd /var/www/html/laravel-app $sudo vim .env  ----------------------------------------- AWS_ACCESS_KEY_ID=XXXXXXXXX AWS_SECRET_ACCESS_KEY=XXXXXXXXXXX AWS_DEFAULT_REGION=ap-northeast-1 AWS_BUCKET=AAAAAAA ----------------------------------------- $php artisan config:clear $php artisan cache:clear

発生している問題・エラーメッセージ

"The PutObject operation requires non-empty parameter: Bucket"

投稿用

php

1public function store(PostRequest $request) 2 { 3 4 $image_file = ""; 5 $upload_image = $request->file('image_file'); 6 7 if ($upload_image) { 8 //$path = $upload_image->store('uploads', 'public'); 9 $path = Storage::disk('s3')->put('/', $upload_image, 'public'); 10 if ($path) { 11 //Image::make($upload_image->getRealPath())->resize(150, 150)->save(); 12 $image = Image::make($upload_image->getRealPath()); 13 $image->resize(150, 150); 14 $image->path = Storage::disk('s3')->url($path); 15 $image->save(); 16 $image_file = $path; 17 } 18 } 19 20 21 $post = new Post; 22 $post->subject = $request->subject; 23 $post->message = $request->message; 24 $post->image_file = $image_file; 25 $post->name = ""; 26 $post->user_id = Auth::id(); 27 $post->save(); 28 return redirect('/bbs')->with('poststatus', '新規投稿しました'); 29 }

config/filesystems.php

php

1 'disks' => [ 2 3 'local' => [ 4 'driver' => 'local', 5 'root' => storage_path('app'), 6 ], 7 8 'public' => [ 9 'driver' => 'local', 10 'root' => storage_path('app/public'), 11 'url' => env('APP_URL').'/storage', 12 'visibility' => 'public', 13 ], 14 15 's3' => [ 16 'driver' => 's3', 17 'key' => env('AWS_ACCESS_KEY_ID'), 18 'secret' => env('AWS_SECRET_ACCESS_KEY'), 19 'region' => env('AWS_DEFAULT_REGION'), 20 'bucket' => env('AWS_BUCKET'), 21 #'url' => env('AWS_URL'), 22 #'endpoint' => env('AWS_ENDPOINT'), 23 ], 24 25 ],

それまで行っていた事

ACMを利用してHTTPS通信可能にする。このあたりを問題が起きる直前に動かしていたもの
webサーバがオートスケーリングする仕組みを構築しています。

確認事項

.envの設定変更
バゲット名は、S3より確認をして正しい名前の確認済みです。
AWS_BUCKET="XXXXXXXXX" ダブルクォーテーションで囲っても駄目でした。
// AWS_BUCKETの下に以下を追記
AWS_URL=https://s3-ap-northeast-1.amazonaws.com/AAAAAAAAAA/

参考記事

AWS環境構築参考記事

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2021/04/06 13:40

どこでどうやって環境年数に設定したその値を使っているかわからないので何も言えません。 普通に考えたらPutObjectをするときにBucket名が渡されていないのが原因と読み取れるので、どこでPutObjectしているのかソースを見直して、そこの処理を確認してみてください。 その上でわからなければ該当のソースも質問に追記してください。
退会済みユーザー

退会済みユーザー

2021/04/06 14:25

問題箇所だと思う、ソースコードを追記いたしました。 PutObjectを使用せずに、S3へアップロード処理して、今までこのようなエラーはローカル環境でも発生していませんでした。
yu_1985

2021/04/06 16:27

config/filesystems.phpでS3にアクセスするための情報を渡していませんか? そこではどう設定しているんでしょうか。 また、今回の問題と関係ありませんがEC2上で動かすならアクセスキーを使うのをやめてIAMロールを使用するようにしてください。 https://dev.classmethod.jp/articles/laravel-s3-try/
退会済みユーザー

退会済みユーザー

2021/04/07 02:32 編集

config/filesystems.phpの設定を追記しました。 さきほどローカル環境で確認したらローカルでも同じエラーが発生しています.. (T_T) (ローカル環境では問題なく画像の投稿が出来ていたので、AWSでデプロイをし、一昨日からこのエラーが発生しています。) ありがとうございます。今の問題が解決したらIAMロールへ変更したいと思います。
yu_1985

2021/04/07 03:02

読みづらいのでソースを貼るときはコードブロックを使って記載してください。 エラーの内容からすると、.envの内容をきちんと読み取れているかがちょっと怪しいですね。 WEBサーバ2台あるとのことですが、ALB配下にあるということですか? 両方のサーバでちゃんと設定を読み込み直していますか? ところで url' => env('AWS_URL'), の設定はなぜ行っているのでしょう? 基本的に特別なことをしてなければ設定は不要ですし、今はパス形式のリクエストは受け付けられない可能性があるので、設定をしないか、するなら仮想ホスト形式で設定してください。 https://dev.classmethod.jp/articles/s3-no-longer-support-path-style-requests/
退会済みユーザー

退会済みユーザー

2021/04/07 03:36 編集

ベタ貼り失礼いたしました。コードブロックに直しました。 はい、webサーバー2台はALBターゲットグループに登録してあります。 このエラーが発生してから、両方のサーバーの .envファイルに "AWS_URL=https://<バゲット名>.s3-ap-northeast-1.amazonaws.com" 追記しました。エラー解消にはなりませんでしたが、 (考えるとこれは設定しなくてもよさそうですね..) 参考URLありがとうございます。 たしか、参考にした記事にurl' => env('AWS_URL')が書いてあったと記憶しています。url' => env('AWS_URL'),コメントアウトにしておきます。
yu_1985

2021/04/07 03:40

ついでにいうと'endpoint' => env('AWS_ENDPOINT'),もとくに必須ではないと思います。
yu_1985

2021/04/07 03:41

> webサーバー(Private1,2) とのことですが、これらはプライベートサブネットの中にあるということですか? S3にアクセスできるような設定は何かしらしていますか?
退会済みユーザー

退会済みユーザー

2021/04/07 09:18 編集

プライベートサブネットからS3へアクセスできるようになる設定していません…  こちらを参考にエンドタイプを” Gateway”にして設定してみました。^^ ルートテーブ(private)へもエンドポイントのルーティングが追加されています。それから、 webサーバー(private)で、# AWS-CLIのs3コマンドは実行可能になりました。 $ aws s3 ls --region ap-northeast-1 --recursive s3://<バゲット名> https://dev.classmethod.jp/articles/vpc-endpoint-for-s3/ まだ、同じエラーが出ています。(;´д`)トホホ… ”'endpoint' => env('AWS_ENDPOINT'),”も削除します。
yu_1985

2021/04/08 07:20

エラーの内容が変わらないなら.envの内容がきちんと読み込めていない可能性が高いと思うのですが、環境変数が正しく設定されていることはどこかしらで確認できますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問