はじめに
セキュリティの面で、S3 にアップロードしている view ファイルの URL を一時的なものに変更する必要があったので、その手順を残します。
S3 に view ファイルをアップロードする記事はこちら
https://qiita.com/soma_sekimoto/items/5cdeb4b51141e95ba972
1. .env の "AWS_ACCESS_KEY=" などの AWS 関連の部分を複製する。そして、S3 のバケットのポリシーを持つキーを入力する。
.env
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
+ AWS_ACCESS_KEY_ID_S3=XXXXXXXXXXXX
+ AWS_SECRET_ACCESS_KEY_S3=XXXXXXXXXXXX
+ AWS_DEFAULT_REGION_S3=XXXXXXXXXXXX
+ AWS_BUCKET_S3=XXXXXXXXXXXX
理由としては、serverless framework を利用したときに、lambda の 環境変数がすでにセットされているため、それを使って S3 にアクセスしようとすると、Access Denied のエラーが出るから。
2. config/filesystems.php に以下のように記述
disks => {
~省略~
's3'=> [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID_S3'),
'secret' => env('AWS_SECRET_ACCESS_KEY_S3'),
'region' => env('AWS_DEFAULT_REGION_S3'),
'bucket' => env('AWS_BUCKET_S3'),
'url' => env('AWS_URL_S3'),
'endpoint' => env('AWS_ENDPOINT_S3'),
]
~省略~
}
3. app/helpers.php 作成・編集
<?php
if (!function_exists('s3_asset')) {
function s3_asset($path)
{
return \Illuminate\Support\Facades\Storage::disk('s3')->temporaryUrl($path, now()->addMinute());
}
}
4. composer.json に追記
"autoload": {
"psr-4": {
"App\\": "app/"
},
"classmap": [
"database/seeds",
"database/factories"
],
+ "files" : [ #<= ここから追記
+ "app/helpers.php"
+ ]
},
5. composer dump-autoload 実行。
$ composer dump-autoload
これで、helpers.php の s3_asset 関数が使えるようになりました。
6. resources/views/layouts/app.blade.php に 関数の記述
@if(env('APP_ENV') == 'local')
<link href=" {{ mix('css/app.css') }} " rel="stylesheet"></link>
@else
<link href=" {{ s3_asset('css/app.css') }} " rel="stylesheet"></link>
@endif
# 条件分岐で、local環境では違うところから asset をとってくるようにしている。
7. 以下コマンドを実行
$ npm run dev
$ php artisan config:clear
$ sls deploy -v
終わりに
Lambda の環境変数と S3 の環境変数、両方を扱わなくてはいけないので、ちょっと面倒ですが、これだけやってしまえれば、あとはもう何もしなくていいので、便利です。