AWS CLI를 사용하여 EC2 인스턴스의 상태 확인 및 시작을 중지하는 셸 구현 예
4896 단어 ShellScriptawscliEC2
EC2의 Name 태그에서 인스턴스 ID 확인
HOST="server-1"
INSTANCE_ID=`aws ec2 describe-tags \
--filters \
"Name=resource-type,Values=instance" \
"Name=key,Values=Name" \
"Name=tag-key,Values=Name" \
"Name=tag-value,Values=${HOST}" \
--query "Tags[*].{InstanceId:ResourceId}" \
--output text`
echo "hostname: ${HOST}"
echo "instance-id: ${INSTANCE_ID}"
EC2 인스턴스 상태 확인(describe-instance-status)
아래에서 AWS 콘솔에서 볼 수 있는 상태를 확인 가능.
다만 인스턴스 정지시는 아웃풋은 Null가 되므로 정지시도 스테이터스를 취하고 싶으면 describe-instances 쪽을 사용하는 것이 좋다.
aws ec2 describe-instance-status --instance-ids ${INSTANCE_ID} --output table
결과는 이런 느낌.
이 근처를 참고로 query로 좁히기
htps : // 이 m/도키의 1985/에 ms/417483아 91b5682400150
$ aws ec2 describe-instance-status --instance-ids ${INSTANCE_ID} \
--query "[InstanceStatuses[*].{InstanceId:InstanceId}, \
InstanceStatuses[*].InstanceState[].{InstanceState:Name}, \
InstanceStatuses[*].InstanceStatus[].{InstanceStatus:Status}, \
InstanceStatuses[*].SystemStatus[].{SystemStatus:Status}]" \
--output json
[
[
{
"InstanceId": "i-99a9aa9a99999a00a"
}
],
[
{
"InstanceState": "running"
}
],
[
{
"InstanceStatus": "ok"
}
],
[
{
"SystemStatus": "ok"
}
]
]
EC2 인스턴스 상태 확인(describe-instances)
결과는 running 또는 stopped로 반환되므로 결과를 변수에 할당하고 if 문으로 분기
INSTANCE_STATE=`aws ec2 describe-instances --instance-ids ${INSTANCE_ID} \
--query "Reservations[].Instances[].State.Name" --output text`
if [ ${INSTANCE_STATE} == "running" ]; then
echo "Instance ${INSTANCE_ID} is running state"
elif [ ${INSTANCE_STATE} == "stopped" ]; then
echo "Instance ${INSTANCE_ID} is stopped state"
fi
EC2 인스턴스 중지
정지 명령 실행 후, 10초 간격으로 최대 30회 정지 상태가 된 것을 확인하는 스크립트.
${INSTANCE_ID} 는 사전에 취득되고 있는 것이 전제.
MAX_RETRY_NUM=30
CHECK_INTERVAL=10
aws ec2 stop-instances --instance-ids=${INSTANCE_ID}
if [ $? -ne 0 ]; then
echo "`date` Executing stop nstance ${INSTANCE_ID} (${HOST}) was failed."
exit 2
fi
RTN=0
i=0
while true
do
sleep ${CHECK_INTERVAL}
i=`expr $i + 1`
INSTANCE_STATE=`aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query "Reservations[].Instances[].State.Name" --output text`
if [ ${INSTANCE_STATE} == "stopped" ]; then
RTN=0
echo "Instance ${INSTANCE_ID} was stopped successfully."
break
fi
if [ ${i} -ge ${MAX_RETRY_NUM} ]; then
RTN=2
echo "Stopping instance ${INSTANCE_ID} was failed."
break
fi
echo "Waiting for stopped status"
done
echo ${RTN}
EC2 인스턴스 시작
기동 명령 실행 후, 10초 간격으로 최대 30회 정지 상태가 된 것을 확인하는 스크립트.
스테이터스 체크는 인스턴스의 상태 뿐만이 아니라 스테이터스 체크가 양쪽 모두 OK가 되어 있는 것을 확인해 종료.
${INSTANCE_ID} 는 사전에 취득되고 있는 것이 전제.
MAX_RETRY_NUM=30
CHECK_INTERVAL=10
aws ec2 start-instances --instance-ids=${INSTANCE_ID} >> ${LOG} 2>&1
if [ $? -ne 0 ]; then
echo "ERROR Executing start instance was failed."
exit 2
fi
RTN=0
i=0
while true
do
sleep ${INSTANCE_CHK_WAIT}
i=`expr $i + 1`
# Assign result to the positional parameters using "set --"
set -- `aws ec2 describe-instance-status --instance-ids ${INSTANCE_ID} \
--query "[InstanceStatuses[*].InstanceState[].{InstanceState:Name}, \
InstanceStatuses[*].InstanceStatus[].{InstanceStatus:Status}, \
InstanceStatuses[*].SystemStatus[].{SystemStatus:Status}]" \
--output text`
# Check if all status is ok
if [ "$1" == "running" ] && [ "$2" == "ok" ] && [ "$3" == "ok" ] ; then
RTN=0
echo "Start instance ${INSTANCE_ID} was executed sucessfully."
breadk
fi
# Error exit if retry count is exceeded
if [ ${i} -ge ${INSTANCE_CHK_RETRY} ]; then
RTN=2
echo "Start instance ${INSTANCE_ID} was failed."
breadk
fi
echo "Waiting for status check is ok"
done
echo ${RTN}
Reference
이 문제에 관하여(AWS CLI를 사용하여 EC2 인스턴스의 상태 확인 및 시작을 중지하는 셸 구현 예), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sugenuma/items/461ff92fe8247d4e3387텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)