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

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

ただいまの
回答率

87.61%

The PutObject operation requires non-empty parameter: Bucket

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 133

score 5

前提・実現したいこと

画像投稿サイトを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"

投稿用

public function store(PostRequest $request)
    {

        $image_file = "";
        $upload_image = $request->file('image_file');

        if ($upload_image) {
            //$path = $upload_image->store('uploads', 'public');
            $path = Storage::disk('s3')->put('/', $upload_image, 'public');
            if ($path) {
                //Image::make($upload_image->getRealPath())->resize(150, 150)->save();
                $image = Image::make($upload_image->getRealPath());
                $image->resize(150, 150);
                $image->path = Storage::disk('s3')->url($path);
                $image->save();
                $image_file = $path;
            }
        }


        $post  = new Post;
        $post->subject = $request->subject;
        $post->message = $request->message;
        $post->image_file = $image_file;
        $post->name = "";
        $post->user_id = Auth::id();
        $post->save();
        return redirect('/bbs')->with('poststatus', '新規投稿しました');
    }

config/filesystems.php

  'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],

        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],

        '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'),
        ],

    ],

それまで行っていた事

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

確認事項

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

参考記事

AWS環境構築参考記事

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • yu_1985

    2021/04/07 12:41

    > webサーバー(Private1,2)

    とのことですが、これらはプライベートサブネットの中にあるということですか?
    S3にアクセスできるような設定は何かしらしていますか?

    キャンセル

  • Miku89

    2021/04/07 14:12 編集

    プライベートサブネットから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 16:20

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

    キャンセル

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

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

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る