gcloud でアカウントやプロジェクトを切り替える

Google Cloud SDK の gcloud で複数のプロジェクトを切り替えたり、さらには複数アカウントを切り替えながら使う方法を調べた。

gcloud init

gcloud init としてブラウザで OAuth2 認証して、プロジェクトとデフォルトのゾーンを選択して設定が作成される。

これは default という configuration が作られていて gcloud config configurations list で確認することができる。gcloud の設定ファイルは ~/.config/gcloud 配下に作られている。

$ gcloud config configurations list
NAME     IS_ACTIVE  ACCOUNT               PROJECT            DEFAULT_ZONE       DEFAULT_REGION
default  True       **********@gmail.com  my-project-******  asia-northeast1-b  asia-northeast1

ここで表示されている格値は gcloud config get-value で確認できる。

$ gcloud config get-value account
**********@gmail.com

$ gcloud config get-value project
my-project-****

$ gcloud config get-value compute/zone
asia-northeast1-b

$ gcloud config get-value compute/region
asia-northeast1

region や zone はサービスごとの設定の様で上の DEFAULT_ZOONE, DEFAULT_REGION は compute のものである。他は us になってたり未指定だったりする。

$ gcloud config get-value functions/region
us-central1

$ gcloud config get-value run/region  
(unset)

アカウント

認証済みのアカウントは gcloud auth list で確認できる。

$ gcloud auth list
   Credentialed Accounts
ACTIVE  ACCOUNT
*       **********@gmail.com

To set the active account, run:
    $ gcloud config set account `ACCOUNT`

ここで gcloud auth login とすれば別のアカウントも追加することができ、その後アカウントを切り替えながら使うことができる。

gcloud auth list                    
   Credentialed Accounts
ACTIVE  ACCOUNT
        **********@gmail.com
*       xxxxxxxxxx@example.com

To set the active account, run:
    $ gcloud config set account `ACCOUNT`

gcloud auth login すると次のような warning が表示された。gsutil とかアプリで使うための json のやつが必要な場合は別途コマンド実行してねということのよう。

WARNING: `gcloud auth login` no longer writes application default credentials.
If you need to use ADC, see:
  gcloud auth application-default --help

ところで、gcloud auth login で新たに別アカウントでログインしたら default 設定のアカウントが切り替わってしまった。

$ gcloud config configurations list
NAME     IS_ACTIVE  ACCOUNT                 PROJECT            DEFAULT_ZONE       DEFAULT_REGION
default  True       xxxxxxxxxx@example.com  my-project-******  asia-northeast1-b  asia-northeast1

これは gcloud config set で変更することができる。

$ gcloud config set account **********@gmail.com
Updated property [core/account].

が、私の欲しいのはこれじゃないんですね。アカウントとプロジェクトをセットにして切り替えたい。

使わなくなったアカウントは revoke で削除することができます。

gcloud auth revoke [ACCOUNTS ...] [--all] [GCLOUD_WIDE_FLAG ...]

アカウントを省略すると今 active になっているアカウントが revoke されます。

gcloud config configurations

前項の「アカウントとプロジェクトをセットにして切り替えたい」を実現するための仕組みが configurations でした。

$ gcloud config configurations       
ERROR: (gcloud.config.configurations) Command name argument expected.

Available commands for gcloud config configurations:

      activate                Activates an existing named configuration.
      create                  Creates a new named configuration.
      delete                  Deletes a named configuration.
      describe                Describes a named configuration by listing its
                              properties.
      list                    Lists existing named configurations.

For detailed information on this command and its flags, run:
  gcloud config configurations --help

create で新しいのを作って activate で切り替えます。

tutorial という configuration を作ってみます。

$ gcloud config configurations create tutorial
Created [tutorial].
Activated [tutorial].

新しく作られた物が active になっていますが、--no-activate をつけて実行すればこれは抑制できます。

$ gcloud config configurations list
NAME      IS_ACTIVE  ACCOUNT               PROJECT            DEFAULT_ZONE       DEFAULT_REGION
default   False      **********@gmail.com  my-project-******  asia-northeast1-b  asia-northeast1
tutorial  True

でも新しく作った方でアカウントやプロジェクトを指定するので active になってくれた方が便利かな。

$ gcloud auth list
$ gcloud config set account xxxxxxxxxx@example.com

$ gcloud projects list | grep tutorial
$ gcloud config set project tutorial-xxxxxxx

$ gcloud compute zones list | grep asia-northeast
$ gcloud config set compute/zone asia-northeast1-b
$ gcloud config set compute/region asia-northeast1

これで次の様になる。

$ gcloud config configurations list               
NAME      IS_ACTIVE  ACCOUNT                 PROJECT            DEFAULT_ZONE       DEFAULT_REGION
default   False      **********@gmail.com    my-project-******  asia-northeast1-b  asia-northeast1
tutorial  True       xxxxxxxxxx@example.com  tutorial-xxxxxxx   asia-northeast1-b  asia-northeast1

後は gcloud config configurations activate xxx で切り替えることができる。project id が覚えにくくても好きな名前をつけて切り替えられるし、プロジェクトによって region が違っても一緒に切り替えられる。

Built with Hugo
テーマ StackJimmy によって設計されています。