はじめに
ローカルPCからAWS CLIを利用して、EKSクラスタのワーカーノードであるEC2インスタンスを起動・停止します。
検証環境など、コスト削減のため、利用しない時はEC2インスタンスを停止にすると思いますが、AWS CLIで変更します。
予めjqをインストールして奥必要があります。
スクリプト
1. EKSクラスタのワーカーノードであるEC2インスタンスを起動する
start_cluster_nodes.sh
#!/bin/sh
cd `dirname $0`
CLUSTER_NAME=[クラスタ名]
AUTO_SCALING_GROUP_NAME=$(aws autoscaling describe-auto-scaling-groups --query 'AutoScalingGroups[?contains(Tags[?Key==`eks:cluster-name`].Value, `'${CLUSTER_NAME}'`)].AutoScalingGroupName' | jq -r '. | tostring' | sed -e 's/\[//' -e 's/\]//' -e 's/\"//g' )
EC2_INSTANCE_IDS=($(aws ec2 describe-instances --filter "Name=tag:eks:cluster-name,Values=${CLUSTER_NAME}" --query "Reservations[].Instances[].InstanceId" | jq -r '. | tostring' | sed -e 's/\[//' -e 's/\]//' -e 's/\"//g' -e 's/,/ /g'))
for instance_id in ${EC2_INSTANCE_IDS[@]}; do
aws ec2 start-instances --instance-ids ${instance_id}
aws autoscaling attach-instances --instance-ids ${instance_id} \
--auto-scaling-group-name ${AUTO_SCALING_GROUP_NAME}
done
2. EKSクラスタのワーカーノードであるEC2インスタンスを停止する
stop_cluster_nodes.sh
#!/bin/sh
cd `dirname $0`
CLUSTER_NAME=[クラスタ名]
AUTO_SCALING_GROUP_NAME=$(aws autoscaling describe-auto-scaling-groups --query 'AutoScalingGroups[?contains(Tags[?Key==`eks:cluster-name`].Value, `'${CLUSTER_NAME}'`)].AutoScalingGroupName' | jq -r '. | tostring' | sed -e 's/\[//' -e 's/\]//' -e 's/\"//g' )
EC2_INSTANCE_IDS=($(aws ec2 describe-instances --filter "Name=tag:eks:cluster-name,Values=${CLUSTER_NAME}" --query "Reservations[].Instances[].InstanceId" | jq -r '. | tostring' | sed -e 's/\[//' -e 's/\]//' -e 's/\"//g' -e 's/,/ /g'))
for instance_id in ${EC2_INSTANCE_IDS[@]}; do
aws autoscaling detach-instances --instance-ids ${instance_id} \
--auto-scaling-group-name ${AUTO_SCALING_GROUP_NAME} --should-decrement-desired-capacity
aws ec2 stop-instances --instance-ids ${instance_id}
done