Closed2

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

mirabulemirabule

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を使用しています。
mirabulemirabule

使用方法

ECSクラスタ名を指定して、下記のように実行します。

ecsexec stacks-ecs-services-cluster

すると、下図のようにfzfにコンテナのリストが表示されます。

リストでコンテナを選択すると、コンテナに入れます。

このスクラップは3ヶ月前にクローズされました