Terraform で GoogleCloud を触っているときに, 本番環境か開発環境かぱっと見でわかるようにした
結論
背景
個人開発で麻雀の成績管理アプリを作っています(ShanPon というアプリ名です)。インフラは GoogleCloud を使っており、開発環境と本番環境の 2 種類あります。開発中に terraform init やら apply やらを実行しますが、アレ今どっちのアカウントがアクティブなんだっけ?となることがあり、ちょっと怖い時がありました。なのでその都度 $ gcloud config list
をして確認していました。
要件
- Terraform を管理しているディレクトリの場合、GoogleCloud のどちらの環境でログインしているかを判別できるようにする
- Terraform を管理しているディレクトリではない場合、GoogleCloud 関連の情報は表示しない
方針
Terminal を見やすくするために(そして開発中のテンションを上げるために)、 Starship を使ってます。これは簡単にいうと Terminal のプロンプトを便利に、そして自分好みにできちゃうやつです。
homebrew を使っている方は以下のコマンドでダウンロードできます。
$ brew install starship
ドキュメントを眺めてみると、Google Cloud 関連の設定ができることがわかったのでこれを使っていくことにしました。
設定
~/.config/starship.toml に設定していきます。
# Terminal の右側に出したいので right_format に値を渡す
right_format = """
$gcloud
"""
[gcloud]
symbol = ' '
style = 'fg:#F7F7F7 bg:#7E8EF1'
format = '[](fg:#7E8EF1)[$symbol$project]($style)[▓▒](#7E8EF1)'
detect_env_vars = ['STARSHIP_ENABLED_GCLOUD']
$symbol
にはNerdFontにあった Google Cloud のアイコンを設定してます。記事上だと四角になっちゃってますが、実際は以下のアイコンが設定してあります。また $project
ですが、ここに Google Cloud の project 名が入ってきます。
次に detect_env_vars
ですが、STARSHIP_ENABLED_GCLOUD
という環境変数が読み込まれているディレクトリのみ starship の設定が発動するようにします。direnv を使って Terraform を管理しているディレクトリがカレントディレクトリになった時、この環境変数が読み込まれるようにしました。
Terraform を管理しているディレクトリに .envrc
を作成し、以下のように環境変数を設定しました。
export STARSHIP_ENABLED_GCLOUD=true
最初はエラーが出ますが、エラーメッセージに出ているコマンドを叩いてあげ得ればOKです。
direnv: error /Users/xxx/.envrc is blocked. Run
direnv allow
to approve its content
表示してみる
Terraform 管理外ディレクトリ → Terraform 管理ディレクトリ(開発環境) → Terraform 管理外ディレクトリ
Terraform 管理外ディレクトリ → Terraform 管理ディレクトリ(本番環境) → Terraform 管理外ディレクトリ
まとめ
今回は Starship を使ってお手軽にアクティブになっている環境を認識できるようにしてみました。他にも region
や account
などの項目があるのでお好みで色々カスタマイズもできそうです。
Discussion