CUBE SUGAR CONTAINER

技術系のこと書きます。

Google Cloud SDK の CLI で GCP を操作する

今回は Google Cloud SDK を使うことで CLI から Google Cloud Platform を操作してみる。

使った環境は次の通り。

$ sw_vers                           
ProductName:    Mac OS X
ProductVersion: 10.13.3
BuildVersion:   17D102

インストール

macOS であれば Google Cloud SDK は Homebrew Cask からインストールできる。

$ brew cask install google-cloud-sdk

初期設定

インストールが終わったら、最初に認証情報などを設定するために gcloud init コマンドを実行する。 コマンドを実行すると Web ブラウザが開くはずなので、そこから GCP にログインする。

$ gcloud init

上記の初期化をする過程でプロジェクトの作成か既存からの選択を促されるはず。 後から実行するときは次のように gcloud projects create コマンドで作成する。

$ gcloud projects create gcloud-cli-helloworld

GCP では、このように何かを始めるときに、まずはプロジェクトを作成することになる。

$ gcloud projects list
PROJECT_ID             NAME                   PROJECT_NUMBER
gcloud-cli-helloworld  gcloud-cli-helloworld  XXXXXXXXXXXX

BigQuery を操作してみる

試しにプロジェクト内で BigQuery を使ってみることにしよう。 まずはデータセットを作成する。 これは RDBMS でいえばデータベースに相当する。

$ bq mk gcloud-cli-helloworld:example_bq

次の通りデータセットができた。

$ bq ls gcloud-cli-helloworld   
  datasetId   
 ------------ 
  example_bq  

続いてデータセット内にテーブルを作る。 これは RDBMS でもお馴染みの概念なので特に説明はいらなさそう。

$ bq mk gcloud-cli-helloworld:example_bq.users

これでテーブルができた。 RDBMS との違いは、この状態ではまだテーブルのスキーマが指定されていないこと。

$ bq show gcloud-cli-helloworld:example_bq.users
Table gcloud-cli-helloworld:example_bq.users

   Last modified    Schema   Total Rows   Total Bytes   Expiration   Time Partitioning   Labels  
 ----------------- -------- ------------ ------------- ------------ ------------------- -------- 
  10 Apr 17:57:46            0            0                                                      

スキーマや中身についてはこれから設定していく。

続いては、次のように JSON 形式でスキーマを用意しよう。

$ cat << 'EOF' > schema.json
[
  {"name": "name", "type": "string", "mode": "required"},
  {"name": "age", "type": "integer", "mode": "required"}
]
EOF

肝心の中身は次のように CSV で用意した。

$ cat << 'EOF' > users.csv
Alice,20
Bob,25
Carol,30
EOF

あとは bq load コマンドを使ってスキーマとデータをテーブルにアップロードする。

$ bq load --project_id gcloud-cli-helloworld example_bq.users users.csv schema.json

これでテーブルにスキーマとデータが入った。

$ bq show gcloud-cli-helloworld:example_bq.users
Table gcloud-cli-helloworld:example_bq.users

   Last modified              Schema             Total Rows   Total Bytes   Expiration   Time Partitioning   Labels  
 ----------------- ---------------------------- ------------ ------------- ------------ ------------------- -------- 
  10 Apr 18:04:05   |- name: string (required)   3            43                                                     
                    |- age: integer (required)                                                                       

先程の操作で --project_id の指定が毎回うっとおしいときは、次のようにデフォルトのプロジェクトに指定すると手っ取り早い。

$ gcloud config set project gcloud-cli-helloworld

あとは bq query でテーブルに対してクエリを投げることができる。

$ bq query "SELECT * FROM example_bq.users"
Waiting on bqjob_r72120da59a09c346_00000162aecd87d0_1 ... (0s) Current status: DONE   
+-------+-----+
| name  | age |
+-------+-----+
| Bob   |  25 |
| Alice |  20 |
| Carol |  30 |
+-------+-----+

ばっちり。