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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

2396閲覧

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

hirock17l

総合スコア12

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

1クリップ

投稿2019/04/08 15:42

前提・実現したいこと

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へファイルをアップロード・参照する

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

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

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

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

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

guest

回答2

0

ベストアンサー

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

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

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

投稿2019/04/08 20:13

mikkame

総合スコア5036

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

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

hirock17l

2019/04/09 08:06 編集

ありがとうございます! `php artisan cache:clear` で解決しました。 環境設定変更後は、 `php artisan serve` でサーバ再起動すればいいものと思い込んでいました。 調べたところ、他にもLaravel キャッシュクリアや最適化のコマンドがあるのですね。 大変勉強になりました。
guest

0

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

投稿2019/04/08 15:54

kawax

総合スコア10377

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

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

hirock17l

2019/04/08 16: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が怪しいと思っているのですが、うまくいきません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問