UNIX/Linuxの部屋 gcloudコマンドの使い方


※空白区切りで AND 検索 (例:「ファイル 削除」)

コマンド gcloud Google Cloud Platform (GCP) のコマンドラインツール

最終更新


目次:
gcloud コマンドは、Google Cloud Platform (GCP) のサービスについて表示・管理・更新を行うコマンドラインツールで、Google が作成している Cloud SDK の中の一部である。Google が提供する GCE や Cloud Shell には gcloud コマンドがデフォルトでインストールされているが、Windows・Linux・mac 用の Cloud SDK が配布されているので、それをインストールすることで GCP 以外の環境でも gcloud コマンドを使うことができる。

gcloud で GCP の全サービスを操作できるわけではなく、BigQuery は bq コマンド、Google Cloud Storage (GCS) は gsutil コマンド、GKE (≒Kubernetes) は kubectl コマンドをそれぞれ使用する。

gcloud コマンドの基本的な使い方
gcloud の後には「グループ」を指定する。
例:
gcloud compute … Compute Engine に関する表示・設定
gcloud sql … Cloud SQL に関する表示・設定

グループ以降は書式はばらばらであるが、おおむね下記のような方針かと思われる。
gcloud グループ サブグループ サブサブグループ ... アクション [何を]
→ グループ・サブグループ ... で機能や概念を指定
→ アクションで何をするかを指定
→ [何を] で、より具体的なインスタンス名等を指定 (省略されることもある)

gcloud コマンドの引数は TAB にて候補表示と補完が可能であるので、積極的に TAB を活用しよう。特徴的なのは、gcloud compute instances describe まで打って TAB を押下
→ 実際に指定可能なインスタンス名がリストアップ
というふうに、[何を] の部分がインスタンス名なのかロールなのかアカウントなどかを判断して候補表示・補完してくれるのは大変便利である。

gcloud コマンドの共通オプション
▷ --format・--flatten・--filter
▷ --project=[プロジェクトID]
現在のデフォルトプロジェクト以外を指定したい場合
▷ --account=[アカウント名]
現在のデフォルトアカウント以外を指定したい場合
▷ --log-http
GCP のサービスの情報取得・作成・更新は、すべて Google が提供する API を呼び出すことで行われる。その API とのリクエスト・レスポンスを表示する。これを見るとエラー原因がわかったりすることがあるかもしれない。

alpha・beta について
GCP の方針として、アルファ版 → ベータ版 → 正式版と段階を踏むことがある。その場合、アルファ版は gcloud alpha XXX、ベータ版は gcloud beta XXX、正式版は gcloud XXX となる。例えば gcloud compute であれば下記のようになる。
% gcloud alpha compute instance list
→ アルファ版
% gcloud beta compute instance list
→ ベータ版
% gcloud compute instance list
→ 正式版
アルファ・ベータ・正式版で書式が若干異なったりするが、正式版が存在する場合は当然ながら正式版を使用した方がよい。ただし、alpha や beta にしか存在しないコマンドもあるので、正式版にないものはアルファ・ベータを探してみるのも手である (例: gcloud dataflow metrics)。

また、アルファ・ベータなしでいきなり正式版というパターンもある (Cloud Composer はいきなり GA だったので、gcloud composer はあるが、gcloud alpha composer・gcloud beta composer はない)。

gcloud composer … Cloud Composer の表示・管理
▷ gcloud composer environments create … Cloud Composer を作成する
% gcloud composer environments create my-composer --location=us-central1 --zone=us-central1-c --machine-type=n1-standard-1 --node-count=3 --disk-size=100GB
▷ gcloud composer environments delete … Cloud Composer を削除する
▷ gcloud composer environments update … Worker ノード数・環境変数・Airflow 設定・ラベル・pypi パッケージ を設定・変更・削除する
環境変数を設定・更新する例:
% gcloud composer environments update my-composer --location us-central1 --update-env-variables=myenvkey1=myenvval1,myenvkey2=myenvval2
Airflow 設定を設定・更新する例:
% gcloud composer environments update my-composer --location us-central1 --update-airflow-configs=core-parallelism=100,celery-celeryd_concurrency=140
▷ gcloud composer environments run … Airflow CLI コマンド (に相当する処理) を実行する
基本的に、Airflow 画面からできることはすべてできる、はず。逆にいうと、(Airflow 画面ではなく) GCP コンソールから設定することは run ではできない。

