41664


[Google cloud storage & Laravel
5](https://www.reddit.com/r/laravel/comments/44er6g/google_cloud_storage_laravel_5/)

上記の記事を参考にLaravelのFileSystemでAWSのS3のドライバを使ってGoogle Cloud
Storageにファイルをアップロードしようとしているのですがうまくいきません。  
まずconfig/filesystems.phpのdisksに以下の要素を追加しました。

[code]

    'gcp' => [
             'driver' => 's3',
             'key' => env('GCP_KEY'),
             'secret' => env('GCP_SECRET'),
             'region' => env('GCP_DEFAULT_REGION'),
             'bucket' => env('GCP_BUCKET'),
             'base_url'=> env('GCP_BASE_URL'),
        ],
    
[/code]

keyとsecretはGoogle Cloud PlatformコンソールのStorage -> 設定 -> 相互運用性 -> 新しいキーを作成
で取得したアクセスキーとシークレットを設定しました。  
regionは東京であるap-northeast-1を指定し、bucketもGoogle Cloud
Platformで作成したバケットの名前を指定しています。  
そしてbase_urlにはhttps://storage.googleapis.comを指定しました。

あと上記のリンク先の記事によるとサービスプロバイダを設定していたので、そのまま同じファイルを作成して、config/app.phpのprovidersに

[code]

    App\Providers\GoogleCloudStorageServiceProvider::class
    
[/code]

と追加しました。

そして実際に画像を送信するコードを以下のように書きました。

[code]

    $disk = Storage::disk('gcp');
    $disk->put('test/test.jpg', $request->image);
    
[/code]

その後php artisan serveでサーバーを再起動し、ブラウザから画像のアップロードを実行してみたのですが、以下のようなエラーが表示されました。

Error executing "PutObject" on "<https://s3.ap-
northeast-1.amazonaws.com/myproject.appspot.com/test/test.jpg/UnBh154txrnrZFhTv0vI46NmlGlnpYolK8m412VO.jpeg>";
AWS HTTP error: Client error: `PUT https://s3.ap-
northeast-1.amazonaws.com/myproject.appspot.com/test/test.jpg/UnBh154txrnrZFhTv0vI46NmlGlnpYolK8m412VO.jpeg`
resulted in a `403 Forbidden` response: `InvalidAccessKeyId`The AWS Access Key
Id you provided (truncated...) InvalidAccessKeyId (client): The AWS Access Key
Id you provided does not exist in our records. - `InvalidAccessKeyId`The AWS
Access Key Id you provided does not exist in our records.

これはGoogle Cloud PlatformとAWSが連携できていないということでしょうか？  
以上の手順で何か抜けているところ、間違っているところはあるでしょうか？  
どなたか分かる方がいれば教えていただきたいです。よろしくお願いします。


CC BY-SA 3.0
2018-02-12T05:00:35.570
41663
2018-02-12T06:29:57.123
5210
question
php aws laravel google-cloud-storage
LaravelでS3のドライバを使ってGoogle Cloud Storageに接続できない


AWS SDK for PHP
v3においてAPIのエンドポイントは`endpoint`で指定するようです。([当該コード](https://github.com/aws/aws-sdk-
php/blob/master/src/AwsClient.php#L161))

これ自体はv2から変わったことではないようですがGuzzle辺りが当時はS3Clientに渡した`base_url`を使えていたようなのでそういった情報が残っている、のかもしれません。

とりあえずこの質問については

[code]

             'base_url'=> env('GCP_BASE_URL'),
    
[/code]

の`base_url` を `endpoint` に変えることでGCPのエンドポイントが使えるようです。


CC BY-SA 3.0
2018-02-12T06:29:57.123
41664
2018-02-12T06:29:57.123
2376
41663
answer