stefafafan の fa は3つです

"すてにゃん" こと id:stefafafan のブログです

AWS CLIでSSOログインしたプロファイル名を fish shell の prompt に表示したい

aws sso --profile foo-profile login とかでログインした後ログアウトを忘れたり、いまどのプロファイルでログイン中かとかが気になるようになってきた。ログアウト忘れてもしばらくしたら勝手にセッションは切れるけどなんとなく作業が終わったらすぐログアウトしてしまいたいと思った。

docs.aws.amazon.com

fish shell で対応してみる

コマンド実行後に何かをするというfunctionを定義することができるので*1、以下のようにコマンド実行後に正規表現で引っ掛けて変数にプロファイル名を保持するようにしてみた。

set -gx aws_sso_profile ''
function aws_sso_postexec --on-event fish_postexec
  set sso_logged_in (string match -r 'aws sso --profile ([0-9a-z_-]+) login' $argv[1])
  set sso_logged_out (string match -r 'aws sso logout' $argv[1])
  if set -q sso_logged_in[2]
    set -gx aws_sso_profile $sso_logged_in[2]
  end
  if set -q sso_logged_out[1]
    set -gx aws_sso_profile ''
  end
end

あとはfishのpromptをカスタマイズして、上で更新した aws_sso_profile 変数があれば表示する、みたいにする。

function fish_prompt --description 'Write out the prompt'
    # $aws_sso_profile 変数にプロファイル名が入っているか否かでpromptの表示を変える
    if string length -q -- $aws_sso_profile
        printf '%s%s%s%s%s%s%s[%s]%s $ ' (set_color green) $USER (set_color $fish_color_cwd) (prompt_pwd) (set_color normal) (fish_git_prompt) (set_color green) $aws_sso_profile (set_color normal)
    else
        printf '%s%s%s%s%s%s $ ' (set_color green) $USER (set_color $fish_color_cwd) (prompt_pwd) (set_color normal) (fish_git_prompt)
    end
end

この状態でsso loginしたりlogoutしたりするとスクショの感じになった。

sso login/logout で prompt が変わっている様子

なお、作りは素朴なので実際にプロファイルでログイン成功しているかどうかとか、セッションが持続しているかどうかなどは一切確認していないです(なのでスクショのように foo-profile が存在しなくてもpromptが変わっている)。