Skip to content

Instantly share code, notes, and snippets.

@i97506051502
Last active August 29, 2015 13:57
Show Gist options
  • Save i97506051502/9644375 to your computer and use it in GitHub Desktop.
Save i97506051502/9644375 to your computer and use it in GitHub Desktop.
start_instances.sh は,引数に渡したサーバーリスト内の EC2 インスタンスを「順番に」起動します。サーバーリストには Name タグの Value を列挙します。
#!/bin/sh
# Check number of variables.
if [ $# != 1 ]
then
echo 'Usage:'
echo './start_instances.sh servers.list'
exit 255
fi
#
# Variables
#
NUMBER_OF_SERVERS=`cat ${1} | grep "" -c`
# Create variables below
# SERVER_0?
# ID_SERVER_0?
i=1
while read LINE
do
export SERVER_0${i}=`echo ${LINE}`
export SERVER_NAME=`eval echo '$'{SERVER_0"$i"}`
export ID_SERVER_0${i}=`aws ec2 describe-instances --filters "Name=tag-value,Values=${SERVER_NAME}" | jq '.Reservations[].Instances[].InstanceId' | cut -c 2-11`
let i=i+1
done < ${1}
#
# functions
#
function start_ec2_instance() {
IF_RUNNING=`aws ec2 describe-instance-status --instance-ids ${1} | jq '.InstanceStatuses[].InstanceState[]' | head -1`
if [ "${IF_RUNNING}" = \"running\" ]
then
echo ${2} has already started.
else
aws ec2 start-instances --instance-ids ${1} 1>/dev/null
if [ ${?} = 0 ]
then
echo start ${2}.
else
echo Some Error Occured in starting ${2}.
fi
fi
}
function check_if_running_ec2_instance() {
# if running
IF_RUNNING=`aws ec2 describe-instance-status --instance-ids ${1} | jq '.InstanceStatuses[].InstanceState[]' | head -1`
# if passed (1/2) System Status Checks
IF_PASSED_1=`aws ec2 describe-instance-status --instance-ids ${1} | jq '.InstanceStatuses[].SystemStatus.Details[] | select(.Name == "reachability") | .Status'`
# if passed (2/2) Instance Status Checks
IF_PASSED_2=`aws ec2 describe-instance-status --instance-ids ${1} | jq '.InstanceStatuses[].InstanceStatus.Details[] | select(.Name == "reachability") | .Status'`
if [ "${IF_RUNNING}" = \"running\" -a "${IF_PASSED_1}" = \"passed\" -a "${IF_PASSED_2}" = \"passed\" ]
then
echo ${2} started.
break
else
sleep 5
echo ${2} is starting...
fi
}
#
# main
#
for i in `seq 1 ${NUMBER_OF_SERVERS}`
do
export INSTANCE_ID=`eval echo '$'{ID_SERVER_0"$i"}`
export SERVER_NAME=`eval echo '$'{SERVER_0"$i"}`
start_ec2_instance ${INSTANCE_ID} ${SERVER_NAME}
while true
do
check_if_running_ec2_instance ${INSTANCE_ID} ${SERVER_NAME}
done
let i=i+1
done
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment