Laravel 6.0 でAWS S3サービスでの画像格納コーディング手順

オブジェクト指向
https://youtu.be/_I14_sXHO8U

前提

  • Laravel version 6.0 のプロジェクトは作成済み
  • AWSアカウントは作成済み

S3用のIAMを作成

まずはAWSのコンソールの右上から、自分のアカウントをクリックしアコーディオンを開き、「My Security Credentisals」をクリック

スクリーンショット 2018-09-02 11.16.16.png

遷移したら、左側のメニューから「Users」をクリック

スクリーンショット 2018-09-02 11.17.21.png

遷移したら、「Add User」をクリック

スクリーンショット 2018-09-02 11.17.35.png

遷移したら、「User name」に適当な名前を入力し、「Select AWS access type」は「Programmatic access」を選択し、「Next: Permissions」をクリック

スクリーンショット 2018-09-02 11.28.46.png

遷移したら、「Attach existing policies directly」をクリック

スクリーンショット 2018-09-02 11.29.40.png

検索画面が表示されるので、S3を検索し、「AmazonS3FullAccess」にチェックを入れ、「Next: Review」をクリック

スクリーンショット 2018-09-02 11.30.39.png

確認画面が表示されるので、「Create User」をクリック

スクリーンショット 2018-09-02 11.30.56.png

最後に、Access key IDとSecret access keyが表示されるので、必ずメモすること!

メモしたら「Close」をクリックして、S3のアカウント作成は完了です

スクリーンショット 2018-09-02 11.31.26.png

Bucketの作成

アカウントを作成したら、次はS3でBucketを作成します

S3の画面から、「Create bucket」をクリック

スクリーンショット 2018-09-02 11.59.52.png

モーダルが表示されるので、「Bucket name」に適当な名前を入力し、Regionは「Asia Pacific(Tokyo)」を選択し、「Next」をクリック

スクリーンショット 2018-09-02 12.05.46.png

遷移後、オプションを設定するモーダルが表示されます

設定系は要件によりけりですが、もちろん全てオフでも大丈夫です

簡単に各オプションの説明を書いておきます

「Versioning」は保存するファイルを上書きする際に以前のファイルを保持しておくオプションで、誤って上書きして以前のファイルを削除してしまった時に便利なオプションです

「Server access logging」はbucket内の操作に対してログを取ってくれるオプションです

「Tags」はbucketに任意のタグを割り当てることができ、コスト配分レポートなどで利用できるオプションです

「Object-level logging」はオブジェクト毎の操作に対してログを取ってくれるオプションです(Server access loggingとイマイチ違いはわからなかった)

「Default encryption」はデフォルトでアップロードするファイルを暗号化するオプションです

「CloudWatch request metrics」はほぼリアルタイムなメトリクスオプションです

スクリーンショット 2018-09-02 12.25.35.png

遷移後、bucketに対してAWSアカウントを紐づけする画面になります

デフォルトで自分のアカウントが入っています

特に他のアカウントを紐づけする必要がなければ、「Next」をクリック

スクリーンショット 2018-09-02 12.28.16.png

遷移後、プレビューが表示され問題なければ「Create bucket」をクリックし完了

スクリーンショット 2018-09-02 12.30.17.png

※パケットの公開も必要です。

参考サイトです。

Amazon S3の公開設定を色々とためしてみた - Qiita
AmazonS3の公開設定を色々とためしてみました事前準備AmazonS3のバケット作成とファイル登録AmazonS3#001-バケット作成AmazonS3#002-フ…

 

LaravelでのS3パッケージ格納利用

パッケージのインストール

Larave公式が言っている、s3用のパッケージをインストールする

 composer require league/flysystem-aws-s3-v3:"^1.0"

S3の環境情報を登録

.envファイルに下記情報を追記する

AWS_ACCESS_KEY_ID= 上記手順でユーザーを作成した際に表示されたAccess key ID
AWS_SECRET_ACCESS_KEY= 上記手順でユーザーを作成した際に表示されたSecret access key
AWS_DEFAULT_REGION=ap-northeast-1 (東京リージョンで作成したため)
AWS_BUCKET= 上記手順で作成したbucket名

アップロード

HTMLの作成

<form action="/upload" method="post" enctype="multipart/form-data">
  {{ csrf_field() }}
  <input type="file" name="file">
  <button type="submit">保存</button>
</form>

画像格納用Controllerの作成

public function upload(Request $request)
{
    $file = $request->file('file');
    // 第一引数はディレクトリの指定
    // 第二引数はファイル
    // 第三引数はpublickを指定することで、URLによるアクセスが可能となる
    $path = Storage::disk('s3')->putFile('/', $file, 'public');
    // hogeディレクトリにアップロード
    // $path = Storage::disk('s3')->putFile('/hoge', $file, 'public');
    // ファイル名を指定する場合はputFileAsを利用する
    // $path = Storage::disk('s3')->putFileAs('/', $file, 'hoge.jpg', 'public');
    return redirect('/');
}

結果

スクリーンショット 2018-09-02 18.02.44.png

画像表示用Controllerの作成

 

public function disp()
{
    $path = Storage::disk('s3')->url('hoge.jpg');
    return view('disp', compact('path'));
}

HTMLの作成

<img src="{{$path}}">

最後に参考サイトです

laravel6でS3に画像アップロード&削除 - Qiita
#S3に画像をアップロードする方法LaravelでAWSS3へ画像をアップロードするこちらの記事を参考にして無事S3に画像を保存できました#S3の画像の削除※先程の記事の一部を引用し、削除…
Laravel ローカルアプリからAWS S3に画像をアップロードする - Qiita
ode#目次Macのローカルで作成したLaravelアプリから画像ファイルをS3にアップロードする方法をまとめる実施環境ハードウェア環境ソフトウェア環境前提条件MacのローカルでLar…
Laravelで動画のストリーミング再生を実装する【Safariでも再生可能】
開発環境が整っている前提で進めていきます。仕様は次のとおりです。仕様S3上にある非公開の動画を使用指定のコントローラーにアクセスしたらS3から動画を表示するヘルパーを作成するヘルパーは、こちらのライブラリをベースに、少し手を加えます
【初心者必見】Amazon S3のアクセス制御|伊藤忠テクノソリューションズ
AmazonS3はデータの保管に非常に便利なサービスです。しかしながら、S3内部のオブジェクトに関しては同じアカウント内のIAMユーザは勿論、他のAWSアカウントのユーザ、さらにはオブジェクトを公開した場合、外部からでもアクセスできてしまいます。そのため、S3にはバケット/オブジェクトへのアクセスを制御するためのアクセ...
タイトルとURLをコピーしました