色んなGCPサービスを簡単に操作できる、Google Cloud PHP Clientを使ってみよう
こんにちは。
開発チームのワイルド担当、まんだいです。
GCPにもAWS同様、色んなプログラム言語に対応したクライアントライブラリがあります。
これが便利な代物で、GCPの色んなサービスへアクセスする手段が、同じ方法で導入できます。
また、統合されているのでサービス間で使い勝手が変わらないので、一度覚えてしまえば迷うことがないという特典付きで使えば使うほど恩恵が受けられるツールです。
今回は、PHPのクライアントライブラリの使ってみようと思います。
composerを使ってインストール
composerでインストールできるので、導入は非常に簡単です。
GCPのクライアントライブラリは各サービス毎にモジュール化されているので、必要なサービスのライブラリをインストールするだけです。
下の例では、Cloud Storage用のライブラリをインストールしています。
composer require google/cloud-storage
これでインストールは完了です。
後は認証情報からサービスアカウントを作成(後述します)すれば利用可能な状態となります。
他にも各サービス用のライブラリがありますので、表にまとめてみました。
サービス名 | モジュール名 | 備考 |
---|---|---|
Cloud Storage | google/cloud-storage | |
Cloud Datastore | google/cloud-datastore | |
Cloud BigQuery | google/cloud-bigquery | |
Cloud Spanner | google/cloud-spanner | ベータ版 |
Cloud Vision | google/cloud-vision | |
Cloud Translate | google/cloud-translate | |
Cloud Speech | google/cloud-speech | |
Cloud Natural Language | google/cloud-language | 一部機能はベータ版 |
Google App Engine | google/cloud-tools | Flex環境用のDockerイメージを操作する |
Cloud Pub/Sub | google/cloud-pubsub | |
Stackdriver Trace | google/cloud-trace | |
Stackdriver Logging | google/cloud-logging | |
Stackdriver monitoring | google/cloud-monitoring | |
Stackdriver Error Reporting | google/cloud-error-reporting | |
Video Intelligence | google/cloud-videointelligence | ベータ版 |
Cloud Firestore | google/cloud-firestore | ベータ版 |
Cloud Data Loss Prevention | google/cloud-dlp | Data Loss Prevention API 早期アクセス プログラムの参加者のみ |
Bigquery Data Transfer Service | google/cloud-bigquerydatatransfer | 非公開の無料トライアル版 |
- 全てcomposerからインストールし利用することが可能です。
- データは2018年1月18日のものです
サービスアカウントを作成する
サービスアカウントは、GCPのクラウドコンソールから作成します。
メニューから認証情報の画面へ遷移します。
続いて、「認証情報の作成」というボタンから、サービスアカウントキーを選択します。
新しくサービスアカウントを作成する場合は、「新しいサービスアカウント」を選択します。
サービスアカウント名は管理しやすい好きなものを付けて構いません。
役割は、サービスによって複数あるので、これというものがないのですが、「オーナー/管理者」というのが最上位の権限を持つ役割で、そのサービス内で全ての操作が行える権限を持ちます。面倒だったらこれですね。
開発者向けに払い出すアカウントの場合は、読み書きができる権限をもつ役割をセットします。
ちなみに、役割は複数持たせることができます。
例えば、Datastoreであれば、ユーザーとインデックス管理者といった具合です。
サービスアカウントIDは形式はメールのような形になっていて@より前の部分は好きな文字列を設定できます。
キーのタイプはP12だとPHPから扱いにくいので、「JSON」を選択します。
以上の情報を入力したら、作成ボタンを押します。
作成ができたら、認証情報がまとめられたJSONファイルのダウンロードが始まります。
このJSONファイルは非常に重要なものなので、慎重に扱うようにしましょう。
以上でサービスアカウントの作成は完了です。
サンプルプログラム
GCPのドキュメントに載っているサンプルプログラムは、認証情報を読み込む部分が載っていなくて困った記憶がありますので、Cloud Storageを利用する場合を想定して、認証情報の設定から実際に画像をアップロードするところまでのサンプルプログラムを以下に提示します。
<?php require './vendor/autoload.php'; use Google\Cloud\Core\ServiceBuilder; $keyFilePath = '../hogehoge.json'; $projectId = 'sample-123456'; $bucketName = 'new-my-bucket'; $uploadFile = './test.txt'; $gcloud = new ServiceBuilder([ 'keyFilePath' => $keyFilePath, 'projectId' => $projectId, ]); $storage = $gcloud->storage(); $bucket = $storage->createBucket($bucketName); // 既存のバケットを利用する場合 // $bucket = $storage->bucket($bucketName); $bucket->upload(fopen($uploadFile, 'r'));
上のサンプルでは、test.txtというファイルをnew-my-bucketバケットにアップロードするサンプルです。
このへんやこのへんのサンプルをみても、ServiceBuilderクラスを使っていないんですが、個人的には、ServiceBuilderクラスから作ったインスタンスからであれば、認証処理が済んだ各サービス向けのインスタンスが取り出せるので手早いかなと思っています。
GCPの認証に関するドキュメントには、「GOOGLE_APPLICATION_CREDENTIALS」という環境変数を使ってコマンド打ってねと書いてありますが、PHPだけで完結する方が事前準備も少なかろうと思いますので、今回紹介した方法は個人的に気に入っている方法です。
まとめ
メリットしかない!
そうも言いたくなるGCPサービスのクライアントライブラリはいかがだったでしょうか。
Cloud SQL用のクライアントライブラリがあればいいなと思ったんですが、流石にそれはないみたいです。
GCE向けのものなどもないですが、そもそもVM管理をPHPでやるメリットもないっちゃないですね。
そこは素直にgcloudコマンドを使おうということだと思います。
Cloud Data Loss PreventionやBigquery Data Transfer Serviceのような一般公開さえされていないサービス向けのクライアントもあったりするんですが、ライブラリの整備速度が半端じゃないなと思います。
特にGCPのストレージ系サービスではCloud Storageの値段は最高位のマルチリージョナルでさえ群を抜いて安い(次いで安いと思われる標準永続ディスクの65%のお値段)ので、GCP上で展開する予定のシステムなら、プログラムからローカル保存せずに積極的に利用していきたいところです。
以上です。