🕌

zshで入力中コマンド内のAWS_PROFILEを瞬時に変更する

に公開

普段ターミナルからaws cliやterraformでAWSを利用する時には必ずAWS_PROFILE環境変数を指定している。

AWS_PROFILE=foo terraform init

意図しないプロファイルが設定されていると誤操作の原因になるため個人的にやっている習慣なのだが、普段のオペレーションにおいてAWS_PROFILEを書き換えるのが手間という課題があった。シェルヒストリからコマンドを探してきて実行する際、実行対象のAWS_PROFILEが違う場合カーソル移動して変更が必要となる。たいした手間ではないがどうにかならないかなあと思っていたが、zshのウィジェットを使うことで解消することができた。

まずは操作の様子。ウィジェットはctrl-pに割り当てていて、実行するとfzfでプロファイルを選択できる。選択するとAWS_PROFILEが書き換わる。打ち間違いもなくなり、かなり便利である。

zshの設定は以下の通り。これ、いろいろ応用が効きそうなので考えてみたい。

aws-profile-widget() {
  local line="$BUFFER"
  local profile=$(aws configure list-profiles | fzf --height=10 --layout=reverse --prompt="AWS Profile: ")
  
  if [[ -n "$profile" ]]; then
    if [[ "$line" =~ "AWS_PROFILE=([^[:space:]]+)" ]]; then
      # Replace existing AWS_PROFILE
      BUFFER="${line/AWS_PROFILE=$match[1]/AWS_PROFILE=$profile}"
    else
      # Add AWS_PROFILE at the beginning if not exists
      BUFFER="AWS_PROFILE=$profile $line"
    fi
    CURSOR=$#BUFFER
  fi
  zle redisplay
}
zle -N aws-profile-widget
bindkey '^p' aws-profile-widget

Discussion