🪖

pecoを活用してzshでのAWSプロファイル切り替えを効率化する

2024/08/24に公開

インタラクティブなフィルタリングツールのpecoを活用して、zshでのAWSプロファイルの切り替えを効率化しました。

背景と課題

AWS CLIでは、credentialsファイルに複数の名前付きプロファイルを保存できます。

~/.aws/credentials
[default]
aws_access_key_id=EXAMPLE
aws_secret_access_key=EXAMPLEKEY
[user1]
...
[user2]
...
[user3]
...

このプロファイルを切り替えるときは、以下のようにして環境変数を設定するか、コマンドに--profileオプションを追加して実行します。

$ export AWS_PROFILE=user1
または
$ aws ec2 describe-instances --profile user1

複数のプロファイルを切り替えながら作業する場合、zshの補完が効いたとしても、切り替えが少し面倒です。

ゴール

インタラクティブなフィルタリングツールのpecoを活用して、AWSプロファイルをインタラクティブに選択できるようにします。


pecoの動作イメージ。上下キーでプロファイルを選択できる

設定方法

環境

  • zshにpecoを導入済みであること。
  • AWSプロファイル情報をcredentialsファイルに保存済みであること。

手順

aws configure list-profilesコマンドを利用すると、プロファイル名を一覧表示できます。

$ aws configure list-profiles
default
user1
user2
user3

これをパイプでpecoに渡すと、プロファイル名をインタラクティブに選択できます。

$ aws configure list-profiles | peco
QUERY> user                              IgnoreCase [3 (1/1)]
user1
user2
user3

この仕組みを利用して、選択したプロファイルに切り替えられるように設定します。~/.zshrcに以下のような設定を追加します。

.zshrc
# aws profileの補完
function peco-aws () {
  local selected_profile=$(aws configure list-profiles | peco --query "$LBUFFER")
  if [ -n "$selected_profile" ]; then
    BUFFER="export AWS_PROFILE=${selected_profile} export RPROMPT=AWS:${selected_profile}"
    zle accept-line
  fi
  zle clear-screen
}
zle -N peco-aws
bindkey '^g^a' peco-aws

これで、ターミナル上でCtrl+GAを入力することでpecoを起動できるようになります。選択中のプロファイルを右プロンプトに表示させるようにしています。


プロファイルを選択した後の画面

ただ、aws configure list-profilesの実行に数秒程度かかる場合があり、pecoの実行にタイムラグが生じてしまうのが難点です。

おまけ

AWSコンソール上でスイッチロールする際は、Chrome拡張を使って切り替えできるようにしています。こちらもオススメです。

https://oji-cloud.net/2021/02/10/post-5968/

参考文献

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-profiles.html

https://qiita.com/reireias/items/fd96d67ccf1fdffb24ed

https://www.wakuwakubank.com/posts/862-mac-zsh-peco/#index_id5

GitHubで編集を提案

Discussion