Alarm Modify
export PROJECT_NAME="apdev"
export ALARM_NAME=$(aws cloudwatch describe-alarms --query "MetricAlarms[?starts_with(AlarmName, 'TargetTracking-${PROJECT_NAME}-node-') && contains(AlarmName, 'AlarmLow')].AlarmName" --output text)
export ACTION_NAME=$(aws cloudwatch describe-alarms --alarm-names "$ALARM_NAME" --query "MetricAlarms[0].AlarmActions[0]" --output text)
export CLUSTER_NAME=$(aws cloudwatch describe-alarms --alarm-names "$ALARM_NAME" --query 'MetricAlarms[0].Dimensions[?Name==`ClusterName`].Value' --output text)
aws cloudwatch put-metric-alarm \\
--alarm-name "$ALARM_NAME" \\
--metric-name "CapacityProviderReservation" \\
--namespace "AWS/ECS/ManagedScaling" \\
--statistic "Average" \\
--period 60 \\
--evaluation-periods 1 \\
--datapoints-to-alarm 1 \\
--threshold 100 \\
--comparison-operator "LessThanThreshold" \\
--alarm-actions "$ACTION_NAME" \\
--dimensions "Name=CapacityProviderName,Value=EC2" "Name=ClusterName,Value=$CLUSTER_NAME" \\
--actions-enabled
ASG Modify
aws autoscaling put-lifecycle-hook \\
--lifecycle-hook-name ecs-managed-draining-termination-hook \\
--auto-scaling-group-name $(aws autoscaling describe-auto-scaling-groups \\
--query "AutoScalingGroups[?starts_with(AutoScalingGroupName, 'apdev-node')].AutoScalingGroupName" \\
--output text | head -1) \\
--heartbeat-timeout 300
Delete Processlist Script
#!/bin/bash
MYSQL_USER="admin"
MYSQL_PASSWORD="password"
MYSQL_HOST=$(aws rds describe-db-instances --query "DBInstances[?DBInstanceIdentifier=='apdev-rds-instance'].Endpoint.Address" --output text)
MYSQL_PORT="3307"
MYSQL_DBNAME="dev"
while :
do
mysql -h $MYSQL_HOST -u $MYSQL_USER -P $MYSQL_PORT -p$MYSQL_PASSWORD -D $MYSQL_DBNAME -e "SELECT * FROM information_schema.processlist WHERE COMMAND = 'Sleep' AND USER NOT LIKE '%rds%' AND USER NOT LIKE '%event_scheduler%';" | egrep 'Sleep|Lock' | awk '{print "kill "$1";"}' > /tmp/kill.txt
mysql -h $MYSQL_HOST -u $MYSQL_USER -P $MYSQL_PORT -p$MYSQL_PASSWORD -D $MYSQL_DBNAME < /tmp/kill.txt
mysql -h $MYSQL_HOST -u $MYSQL_USER -P $MYSQL_PORT -p$MYSQL_PASSWORD -D $MYSQL_DBNAME -e "SHOW processlist;"
sleep 60
done