🥑

Terraform で GoogleCloud を触っているときに, 本番環境か開発環境かぱっと見でわかるようにした

2024/08/15に公開

結論

背景

個人開発で麻雀の成績管理アプリを作っています(ShanPon というアプリ名です)。インフラは GoogleCloud を使っており、開発環境と本番環境の 2 種類あります。開発中に terraform init やら apply やらを実行しますが、アレ今どっちのアカウントがアクティブなんだっけ?となることがあり、ちょっと怖い時がありました。なのでその都度 $ gcloud config list をして確認していました。

要件

  • Terraform を管理しているディレクトリの場合、GoogleCloud のどちらの環境でログインしているかを判別できるようにする
  • Terraform を管理しているディレクトリではない場合、GoogleCloud 関連の情報は表示しない

方針

Terminal を見やすくするために(そして開発中のテンションを上げるために)、 Starship を使ってます。これは簡単にいうと Terminal のプロンプトを便利に、そして自分好みにできちゃうやつです。
https://starship.rs/

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 名が入ってきます。

https://www.nerdfonts.com/cheat-sheet


次に detect_env_vars ですが、STARSHIP_ENABLED_GCLOUD という環境変数が読み込まれているディレクトリのみ starship の設定が発動するようにします。direnv を使って Terraform を管理しているディレクトリがカレントディレクトリになった時、この環境変数が読み込まれるようにしました。

https://github.com/direnv/direnv

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