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が成功してコンテナに入ると、下図のように表示されます。