2023年1月21日土曜日

pecoでecsexecしてみる


ecsexec については、下記URL参照。


peco でECSタスクをメニュー表示して選択し、ecsexec してコンテナに入れるようにします。


下記を ~/.bashrc などに記述します。

ecsexec() {
  if [ $# -eq 0 ]; then
    echo "usage: ecsexec <cluster name>"
    return
  fi

  local cluster=$1
  local tasks=$(aws ecs list-tasks --cluster $cluster --query 'taskArns[]' --output text | tr "\t" " ")
  local w_task=$(aws ecs describe-tasks \
      --cluster $cluster \
      --tasks $tasks \
      --output json \
      |jq -r '.tasks[]|{group:.group,name:.containers[].name,runtimeId:.containers[].runtimeId}' \
      | jq -r -s 'map(map(.)) as $rows|$rows[]|@csv' \
      | sort \
      | peco)
  local svc=$(echo $w_task| awk -F, '{print $1}'| cut -d':' -f2| tr -d '"')
  local task=$(echo $w_task| awk -F, '{print $3}'| cut -d'-' -f1| tr -d '"')
  local container=$(echo $w_task| awk -F, '{print $2}'| tr -d '"')
  echo "*************************************************"
  echo "cluster  : $cluster"
  echo "service  : $svc"
  echo "task     : $task"
  echo "container: $container"
  echo "*************************************************"

  aws ecs execute-command \
  --cluster $cluster \
  --task $task \
  --container $container \
  --interactive --command "/bin/sh"
}


ターミナルで "ecsexec <クラスタ名>" と入力して実行すると、下図のようにECSタスクが表示されるので選択します。

メニューには、「サービス名」、「コンテナ名」、「ECSタスクのruntimeId(task-id含む)」が表示されます。




ecsexecが成功してコンテナに入ると、下図のように表示されます。