👋
Amazon ECSのタスクIDからECSクラスタを特定するスクリプト
ECSクラスタ名を知りたい
先日 [Retirement Notification] Amazon ECS (Fargate) task scheduled for termination
という件名のメールがAWSから来ました。ホストしている基盤が劣化しているために一部のFargateタスクを終了するよという内容です。以下に一部を抜粋します。
Dear Amazon ECS customer,
We have time-sensitive information that may affect your applications for your account (AWS Account ID: 123456789012).
We have detected degradation of the underlying infrastructure hosting your Fargate task (Task-ID: arn:aws:ecs:ap-northeast-1:123456789012:task/abcdefghijklmnopqrstuv1234567890) in the ap-northeast-1 region. Due to this degradation, your task could already be unreachable. After Wed, X Feb 2022 YY:MM:SS GMT, your task will be terminated.
このタスクID arn:aws:ecs:ap-northeast-1:123456789012:task/abcdefghijklmnopqrstuv1234567890
がどこのECSクラスタで動いているのかがメール文面からわかりません。
describe-tasks
コマンドでECSタスクを調べることができますが、--cluster
オプションを指定しない場合はデフォルトクラスタを指定されるため、ECSクラスタがわからないと調べることができません。
$ aws ecs describe-tasks --tasks arn:aws:ecs:ap-northeast-1:123456789012:task/abcdefghijklmnopqrstuv1234567890
{
"tasks": [],
"failures": [
{
"arn": "arn:aws:ecs:ap-northeast-1:123456789012:task/abcdefghijklmnopqrstuv1234567890",
"reason": "MISSING"
}
]
}
そこでECSクラスタ一覧を取得し、ECSタスクが存在するかを1つずつチェックすることでECSクラスタを調べることにしました。
スクリプト
シェルスクリプトを置いておきます。AWS CLIとjqが必要です。
# search_ecs_cluster.sh
#!/bin/bash -u
task_id=$1
clusters=$(aws ecs list-clusters --query 'clusterArns' --output text)
for cluster_arn in $(aws ecs list-clusters --query 'clusterArns' --output text)
do
tasks=$(aws ecs describe-tasks --cluster $cluster_arn --tasks $task_id --query 'tasks' 2> /dev/null)
if [ $? -ne 0 ]; then
continue
fi
if [ $(echo $tasks | jq '. | length') -gt 0 ]; then
echo "Cluser: $(echo $cluster_arn | sed -e 's/^arn.*:cluster\/\(.*\)$/\1/')"
echo "Service: $(echo $tasks | jq -r '.[].group' | sed -e 's/^service:\(.*\)$/\1/')"
break
fi
done
実行する場合はECSタスクIDを引数に指定します。
# ARNを指定する場合
$ ./search_ecs_cluster.sh arn:aws:ecs:ap-northeast-1:123456789012:task/abcdefghijklmnopqrstuv1234567890
# タスクIDのみを指定する場合
$ ./search_ecs_cluster.sh abcdefghijklmnopqrstuv1234567890
Cluser: foo_cluster
Service: bar_service
Discussion