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

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

ただいまの
回答率

88.80%

LaravelでS3にファイルアップロード時に接続先ホストを解決できない

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 3,408

hirock17l

score 12

前提・実現したいこと

Cloud9上のLaravelでAWSのS3にファイルをアップロードしたいです。

LaravelでS3にファイルをアップロードしようとすると、
アップロード先のホストを解決できない旨のエラーメッセージが表示されます。

環境設定もひと通り見直したのですが、解決できません。
他に確認すべき項目はないでしょうか。
よろしくお願いします。

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

よく見るとURLに指定したフォルダ、ファイル名は記述されているものの、AWSやS3バケットの記述が見当たりません。
フォルダを指定しないとhttps://の後にファイル名が続きます。

Aws \ S3 \ Exception \ S3Exception
Error executing "PutObject" on "https://upload/n6Vm8CFwTk00DHs5Iq8dR2ON3BjyDt9M742zKZmS.jpeg"; AWS HTTP error: cURL error 6: Could not resolve host: upload (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

POSTデータの中身
エラー画面キャプチャ

該当のソースコード

アップロード処理

$this->validate($request, ['image' => 'required|image']);
$image = $request->file('image');
$path = Storage::disk('s3')->put('upload', $image, 'public');


Composer.json インストールしたパッケージ

"require": {
    "php": "^7.1.3",
    "aws/aws-sdk-php": "^3.91",
    "fideloper/proxy": "^4.0",
    "laravel/framework": "5.8.*",
    "laravel/tinker": "^1.0",
    "laravelcollective/html": "^5.6.0",
    "league/flysystem-aws-s3-v3": "^1.0"
},


filesystems.phpで関係ありそうな箇所

'cloud' => env('FILESYSTEM_CLOUD', 's3'),

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

],


IAMユーザに設定したインラインポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:*Object",
            "Resource": "*"
        }
    ]
}

試したこと

  • S3のACL設定を変更した。
    新規のパブリック ACL と、パブリックオブジェクトのアップロードをブロックする (推奨)
    Falseに変更
    パブリック ACL を通じて付与されたパブリックアクセスを削除する (推奨)
    Falseに変更
  • IAMユーザの設定を見直し
  • インスタンス再起動
  • 環境設定を一通り見直し

補足情報(FW/ツールのバージョンなど)

Laravel 5.8.10
filesystems.phpでS3のURLを環境変数から参照する記述もあるようで、
ここに適切なURLを設定すればいいのでしょうか。
試しにs3-ap-northeast-1.amazonaws.com/[bucket名]/を記述してみましたが、
同様のエラーが発生しました。

参考にした記事  
LaravelでS3へファイルをアップロード・参照する

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+2

AWS_URLは書かなくても大丈夫だった気がします。
おそらく互換用の設定でしょう。

また、S3の場合はリージョン関係ないはずなので仮に設定するとしても
一律s3.amazonaws.comになると思います。

追加で、configをキャッシュしているかもしれないので
php artisan cache:clear
でクリアしてみてください

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/09 16:30 編集

    ありがとうございます!
    `php artisan cache:clear` で解決しました。
    環境設定変更後は、 `php artisan serve` でサーバ再起動すればいいものと思い込んでいました。

    調べたところ、他にもLaravel キャッシュクリアや最適化のコマンドがあるのですね。
    大変勉強になりました。

    キャンセル

0

一番重要な.envの情報がない。
.envにAWS_ACCESS_KEY_ID等を書く。
接続の設定が正しくされてなければ当然失敗する。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/09 01:17

    早速の回答ありがとうございます。

    .envには下記項目を設定済みです。
    記述内容は書けませんが、ユーザ作成時に生成したKeyと相違ないかは何度も確認しました。

    AWS_ACCESS_KEY_ID=
    AWS_SECRET_ACCESS_KEY=
    AWS_DEFAULT_REGION=ap-northeast-1
    AWS_BUCKET=
    AWS_URL=s3-ap-northeast-1.amazonaws.com/[bucket名]/

    エラーの内容からしてURLが怪しいと思っているのですが、うまくいきません。

    キャンセル

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

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

関連した質問

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