新しいことにはウェルカム

技術 | 電子工作 | ガジェット | ゲーム のメモ書き

Google Cloud SDK(gcloud)で複数アカウント・プロジェクトを切り替える方法

Google Cloud Platformに新しいプロジェクトを追加したので、Google Cloud SDK(gcloud CLI)でプロジェクトを切り替えられるように設定しました。

一度設定してしまうといじることはなく、このままだとやり方忘れてしまうので、自分用に設定方法をメモしておきます。

必要情報

gcloudコマンドを実行するのに必要な情報は、下記の4つです。

  • アカウント
  • プロジェクト
  • リージョン
  • ゾーン

リージョンとゾーンは必須ではないのですが、gcloudの初期設定コマンドgcloud initでも聞かれる項目なので、設定しておきます。

gcloudでは、これらの設定値を、1つのConfigとしてセットにして保持していて、gcloudコマンド実行時には、そのConfigから値を取り出して適用されます。

なので、複数アカウント・プロジェクトの切り替えは、そのConfigのアカウント・プロジェクトを書き換えることにより行えます。

しかし、gcloudには、複数のConfigを定義して、それを切り替える機能があるので、ここでは、切り替えたいだけのConfigを作成し、それぞれのConfigにアカウント・プロジェクトを設定し、アクティブなConfigを切り替えることにより、複数アカウント・プロジェクトを切り替える方法を用いました。

アカウント登録

gcloudにアカウントを登録します。

GCPのアカウントには「ユーザーアカウント」と「サービスアカウント」の2種類があり、それぞれの違いとgcloudへの登録方法は下記になります。

  • ユーザーアカウント
    • いわゆるGoogleアカウントのこと
    • gcloud auth loginで登録
  • サービスアカウント
    • GCPのIAMで任意に新規追加できるアカウント
    • gcloud auth activate-service-account --key-file=[KEY_FILE}で登録

ユーザーアカウントはもちろんのこと、サービスアカウントも、プロジェクトをまたいで他のプロジェクトにアクセスできます。

そのあたりの解説は下記にまとめました。

www.kwbtblog.com

gcloudにアカウントを登録すると、アカウントの認証情報は~/config/gcloud以下にコピーされるので、以降はログインやキーファイル無しでgcloudからプロジェクトにアクセスできるようになります。

アカウント一覧

gcloud auth list

Config追加

最初は「default」Configしかないので、切り替え用にConfigを追加します。

gcloud config configurations create [Config名]

Config一覧

gcloud config configurations list

アクティブなConfigに切り替え

gcloud config configurations activate [Config名]

Config設定

追加したConfigに、前述の4つの情報「アカウント」「プロジェクト」「リージョン」「ゾーン」を設定します。

設定したいConfigをアクティブにして、下記コマンドを実行します。

gcloud config set account [アカウント名]
gcloud config set project [プロジェクトID]
gcloud config set compute/region [リージョン名]
gcloud config set compute/zone [リージョン名]

リージョンとゾーン一覧はこちら

Config設定確認

gcloud config list

Config削除

削除したいConfigを非アクティブにして下記を実行します。

gcloud config configurations delete [Config名]

ユーザー・アカウント切り替え

では本題のユーザー・アカウント切り替えにいきます。

方法1)アクティブなConfigを切り替える

アクティブなConfigを切り替えて、gcloudコマンドを実行します。

gcloud config configurations activate [Config名]

方法2)Configを指定する

gcloudコマンドで、使用するConfigを指定することもできます。

gcloud [コマンド] --configuration=[Config名]

方法3)Configを自動切り替えする

環境変数「CLOUDSDK_ACTIVE_CONFIG_NAME」でConfigを指定することもできます。

Configを切り替えて忘れて、違うプロジェクトを編集してしまうことはありがちなので、Googleのドキュメントにあるように、 direnvを使って、フォルダ毎に環境変数「CLOUDSDK_ACTIVE_CONFIG_NAME」が変わるようにして、Configを自動切り替えするようにしました。

direnvインストール

sudo apt-get install direnv

.bashrc

eval "$(direnv hook bash)"

direnv設定

「.envrc」ファイルに環境変数「CLOUDSDK_ACTIVE_CONFIG_NAME」を記載すると、そのフォルダ配下は指定したConfigになります。

.envrc

export CLOUDSDK_ACTIVE_CONFIG_NAME=[Config名]

gcloud設定情報保存場所

アカウント認証情報、Configデータなど、gcloudの設定情報は~/.config/gcloudに保存されているので、 他のPCにgcloudの設定を持っていいくには、このフォルダをコピーすれば行えます。

感想など

今回初めて知りましたが「direnv」便利ですね。docker-composeのプロジェクト名の設定をよく忘れるのですが、「COMPOSE_PROJECT_NAME」 で自動設定できそうです。