目的
LaravelからGCSへファイルをアップロードしたい。
GCSの設定
認証キーの準備
サービスアカウントキーを選択
サービスアカウントを適切に設定。
キータイプはP12
作成すると秘密鍵がDLされ秘密鍵生成時のパスワードが表示される。
大切に保存しておく。
サービスアカウントIDの取得
IAMと管理 -> サービスアカウント
から今回APIキーを作成したサービスアカウントIDをコピーしておく
アプリケーション側の設定
以下のライブラリを使用するとLaravelのStorageの機能を使って実装が可能
https://packagist.org/packages/websight/l5-google-cloud-storage
composer.jsonの
"require"に
"websight/l5-google-cloud-storage" : "1.*",
追加
"require": {
"websight/l5-google-cloud-storage" : "1.*"
},
config/appの ServiceProvidersに以下を追加
Websight\GcsProvider\CloudStorageServiceProvider:
config/filesystems.phpにgcsの設定を追加。
ここで設定する値はKEY等 git管理をせずに、また環境ごとに変わる情報が多いためenvに切り出しておく。
'gcs' => [
'driver' => 'gcs',
'service_account' => env('SERVICE_ACCOUNT'),
'service_account_certificate' => storage_path() . '/' . env('SERVICE_ACCOUNT_CERTIFICATECATE'),
'service_account_certificate_password' => env('SERVICE_ACCOUNT_CERTIFICATE_PASSWORD'),
'bucket' => env('GCS_BUCKET')
],
なお、envの設定は以下のとおり
SERVICE_ACCOUNT = サービスアカウントID
SERVICE_ACCOUNT_CERTIFICATE = {今回DLした秘密鍵の設置pass}
SERVICE_ACCOUNT_CERTIFICATE_PASSWORD = 秘密鍵生成時のpassword
GCS_BUCKET = 対象bucket
その後GCSで生成した秘密鍵をアプリケーションに配置する。
今回はstorage/pass/{秘密鍵}というパスの秘密鍵を使うように指定したため、
そのファイルパスに秘密鍵を配置しておく。
これでアプリケーション側で
$disk = \Storage::disk('gcs');
$disk->put($upload_directory_path, $file);
のようにしてあげればアップロードが完了する。
他にもLaravelのファイルストレージのメソッドが使えるので実装が便利
http://readouble.com/laravel/5/1/ja/filesystem.html