2018年5月8日火曜日

[GCP] google cloud storage を PHP から利用する

【試した環境】
Google Cloud Platform(GCP)[VMインスタンス]で実行
OS : Linux(Debian 9.2)
PHP(7.0.27)

今回は [Google Cloud Storage] を [PHP] 上から利用していきます。


ストレージバケットを作成

コンソールを使えばそれほど難しくないので、詳細は割愛します。
まずは [Google Cloud Platform コンソール] で [Strage] - [ブラウザ] と進み、[バケット] を作成します。
ストレージ バケットの作成

注意点は[バケット名]の命名です。
命名にはある程度の制限があります。
[Cloud Storage] 全体でユニークである必要があるため、誰かが利用しているバケット名は使うことができません。
また、ドメイン名を持つバケットには検証が必要です。

ファイルのダウンロード(参照)

まずは作成したバケットにファイルをアップロードします。
ファイルを一般公開にすることで、以下でアクセスができるようになります。
https://storage.googleapis.com/[バケット名]/[オブジェクト名(ファイル名)]

ファイルのアップロード

今回はPHPで利用するので、前準備としてPHP用の [client library] をインストールする必要があります。
Cloud Storage Client Libraries

まずはPHPパッケージ管理の [Composer] をインストールします。
Composerをインストールしてみた
そしてインストールした [Composer] を利用して [client library] をインストールします。
composer require google/cloud-storage

次にアップロードしたファイルが一般公開になるように、以下を参考にバケットの権限を変更します。
Google Cloud Storage を PHPで。
[allUsers] を [ストレージオブジェクト閲覧者] に。

そして、アクセス許可するための [Google Cloud Platform コンソール] で [service account key] を作成します。
[APIとサービス] - [認証情報] とアクセスし、[認証情報を作成]-[サービスアカウントキー] を選択します。
[サービスアカウント] で [新しいサービスアカウント] を選択します。
適当な[サービス アカウント名] を入力し、役割を [Project > Owner] に設定します。
[キーのタイプ] を [JSON] に設定し、[作成] すると、[秘密鍵ファイル] がダウンロードされる。([秘密鍵ファイル(JSON)] は再ダウンロードができないので、大事に保管すること)
[秘密鍵ファイル] をサーバ上の任意の場所にアップロードし、new StorageClient() でインスタンス生成時に[秘密鍵ファイル]を指定すればよい(keyFile)

あとは、以下のPHPのアップロードサンプルプログラムを参考にすればファイルがアップロードできます。
<?php
include_once 'vendor/autoload.php';
use Google\Cloud\Storage\StorageClient;
function uploadObject($bucketName, $objectName, $source) {
  $projectId = '<プロジェクトID>';
  $storage = new StorageClient([
            'projectId' => $projectId,
            'keyFile' => json_decode(file_get_contents('<秘密鍵jsonファイルのフルパス>'), true)
        ]);
  $file = fopen($source, 'r');
  $bucket = $storage->bucket($bucketName);
  $object = $bucket->upload($file, [
      'name' => $objectName
  ]);
}


【参考】




0 件のコメント:

コメントを投稿