0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

S3 に アップロードした view ファイルの URL を一時的なものにする。( Severless Framework x Laravel )

Posted at

はじめに

セキュリティの面で、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 の環境変数、両方を扱わなくてはいけないので、ちょっと面倒ですが、これだけやってしまえれば、あとはもう何もしなくていいので、便利です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?