gcloudコマンド(GCP)で複数のプロジェクトとアカウントの使い分けを便利に

こんにちは、インフラエンジニアの天津です。

最近年を取ったせいか、エレベータで行き先階を間違えることがあります。
そんなときは、エレベータの行先階ボタンはダブルタップで取り消しができる場合があります。
これで加齢も怖くありませんね。

さて小ネタはこのへんで、今回はGCP SDKのgcloudコマンドにおける、
複数プロジェクトやアカウント間の設定切り替えについてお話しします。

gcloudコマンドでのGCPプロジェクト/アカウントの設定

gcloud コマンドでGCPのプロジェクト/アカウントを設定する場合は下記のコマンドを使用します。

# プロジェクト
gcloud config set project {project_name}
# アカウント
$ gcloud config set account {account_name}

※アカウントは初回のみ下記を実行してactivate する必要があります。

# アカウント(IAMアカウント)
$ gcloud auth login 
# アカウント(サービスアカウント)
$ gcloud auth activate-service-account {service_account_name} --key-file {service_account_credential_file}

インフラ担当としてはGCPなどクラウド環境で複数プロジェクトやアカウントを
管理することが多く、毎回上記コマンドを使用するのは面倒です。
また管理対象が多くなると、切り替えたいときにコマンドやアカウント名が
パッとでてこない場合もあります。
そこで、もっと楽な方法はないか探してみました。

gcloud のconfig 管理

実はgcloud には複数プロジェクト/アカウントの設定管理の仕組みがありました。
gcloud config configurations

プロジェクトとアカウントをセットにして登録ができます。

作り方ですが、下記を作成する場合、まず名前付きconfigを作成します。箱を用意するイメージです。
config名は見分けが付きやすいようアカウント名とプロジェクト名をつけておくのをオススメします。

  • config名
    • config-baz-foo
  • アカウント
    • foo@bar.com
  • プロジェクト名
    • baz

では作成してみましょう。

# config セットの作成
$ gcloud config configurations create config-baz-foo
Created [config-baz-foo].
Activated [config-baz-foo].

その箱に対してプロジェクト、アカウントをセットします。

# プロジェクト
$ gcloud config set project baz
Updated property [core/project].
# アカウント
$ gcloud config set account foo@bar.com
Updated property [core/account].

これで完成です。

作成したconfig に切り替えるときは下記のコマンドを実行します。

$ gcloud config configurations activate config-baz-foo
Activated [config-baz-foo].

確認してみましょう。

$ gcloud config configurations list
NAME                 IS_ACTIVE  ACCOUNT         PROJECT              DEFAULT_ZONE       DEFAULT_REGION
config-baz-foo       True       foo@bar.com     baz

IS_ACTIVEカラムがTrue になっているのが現在有効な設定です。
正しく変更されていますね。

デフォルトゾーンやデフォルトリージョンも設定できるので必要に応じて設定してみてください。

さらに便利に

これで使用するプロジェクトやアカウントで名前をつけて保存しておけば切り替えが楽になりますね。
私はさらに便利にするため、pecoを組み合わせた簡単なzshスクリプトを書いています。

# gconf.zsh
function gconf() {
  projData=$(gcloud config configurations list | peco)
  if echo "${projData}" | grep -E "^[a-zA-Z].*" > /dev/null ; then
    config=$(echo ${projData} | awk '{print $1}')
    gcloud config configurations activate ${config}
    
    echo "=== The current account is as follows ==="
    gcloud config configurations list | grep "${config}"
  fi
}

これでgcloudの長いコマンドをド忘れしても大丈夫。
ねらったプロジェクトとアカウントに切り替えができます。

f:id:AdwaysEngineerBlog:20180606225044g:plain

まとめ

今回はgcloudのプロジェクト/アカウント設定の切り替えについてご紹介しました。
実際の運用では作業先を間違えないようtmux のステータスやシェルのプロンプトなどに
現在のプロジェクト、アカウントを表示すればさらに便利になると思います。

また機会があればそのあたりについてもお話ししたいと思います。
それではまた!