Closed2
fzfで選択したコンテナにecsexecするシェル

AWSの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 as $group | .taskArn as $taskArn | .containers[] | [$group, .name, .runtimeId, $taskArn] | @csv' |
sort | uniq |
fzf --tmux --reverse)
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"
}
このコードではfzfでコンテナをリスト表示して、選択したコンテナにecsexecしています。
- aws-cli, fzf, jqが必要です。
- 私は、tmuxを使用しているので、fzfの引数に--tmuxをつけています。
- bashが使用できないコンテナが多いので、/bin/shを使用しています。

使用方法
ECSクラスタ名を指定して、下記のように実行します。
ecsexec stacks-ecs-services-cluster
すると、下図のようにfzfにコンテナのリストが表示されます。
リストでコンテナを選択すると、コンテナに入れます。
このスクラップは3ヶ月前にクローズされました