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}
で登録
ユーザーアカウントはもちろんのこと、サービスアカウントも、プロジェクトをまたいで他のプロジェクトにアクセスできます。
そのあたりの解説は下記にまとめました。
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」 で自動設定できそうです。