ECS Execをちょっと便利にするスクリプト

稼働中のECSタスクを aws-cli で動的に取得し、稼働中のコンテナにECS Execを実行できるスクリプトのメモ。

前提

peco が必要

brew install peco

bashバージョン

Bash
#!/bin/bash function ecs-exec() { cluster_arn=$(aws ecs list-clusters | jq -r '.clusterArns[]' | peco --prompt 'cluster_arn > ') if [ -z "$cluster_arn" ]; then return fi service_arn=$(aws ecs list-services --cluster "$cluster_arn" | jq -r '.serviceArns[]' | peco --prompt 'service_arn > ') if [ -z "$service_arn" ]; then return fi task_arn=$(aws ecs list-tasks --cluster "$cluster_arn" --service-name "$service_arn" | jq -r '.taskArns[]' | peco --prompt 'task_arn > ') if [ -z "$task_arn" ]; then return fi container_name=$(aws ecs describe-tasks --cluster "$cluster_arn" --tasks "$task_arn" --query 'tasks[].containers[].name' | jq -r '.[]' | peco --prompt 'container_name > ') if [ -z "$container_name" ]; then return fi aws ecs execute-command \ --cluster "$cluster_arn" \ --task "$task_arn" \ --container "$container_name" \ --interactive \ --command "/bin/bash" }

fish shellバージョン

fish
#!/usr/local/bin/fish function ecs-exec set cluster_arn (aws ecs list-clusters | jq -r '.clusterArns[]' | peco --prompt 'cluster_arn > ') if [ -z "$cluster_arn" ] return end set service_arn (aws ecs list-services --cluster $cluster_arn | jq -r '.serviceArns[]' | peco --prompt 'service_arn > ') if [ -z "$service_arn" ] return end set task_arn (aws ecs list-tasks --cluster $cluster_arn --service-name $service_arn | jq -r '.taskArns[]' | peco --prompt 'task_arn > ') if [ -z "$task_arn" ] return end set container_name (aws ecs describe-tasks --cluster $cluster_arn --tasks $task_arn --query 'tasks[].containers[].name' | jq -r '.[]' | peco --prompt 'container_name > ') if [ -z "$container_name" ] return end aws ecs execute-command \ --cluster $cluster_arn \ --task $task_arn \ --container $container_name \ --interactive \ --command "/bin/bash" end