gcloudとfzfを組み合わせてGCPプロジェクトを簡単に切り替える

Bash,GCP

はじめに

現職ではAWSよりもGCPにインフラリソースを多く配置しています。

gcloud コマンドを使って作業をする事が多いですが、更に最近ではGCPプロジェクトも複数またがって作業する事が増えてきました。

かんたんにGCPプロジェクトを切り替えられるかが作業の効率化のために重要です。

かんたんにGCPプロジェクトをスイッチし、Compute Engineインスタンスにssh接続するためのaliasを作成したので紹介します。

検証環境

$ uname -moi
x86_64 MacBookPro16,1 Darwin

$ bash -version | head -n 1
GNU bash, version 5.0.18(1)-release (x86_64-apple-darwin19.5.0)

$ gcloud --version | head -n 1
Google Cloud SDK 307.0.0
Updates are available for some Cloud SDK components.  To install them,
please run:

$ fzf --version
0.25.0 (brew)

準備

fzfコマンドのインストール

今回紹介するaliasを利用するためには、 fzfのインストールが必要です。
インストールしましょう。

MacOS + Homebrew をインストール済みの場合には導入が容易です。
インストール手順をGithubリポジトリページから抜粋します。

$ brew install fzf

# To install useful key bindings and fuzzy completion:
$ $(brew --prefix)/opt/fzf/install

*その他の環境でも、以下のコマンドでインストールできると書かれています。

$ git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
$ ~/.fzf/install

※確かな情報は Githubリポジトリ を確認ください。当エントリの内容も最新の情報と5日入りが生まれるかもわかりません。

gcloudコマンドのインストール

こちらも事前にインストールしておいてください。
( 詳しくは Google Cloud Platform のサイトを検索してください。 )

aliasを2つ紹介

fzfgcloud コマンドが使えるようになったら、以下のaliasを設定しましょう。

.bashrc.zshrc に記述しましょう。

fgcp エイリアス

GCPのプロジェクトを簡単に切り替えるためのaliasです。

改行する必要はないのですが、ワンライナーだと随分長くなってしまったので改行してあります。

alias fgcp="
  gcloud config configurations list \
    | awk '{ print \$1,\$3,\$4 }' \
    | column -t \
    | fzf --header-lines=1 \
    | awk '{ print \$1 }' \
    | xargs -r gcloud config configurations activate
"

静止画ですが、利用中は以下のようなイメージとなります。

fgcc エイリアス

GCPのプロジェクトを切り替えたあとに、Compute Engineにssh接続するためのaliasです。

こちらも改行する必要はないのですが、ワンライナーだと見にくいため改行しています。

(シングルクォートを内包するためにダブルクォートとシングルクォートのサンドイッチになっていて見にくい部分もありますが)

alias fgcc='
  for h in $(
    gcloud \
      compute instances list \
      | fzf --header-lines=1 \
      | awk '"'"'{ print $1"@"$2 }'"'"'
  ); do
    gcloud \
      beta compute ssh \
      --zone ${h##*@} ${h%%@*}
  done
'

ひとこと

fzf は大好きなツールの一つです。
これを知ってからの生産性は格段にアップしました。

aws コマンドや gcloud コマンドを使うと、あるいコマンドの実行結果をメモして次のコマンドの引数として使う、ということがザラにあるので、 fzf が大活躍します。

Bash,GCP