💨

Go で作成した CLI でパラメータを利用できるようにする

2022/09/05に公開

課題

以前以下の Fargate タイプで起動しているコンテナへ接続する CLI を作成しました。
https://zenn.dev/gaji/articles/a98b74c5ddd5a8

この時は、特に不便なかったのですが、使っている内に接続対象の AWS プロファイル(以下プロファイル)の切り替えが若干億劫になってきました。

解決策

というのも、普段プロファイルの切り替えは、peco でプロファイル一覧を選択するスクリプトを、エイリアスに登録し利用していました。

export AWS_DEFAULT_PROFILE=$(grep "\[" ~/.aws/credentials \ | tr -d "[]" | peco)

作業中のプロファイルと別のプロファイルを利用したい時に、一度プロファイルを切り替えて(環境変数 AWS_DEFAULT_PROFILE に設定して)コマンドをタイプするのであれば、パラメータで指定した方が幾分早く作業が進むかなと思いました。

自分要件

  1. パラメータに指定されたプロファイルを優先する
  2. パラメータが指定されていなければ環境変数 AWS_DEFAULT_PROFILE に設定されたプロファイルを利用する
  3. 環境変数が設定されていなければ default プロファイルを利用する

実装

パラメータの利用については、デフォルト値の設定ができるという事もあり flag を利用する事にしました、ただ自分要件を満たすためにデフォルト値設定時に、環境変数が設定されているかを判定する必要があったので、力技で対応しました。
https://github.com/gajirou/fexec/blob/main/cmd/fexec.go#L18-L19
https://github.com/gajirou/fexec/blob/main/util/aws_util.go#L78-L87
-p パラメータでプロファイル名を指定するようにして、最終的に取得したプロファイル名から credencial 情報が取得できない場合は終了するようにしています。

homebrew でのインストールは以下です。

brew tap gajirou/fexec
brew install fexec

修正したコードは以下に上げています。
https://github.com/gajirou/fexec

まとめ

flag を利用したパラメータの実装を行いましたが、今後はパラメータを続々追加する事を想定したロジックに改良していこうと思います。

Discussion