🪪

オレオレawspでサクッとAWS CLIのプロファイルを切り替える

2023/02/18に公開

オレオレawsp

AWS CLIのプロファイル切り替えといえばAWSP(AWS Profile Switcher)が定番ですが、何気にnode前提なのが面倒ということで大好きなfzfを使って自作してみました。

基本的にやってることは、プロファイルをリストして環境変数にセットするだけなのですが、ついでなので本家でちょっと不満だったところを改善。

  • 現在設定中のプロファイルを表示するようにした。
  • 選択時にプロファイルの設定内容を表示するようにした。
    • IAM Identity Center (旧AWS SSO) のトークンの期限切れ等も分かるようになった。
  • プロファイル設定を解除できるようにした。
    • プロファイルがいっぱいあっても~(チルダ)で一発選択可能。
% awsp
> 
  6/6 
  CURRENT PROFILE=N/A
  dev-admin
> dev-readonly
  lab-admin
  master
  security
  ~N/A

╭──────────────────────────────────────────────────────────────────────╮
│      Name                   Value           Type    Location         │
│      ----                   -----           ----    --------         │
│   profile            dev-readonly         manual    --profile        │
│access_key    ****************ZQhV            sso                     │
│secret_key    ****************6X39            sso                     │
│    region               us-west-2    config-file    ~/.aws/config    │
╰──────────────────────────────────────────────────────────────────────╯

前提環境

  • fzf
  • zsh(自分はzsh派なので確認してませんがbashでも動くんじゃないかな?)
  • GNU sed(Macの場合)
    • macOS標準のsedはBSD系でGNU版と挙動が違うのでcommand i expects \ followed by textみたいなエラーでコケます。
    • 自分はHomebrewとかでgnu-sed入れてaliasしてます。

セットアップ

コピペするか、GitHubに置いてある.zshrc.func.awspを.zshrcにインポートするだけです。

.zshrc.func.awsp
func awsp() {
    local profile=` \
    aws configure list-profiles | sed '/^default$/d' | sort -n | \
    sed -e "1iCURRENT PROFILE=${AWS_PROFILE:-N/A}" -e '$a~N/A' | \
    fzf --reverse --preview-window=down --header-lines=1 \
        --preview '[[ {} =~ ^~ ]] || aws configure list --profile {}' \
    `
    export AWS_PROFILE=${profile##\~*}
    [[ -n "$AWS_PROFILE" ]] || unset AWS_PROFILE
}

AWS CLIのプロファイル名に~(チルダ)を使う人はいないと思いますが(そもそも使えない?)、~(チルダ)は設定解除のショートカットに使用してるのでご注意ください。

Discussion