🎨

ssm接続先ごとにターミナルの背景色を変える

2024/05/30に公開

はじめに

AWS SSMでうっかり本番に接続して作業してしまったことはないでしょうか?
私はあります.
接続時に指定するのがインスタンスIDというのもあり,接続先を認識しづらいため,historyから過去実行したSSMを再実行するとうっかり違うインスタンスに接続してしまうことがよくあります.
本番と開発を間違えると場合によってはサービスに影響が出かねないので,本番に接続している時はもっと視覚的にわかるようにしておきたいと思い,接続先によってターミナルの背景色を変えてみることにしました.

方法

前提

  • iterm2
  • tmux
  • aws-vault

.zshrcに関数を定義

function start-ssm-session-color() {
    local PROFILE=$1
    local INSTANCE_ID=$2

    local DEFAULT_BACKGROUND_COLOR=$(tmux display -p "#{pane_bg}")
    local BACKGROUND_COLOR=DEFAULT_BACKGROUND_COLOR
    local CONFIG="${HOME}/.ssm_host_config"

    # 接続先の背景色が設定されていないか検索
    [[ -f "${CONFIG}" ]] && while read -r i; do
        [[ "${*}" =~ ${i%%,*} ]] && BACKGROUND_COLOR="${i//*,}"
    done < "${CONFIG}"

    # 接続先によって背景色を変更
    tmux select-pane -P "bg=${BACKGROUND_COLOR}"

    # SSMセッションを開始
    aws-vault exec $PROFILE -- aws ssm start-session --target $INSTANCE_ID

    # 背景色を元に戻す
    tmux select-pane -P "bg=${DEFAULT_BACKGROUND_COLOR}"
}

解説

処理を順番に見ていきます.

まず,後で元に戻すためにtmux display -p "#{pane_bg}"で現状の背景色を保存しておきます.local CONFIGには接続先と背景色の設定をしたファイルパスを定義しておきます(これはお好きな場所にしてください).

    local DEFAULT_BACKGROUND_COLOR=$(tmux display -p "#{pane_bg}")
    local BACKGROUND_COLOR=DEFAULT_BACKGROUND_COLOR
    local CONFIG="${HOME}/.ssm_host_config"

CONFIGに接続先と背景色の設定がされていないか検索します.
CONFIGにはinstance_id,color_codeが定義されているものとします.(具体例は後述の使用方法で説明します.)

    # 接続先の背景色が設定されていないか検索
    [[ -f "${CONFIG}" ]] && while read -r i; do
        [[ "${*}" =~ ${i%%,*} ]] && BACKGROUND_COLOR="${i//*,}"
    done < "${CONFIG}"

aws ssm start-session前後でtmuxのペインの背景色を変更しています.

    # 接続先によって背景色を変更
    tmux select-pane -P "bg=${BACKGROUND_COLOR}"

    # SSMセッションを開始
    aws-vault exec $PROFILE -- aws ssm start-session --target $INSTANCE_ID

    # 背景色を元に戻す
    tmux select-pane -P "bg=${DEFAULT_BACKGROUND_COLOR}"

使用方法

aws-vaultで設定しているプロファイルとEC2インスタンスIDを渡して実行します.

usage: start-ssm-session-color profile-name instance-id 

.ssm_host_configは以下のように設定しています.

i-xxxxxxxxxxxxxxxxx,#26453D
i-yyyyyyyyyyyyyyyyy,#64363C

(個人的な好みなのですが,カラーコードを探す際はNIPPON COLORSというサイトがいい味の色を揃えているのでよく使っています)

使用例.
左上: 開発用EC2インスタンスに接続. 
左下:本番EC2インスタンスに接続.
右:ローカル

結果

ぱっと視覚的に接続先がわかるようになったので,間違って本番に接続して気づかずに作業していたということはなくなりそうです.
本番さえ気をつけていればいいので,基本的には本番だけ背景色を変えるように設定して使っています.

Discussion