Airflow の Variables を設定する例 (MYKEY=myvalue)
% gcloud composer environments run my-composer --location us-central1 variables -- --set MYKEY myvalue
▷ gcloud composer environments storage dags imoport … DAG をインポートする
% gcloud composer environments storage dags import --source=./dags --environment=my-composer --location=us-central1

gcloud compute … Google Compute Engine (GCE) の表示・管理、リージョン・ゾーン・マシンタイプ一覧など
▷ gcloud compute instances list … Compute Engine の一覧を表示する
▷ gcloud compute ssh [インスタンス名] … Compute Engine に ssh でログインする
▷ gcloud compute images list … イメージ一覧を表示する
% gcloud compute images list
NAME                              PROJECT       FAMILY         DEPRECATED  STATUS
centos-6-v20181011                centos-cloud  centos-6                   READY
centos-7-v20181011                centos-cloud  centos-7                   READY
coreos-alpha-1953-0-0-v20181106   coreos-cloud  coreos-alpha               READY
coreos-beta-1939-1-0-v20181106    coreos-cloud  coreos-beta                READY
coreos-stable-1911-3-0-v20181106  coreos-cloud  coreos-stable              READY
(略)
▷ gcloud compute machine-types list … 全ゾーンについて、利用可能なマシンタイプ一覧を表示する
% gcloud compute machine-types list
NAME             ZONE                       CPUS  MEMORY_GB  DEPRECATED
f1-micro         us-central1-f              1     0.60
g1-small         us-central1-f              1     1.70
n1-highcpu-16    us-central1-f              16    14.40
n1-highcpu-2     us-central1-f              2     1.80
(略)
下記のように、ゾーンを絞り込むこともできる。
% gcloud compute machine-types list --filter="zone: asia"
→ アジア全体
% gcloud compute machine-types list --filter="zone: asia-northeast1"
→ asia-northeast1 (東京) の全ゾーン
% gcloud compute machine-types list --filter="zone: asia-northeast1-c"
→ asia-northeast1-c のみ
% gcloud compute machine-types list --filter="zone: (asia-northeast1-a asia-northeast1-c)"
→ asia-northeast1 の a と c
--format=json をつければ、JSON 形式かつ詳細情報を一覧表示できる。
% gcloud compute machine-types list --format=json				
[
  {
    "creationTimestamp": "1969-12-31T16:00:00.000-08:00",
    "description": "1 vCPU (shared physical core) and 0.6 GB RAM",
    "guestCpus": 1,
    "memoryMb": 30720,
    "name": "n1-standard-8",
    (略)
  },
  {
    "creationTimestamp": "1969-12-31T16:00:00.000-08:00",
    (略)
▷ gcloud compute machine-types describe [マシンタイプ名] … マシンタイプの詳細を表示する
下記はゾーン asia-northeast1-c におけるマシンタイプ n1-standard-1 の詳細情報を表示する例。
% gcloud compute machine-types describe n1-standard-1 --zone=asia-northeast1-c
creationTimestamp: '1969-12-31T16:00:00.000-08:00'
description: 1 vCPU, 3.75 GB RAM
guestCpus: 1
id: '3001'
imageSpaceGb: 10
isSharedCpu: false
kind: compute#machineType
maximumPersistentDisks: 32
maximumPersistentDisksSizeGb: '65536'
memoryMb: 3840
name: n1-standard-1
selfLink: https://www.googleapis.com/compute/v1/(略)
zone: asia-northeast1-c
複数のマシンタイプについて詳細情報を取得したい場合は、gcloud compute machine-types list --format=json の方が便利かもしれない。
▷ gcloud beta compute instances simulate-maintenance-event … 擬似的なメンテナンスイベントを発生させライブマイグレーションを行う

gcloud config … プロジェクトやリージョンなどデフォルト設定値を表示・変更する
gcloud config は、Cloud SDK の設定値を表示・確認するコマンドである。より具体的に言うと、gcloud・gsutil・bq コマンドなどにおいて、今どのプロジェクトを参照しているか、どのアカウントでアクセスしているかを確認したり、変更したりできる。

また、リージョンやゾーンについては、「毎回指定するのがめんどくさいので、デフォルトの設定を指定したい」という場合に使用するとよい。なお、プロジェクト・アカウント・リージョン・ゾーンなどは、gcloud コマンドの --project・--account・--region・--zone オプションで上書き可能である。

▷ gcloud config list … 現在の設定値をすべて表示する
% gcloud config list
[component_manager]
disable_update_check = True
[compute]
gce_metadata_read_timeout_sec = 5
[core]
account = foobar@gmail.com
disable_usage_reporting = False
project = myproject
[metrics]
environment = devshell
なお、上記は値が設定されている項目のみ表示しているので、未設定のすべての項目をすべて表示するには -all オプションをつけるとよい。
% gcloud config list --all
[app]
cloud_build_timeout (unset)
promote_by_default (unset)
stop_previous_version (unset)
use_runtime_builders (unset)
[compute]
gce_metadata_read_timeout_sec = 5
region (unset)
use_new_list_usable_subnets_api (unset)
zone (unset)

▷ gcloud config get-value [セクション/プロパティ]… 特定の設定値を取得する
% gcloud config get-value core/project
myproject
→ core セクションの project プロパティの設定値を表示
% gcloud config get-value project
myproject
→ セクションを省略すると、core セクションと読み替えてくれる
% gcloud config get-value compute/region
us-central1
→ Compute Engine の region を表示

▷ gcloud config set [セクション]/[プロパティ] [設定値] … 設定値を変更する
% gcloud config set compute/region asia-northeast1
% gcloud config set compute/zone asia-northeast1-a
設定後、gcloud config list で設定値を確認しよう。

▷ gcloud config configurations
環境切替時にひとつひとつの値を設定するのは面倒なので、複数の設定値をひとまとめに管理する"configrations" という機能があるが、詳細は後日書く。

gcloud dataflow … Dataflow の表示・ジョブ実行
gcloud dataflow を使うと、Cloud Dataflow を操作・情報を表示することができる。

▷ gcloud dataflow jobs list … Dataflow ジョブの一覧を表示する。
% gcloud dataflow jobs list
ID                                        NAME                          TYPE   CREATION_TIME        STATE   REGION
2018-06-03_16_39_22-4020553808241078833   wordcount-0603233849          Batch  2018-06-03 16:39:22  Done    us-central1
2018-05-21_16_24_11-17823098268333533078  bigquerytornadoes-0521232402  Batch  2018-05-21 16:24:11  Running europe-west1
2018-05-20_15_54_51-15905022415025455887  wordcount-0520225444          Batch  2018-05-20 15:54:51  Failed  us-central1
2018-05-20_15_47_02-14774624590029708464  wordcount-0520224637          Batch  2018-05-20 15:47:02  Done    us-central1
各項目の意味は以下の通り。
  • ID は「ジョブID」で自動採番されるもので、重複はしない。下記の cancel や describe などのパラメータとして指定するものである。
  • NAME は自分でつける名前で、"abc" でも "hogehoge" でもよい。
  • TYPE は、バッチかストリーミングのいずれかである。バッチは一度限りの実行。ストリーミングはずっと動き続けて届いたデータを取り込み続ける。
  • CREATION_TIME は、ジョブ作成日時。
  • STATE は、ジョブの状態。

有用なオプションを以下に示す。
▷ --created-after=[日時指定]
ジョブ開始日時が指定の日時以降のもののみ表示する。日付指定はいろいろ可能。
--created-after="2018-10-01"
--created-after="2018-10-01T09:01:02"
--created-after="2018-10-01T09:01"
--created-after="2018-10-01T09"
--created-after="09:12" → 当日の 09:12
--created-after="2018/10/01" → スラッシュ区切りでも OK
--created-after="-p1y" → 1年前
--created-after="-p1m" → 1ヶ月前
--created-after="-p1d" → 1日前
--created-after="-p1h" → 1時間
--created-after="-pt1m" → 1分前
--created-after="-pt1s" → 1秒前
--created-after="-p1d3h" → 1日と3時間
書式は gcloud topics datetimes を参照。
▷ --created-before=[日時指定]
ジョブ開始日時が指定の日時より前のもののみ表示する。
▷ --status=active
現在実行中のジョブのみ表示する
▷ --status=terminated
終了したジョブのみ表示する (正常終了・エラー・キャンセルを問わない)
▷ --limit=[件数]
表示件数を指定する。デフォルトは 100件。
▷ gcloud dataflow jobs cancel [ジョブID] … Dataflow ジョブをキャンセルする (取り込み中データ欠損可能性あり)
実行中の Dataflow ジョブをキャンセルする。バッチの場合は、常に cancel を使えばよい。ストリーミングの場合にキャンセルすると、取り込み中のデータが欠損する可能性があるので、それを避けたい場合は drain を使う。
% gcloud dataflow jobs cancel 2018-06-03_16_39_22-4020553808241078833

▷ gcloud dataflow jobs drain [ジョブID] … Dataflow ジョブをキャンセルする (取り込み中データ欠損なし)
実行中のストリーミング Dataflow ジョブをキャンセルする。cancel とは違い、取り込み中データの欠損はない。
% gcloud dataflow jobs drain 2018-06-03_16_39_22-4020553808241078833

▷ gcloud dataflow jobs describe [ジョブID] … ジョブ詳細を表示する。
% gcloud dataflow jobs describe 2018-06-03_16_39_22-4020553808241078833
% gcloud dataflow jobs describe --full 2018-06-03_16_39_22-4020553808241078833

▷ gcloud dataflow jobs show [ジョブID] … ジョブ情報を表示する。
% gcloud dataflow jobs show
% gcloud dataflow jobs describe --environement 2018-06-03_16_39_22-4020553808241078833
% gcloud dataflow jobs describe --steps 2018-06-03_16_39_22-4020553808241078833

▷ gcloud dataflow jobs run [ジョブ名] --gcs-location=[テンプレートURL] … Dataflow テンプレートを実行する
Google 提供の Dataflow テンプレートまたは、自前で作成した Dataflow テンプレートを、Dataflow ジョブとして実行する。
% gcloud dataflow jobs run myjob-20181006 --gcs-location=gs://mybucket/template/myjob
→ gs://mybucket/template/myjob に配置した Dataflow テンプレートをジョブとして実行する。ジョブ名は "myjob-20181006" とする。
下記はパラメータを指定する例。param1 と param2 をカンマ区切りで指定している。
% gcloud dataflow jobs run myjob-20181006 --gcs-location=gs://mybucket/template/myjob --parameters="param1=value1,param2=value2"
ジョブ名は好きな名前でよく、"abc" でも "hogehoge" でもよいが、実行中の Dataflow ジョブに同じジョブ名が存在するとエラーになる。終了している場合は名前が重複しても問題ない。

▷ gcloud beta dataflow logs list [ジョブID]

▷ gcloud beta dataflow metrics list [ジョブID]

gcloud iam … GCP の権限表示・設定、サービスアカウント管理
▷ gcloud iam service-accounts create … サービスアカウントを作成する
下記例は、サービスアカウント "my-sa" を作成する。--display-name は省略可能だが、つけた方が管理上わかりやすい。
% gcloud iam service-accounts create my-sa --display-name="My Service Account"

▷ gcloud iam service-accounts list … サービスアカウントの一覧を表示する
% gcloud iam service-accounts list
NAME                                    EMAIL
App Engine default service account      myproject@appspot.gserviceaccount.com
Compute Engine default service account  123456789-compute@developer.gserviceaccount.com
My Service Account                      my-sa@myproject.iam.gserviceaccount.com

▷ gcloud iam service-accounts add-iam-policy-binding … gcloud projects add-iam-policy-binding とどう違う?

▷ gcloud iam service-accounts remove-iam-policy-binding … gcloud projects remove-iam-policy-binding とどう違う?

▷ gcloud iam service-accounts delete … サービスアカウントを削除する
実行例は下記のとおり。
% gcloud iam service-accounts delete my-sa@myproject.iam.gserviceaccount.com
You are about to delete service account
[my-sa@myproject.iam.gserviceaccount.com].

Do you want to continue (Y/n)?
→ y または Enter で削除
y/n 問い合わせなしで強制的に削除するには、--quiet オプションをつける。
% gcloud iam service-accounts delete --quiet my-sa@myproject.iam.gserviceaccount.com

▷ gcloud iam roles list … 利用可能なロールの一覧を表示する
% gcloud iam roles list
---
description: Edit access to all resources.
etag: AA==
name: roles/editor
stage: GA
title: Editor
---
(略)
---
description: Read-only access to get and list information about all Compute Engine
  resources, including instances, disks, and firewalls. Allows getting and listing
  information about disks, images, and snapshots, but does not allow reading the data
  stored on them.
etag: AA==
name: roles/compute.viewer
stage: GA
title: Compute Viewer

▷ gcloud iam roles describe [ロール名] … ロールの詳細情報を表示する
ロールの詳細情報を表示する。ロールが持つ権限 (permission) 一覧を確認したい場合に有用。下記では、ロール editor が持つ権限一覧を表示している。
% gcloud iam roles describe roles/editor
(略)
- compute.instances.addAccessConfig
- compute.instances.addMaintenancePolicies
- compute.instances.attachDisk
- compute.instances.create
- compute.instances.delete
(略)
▷ gcloud iam list-grantable-roles [リソース] … 付与可能なロール一覧を表示する
下記はプロジェクトID myproject のロール一覧を表示する例。プロジェクトID は gcloud projects list で確認可能。
% gcloud iam list-grantable-roles //cloudresourcemanager.googleapis.com/projects/myproject | grep name:
name: roles/appengine.appAdmin
name: roles/appengine.appViewer
name: roles/appengine.codeViewer
name: roles/appengine.deployer
name: roles/appengine.serviceAdmin
name: roles/bigquery.admin
name: roles/bigquery.dataEditor
(略)

▷ gcloud iam list-testable-permissions … 利用可能な権限一覧を表示する
現在利用可能な権限一覧を表示する。これは利用者の IAM 設定で変わるものではなく、Google が提供するパーミッション一覧を表示しているkとに注意。

下記はプロジェクトID myproject の権限 (パーミッション) 一覧を表示する例。
% gcloud iam list-testable-permissions //cloudresourcemanager.googleapis.com/projects/myproject | grep name:
name: androidmanagement.enterprises.manage
name: appengine.applications.create
name: appengine.applications.get
name: appengine.applications.update
name: appengine.instances.delete
name: appengine.instances.get
name: appengine.instances.list
name: appengine.memcache.addKey
(略)

gcloud projects … GCP プロジェクトの表示・作成・削除
▷ gcloud projects list … 現在のアカウントで利用可能なプロジェクトの一覧を表示する
% gcloud projects list
PROJECT_ID NAME PROJECT_NUMBER
myproject-dev My Development env 372947218913
myproject-stg My Staging env 904827189210
myproject-prod My Production env 772813722212

▷ gcloud projects create … プロジェクトを新規作成する。
% gcloud projects create myproj-123
Create in progress for [https://cloudresourcemanager.googleapis.com/v1/projects/mypro-123].
Waiting for [operations/cp.8305897030961611776] to finish...done.

▷ gcloud projects delete … プロジェクトを削除する。
gcloud projects delete でプロジェクトを削除する。削除したプロジェクトは 2018/10 現在では 30日以内であれば元に戻すことができる。
% gcloud projects delete myproj-123
Your project will be deleted.
Do you want to continue (Y/n)? y
→ 本当に消してよいか確認されるので、y を入力

Deleted [https://cloudresourcemanager.googleapis.com/v1/projects/myproj-123].
You can undo this operation for a limited period by running:
 $ gcloud projects undelete myproj-123
→ undelete で戻せるよ、とのこと。

▷ gcloud projects undelete … 削除したプロジェクトを元に戻す。
% gcloud projects undelete myproj-123
Restored project [https://cloudresourcemanager.googleapis.com/v1/projects/myproj-123].
→ これで元通り

▷ gcloud projects get-iam-policy [プロジェクトID] … IAM 設定を表示する
アカウント (Google アカウント・グループ・サービスアカウント) それぞれに、どのロールが設定されているかを表示する。

下記例では、roles/compute.admin に 2グループと 1アカウント、roles/viewer に 1グループ、2サービスアカウント、1アカウントが属していることがわかる。
% gcloud projects get-iam-policy myproject
(略)
bindings:
- members:
  - group:mygroup1@googlegroups.com
  - group:mygroup2@googlegroups.com
  - user:foo-bar@example.com
  role: roles/compute.admin
- members:
  - group:mygroup1@googlegroups.com
  - serviceAccount:my-sa1@myproject.iam.gserviceaccount.com
  - serviceAccount:my-sa2@myproject.iam.gserviceaccount.com
  - user:foo-bar@example.com
  role: roles/viewer
(略)

▷ gcloud projects add-iam-policy-binding [プロジェクトID] --member="メンバ" --role='[ロール]'
myproject プロジェクトについて、メンバに roles/editor ロールを付与する例を下記に示す。メンバがアカウント・グループ・サービスアカウント・ドメインにより若干書式が異なる。
% gcloud projects add-iam-policy-binding myproject \\
--member="user:myuser@gmail.com" --role='roles/editor'
% gcloud projects add-iam-policy-binding myproject \\
--member="group:mygroup@googlegroups.com" --role='roles/editor'
% gcloud projects add-iam-policy-binding myproject \\
--member="serviceAccount:mysa@PROJECT_ID.iam.gserviceaccount.com" --role='roles/editor'
% gcloud projects add-iam-policy-binding myproject \\
--member="domain:mydomain.com" --role='roles/editor'

▷ gcloud projects remove-iam-policy-binding [プロジェクトID] --member="メンバ" --role='[ロール]'
remove-iam-policy-binding より後は、add-iam-policy-binding とまったく同じ書式である。


▷ gcloud pubsub topics list … Pub/Sub トピック一覧を表示する
% gcloud pubsub topics list
---
name: projects/myproject/topics/mytopic1
---
name: projects/myproject/topics/mytopic2

▷ gcloud pubsub topics create [新規トピック名]
% gcloud pubsub topics create mytopic
Created topic [projects/myproj3-218519/topics/mytopic].

▷ gcloud pubsub subscriptions list … Pub/Sub サブスクリプション一覧を表示する
% gcloud pubsub subscriptions list
---
ackDeadlineSeconds: 10
messageRetentionDuration: 604800s
name: projects/myproject/subscriptions/mysubscription1
pushConfig: {}
topic: projects/myproject/topics/mytopic1
---
ackDeadlineSeconds: 600
messageRetentionDuration: 604800s
name: projects/myproject/subscriptions/mysubscription2
pushConfig: {}
topic: projects/myproject/topics/mytopic2

▷ gcloud pubsub subscriptions create [新規サブスクリプション名] … Pub/Sub サブスクリプションを作成する。
Pub/Sub サブスクリプションを作成する。作成済のトピックにぶらさげるイメージ。
% gcloud pubsub subscriptions create mysub --topic mytopic
Created subscription [projects/myproj3-218519/subscriptions/mysub].
※--push-endpoint で URL を指定すると、PUSH 方式になるが、後日書く。

▷ gclud pubsub topics publish [トピック名] … 新規メッセージをパブリッシュ (送信) する
メッセージは、トピック宛に送信する。
% gcloud pubsub topics publish mytopic --message='HOGE'
messageIds:
- '221001665022011'

▷ gcloud pubsub subscriptions pull [サブスクリプション名] … メッセージを pull する
トピック宛に送信したメッセージは、そのトピックにぶらさがっているサブスクリプションに配信される。サブスクリプションに配信されたメッセージは pull することで取得できる。
% gcloud pubsub subscriptions pull mysub
│ DATA │    MESSAGE_ID   │ ATTRIBUTES │  ACK_ID    │
│ HOGE │ 221001665022011 │            │ Ekw(略)V5A │

pull と同じタイミングで ack してしまいたい場合は、--auto-ack オプションを指定する。ただし、pull した直後 (何かしらの処理を行う前) にプログラムがエラー終了したりサーバが落ちたりするとデータ欠損につながるので、おすすめはしない。
% gcloud pubsub subscriptions pull mysub --auto-ack

▷ gcloud pubsub subscriptions ack … メッセージを ack する
一度 pull したメッセージは消えてしまうわけではなく、ack deadline (デフォルト 10秒) の間、見えなくなるだけ。完全に処理が終了し、メッセージを消すのが ack。--ack-ids オプションには、pull 時に取得した ACK_ID を指定する。
% gcloud pubsub subscriptions ack mysub --ack-ids=Ekw(略)V5A
Acked the messages with the following ackIds: [Ekw(略)V5A]
{}

▷ gcloud beta pubsub topics add-iam-policy-binding
PubSub トピックとサブスクリプションに対する権限設定。
% gcloud beta pubsub topics add-iam-policy-binding my-topic \\
--member="serviceAccount:my-sa@myproject.iam.gserviceaccount.com" \\
--role="roles/pubsub.publisher"
→ サービスアカウント my-sa が、トピック my-topic に対してパブリッシュできるように
% gcloud beta pubsub subscriptions add-iam-policy-binding my-subscription --member="serviceAccount:my-sa@myproject.iam.gserviceaccount.com" --role="roles/pubsub.subscriber"
→ サービスアカウント my-sa が、サブスクリプション my-subscription から pull できるように

gcloud services … GCP のサービス有効無効を管理する
ここで言うサービスとは、Compute Engine・BigQuery・Cloud SQL などの GCP サービスのこと。
▷ gcloud services list … 有効または利用可能なサービス一覧を表示する
デフォルトでは、有効になっているサービスのみ表示する。
% gcloud services list
NAME                              TITLE
bigquery-json.googleapis.com      BigQuery API
cloudapis.googleapis.com          Google Cloud APIs
clouddebugger.googleapis.com      Stackdriver Debugger API
cloudtrace.googleapis.com         Stackdriver Trace API
(略)
有効無効にかかわらず、利用可能なサービス一覧を表示するには --available オプションを指定する。
% gcloud services list --available
▷ gcloud services enable … サービスを有効化する
gcloud service list --available で使いたいサービスを探し、enable で有効化する。
% gcloud services enable storagetransfer.googleapis.com
Operation "operations/acf.124b037a-da2d-4fd1-a8f8-c3e8831061fd" finished successfully