1. Prod 환경 node process 정리
2. script 추가
This commit is contained in:
havelight-ee
2022-12-23 14:08:41 +09:00
parent eb5dedcd4d
commit 51e8a9cab7
23 changed files with 2955 additions and 143 deletions

View File

@@ -0,0 +1,102 @@
if [ -z "$BASH_VERSION" ]; then exec bash "$0" "$@"; exit; fi
#----------------------------------------------------------------------------------------------------------------
# 변수 선언
echo_line="=========================================================================="
search_tag="prod"
start_function="autoscailing_start_prod"
stop_function="autoscailing_stop_prod"
#----------------------------------------------------------------------------------------------------------------
# aws 인스턴스 조회
_get_aws_status (){
aws_query="Reservations[].Instances[].[ InstanceId, Tags[?Key=='Name'].Value|[0] ]"
aws_filter="Name=instance-state-name,Values=running"
current_ec2_num=`aws ec2 describe-instances --query "${aws_query}" --filter ${aws_filter} --output text | grep ${search_tag} | egrep -iv '(bastion|wireguard)' |wc -l`
}
#----------------------------------------------------------------------------------------------------------------
# log 출력
_get_time_log (){
datetime=`date +'%Y-%m-%d %H:%M:%S'`
string=$1
echo "[${datetime}] ${string}"
}
#----------------------------------------------------------------------------------------------------------------
# aws lambda 실행 후 인스턴스 조회하여 성공/실패 여부 체크
_main (){
lambda_function=$1
echo ${echo_line}
if [[ ${lambda_fuction} == *"stop"* ]]; then
what_func='stop'
else
what_func='start'
fi
_get_time_log "[INFO] aws lambda ${lambda_function} start"
aws lambda invoke --function-name ${lambda_function} --cli-binary-format raw-in-base64-out --payload '{ "key": "value" }' response.json > /tmp/aws_func_result
#echo "aws lambda invoke --function-name ${lambda_function} --cli-binary-format raw-in-base64-out --payload '{ "key": "value" }' response.json"
succ_flag=0
while read line
do
if [[ $line == *"200"* ]]; then
succ_flag=1
_get_time_log "[INFO] aws lambda ${lambda_function} success!"
break
else
succ_flag=0
fi
done < /tmp/aws_func_result
if [[ ${succ_flag} == 1 ]]; then
aws lambda invoke --function-name ${lambda_function} out --log-type Tail --query 'LogResult' --output text | base64 -d > /tmp/aws_func_output
if [[ ${what_func} == 'stop' ]]; then
final_ec2_num=0
else
final_ec2_num=`grep "Starting" /tmp/aws_func_output | wc -l`
fi
num=0
while true
do
_get_aws_status
num=`echo $(( $num + 1 ))`
if [[ ${current_ec2_num} == ${final_ec2_num} ]]; then
_get_time_log "[INFO] aws ${search_tag} instance number: ${final_ec2_num} check success!"
break
elif [[ ${num} == 30 ]]; then
_get_time_log "[Error] time out!"
break
else
_get_time_log "[Retry: ${num}] aws ${search_tag} instance number: ${final_ec2_num} checking..."
fi
sleep 5
done
else
echo ${echo_line}
_get_time_log "[Error] aws lambda ${lambda_function} failed!"
exit
fi
echo ${echo_line}
#---------------
}
#----------------------------------------------------------------------------------------------------------------
# 실행
_main ${stop_function}
_main ${start_function}
#----------------------------------------------------------------------------------------------------------------
# 임시 파일 삭제
unlink out
unlink response.json
unlink /tmp/aws_func_output
unlink /tmp/aws_func_result
#----------------------------------------------------------------------------------------------------------------

View File

@@ -0,0 +1,99 @@
if [ -z "$BASH_VERSION" ]; then exec bash "$0" "$@"; exit; fi
#----------------------------------------------------------------------------------------------------------------
# 변수 선언
echo_line="=========================================================================="
search_tag="prod"
start_function="autoscailing_start_prod"
#----------------------------------------------------------------------------------------------------------------
# aws 인스턴스 조회
_get_aws_status (){
aws_query="Reservations[].Instances[].[ InstanceId, Tags[?Key=='Name'].Value|[0] ]"
aws_filter="Name=instance-state-name,Values=running"
current_ec2_num=`aws ec2 describe-instances --query "${aws_query}" --filter ${aws_filter} --output text | grep ${search_tag} | egrep -iv '(bastion|wireguard)' |wc -l`
}
#----------------------------------------------------------------------------------------------------------------
# log 출력
_get_time_log (){
datetime=`date +'%Y-%m-%d %H:%M:%S'`
string=$1
echo "[${datetime}] ${string}"
}
#----------------------------------------------------------------------------------------------------------------
# aws lambda 실행 후 인스턴스 조회하여 성공/실패 여부 체크
_main (){
lambda_function=$1
echo ${echo_line}
if [[ ${lambda_fuction} == *"stop"* ]]; then
what_func='stop'
else
what_func='start'
fi
_get_time_log "[INFO] aws lambda ${lambda_function} start"
aws lambda invoke --function-name ${lambda_function} --cli-binary-format raw-in-base64-out --payload '{ "key": "value" }' response.json > /tmp/aws_func_result
#echo "aws lambda invoke --function-name ${lambda_function} --cli-binary-format raw-in-base64-out --payload '{ "key": "value" }' response.json"
succ_flag=0
while read line
do
if [[ $line == *"200"* ]]; then
succ_flag=1
_get_time_log "[INFO] aws lambda ${lambda_function} success!"
break
else
succ_flag=0
fi
done < /tmp/aws_func_result
if [[ ${succ_flag} == 1 ]]; then
aws lambda invoke --function-name ${lambda_function} out --log-type Tail --query 'LogResult' --output text | base64 -d > /tmp/aws_func_output
if [[ ${what_func} == 'stop' ]]; then
final_ec2_num=0
else
final_ec2_num=`grep "Starting" /tmp/aws_func_output | wc -l`
fi
num=0
while true
do
_get_aws_status
num=`echo $(( $num + 1 ))`
if [[ ${current_ec2_num} == ${final_ec2_num} ]]; then
_get_time_log "[INFO] aws ${search_tag} instance number: ${final_ec2_num} check success!"
break
elif [[ ${num} == 30 ]]; then
_get_time_log "[Error] time out!"
break
else
_get_time_log "[Retry: ${num}] aws ${search_tag} instance number: ${final_ec2_num} checking..."
fi
sleep 5
done
else
echo ${echo_line}
_get_time_log "[Error] aws lambda ${lambda_function} failed!"
exit
fi
echo ${echo_line}
#---------------
}
#----------------------------------------------------------------------------------------------------------------
# 실행
_main ${start_function}
#----------------------------------------------------------------------------------------------------------------
# 임시 파일 삭제
unlink out
unlink response.json
unlink /tmp/aws_func_output
unlink /tmp/aws_func_result
#----------------------------------------------------------------------------------------------------------------

View File

@@ -0,0 +1,100 @@
if [ -z "$BASH_VERSION" ]; then exec bash "$0" "$@"; exit; fi
#----------------------------------------------------------------------------------------------------------------
# 변수 선언
echo_line="=========================================================================="
search_tag="prod"
stop_function="autoscailing_stop_prod"
start_function="autoscailing_start_prod"
#----------------------------------------------------------------------------------------------------------------
# aws 인스턴스 조회
_get_aws_status (){
aws_query="Reservations[].Instances[].[ InstanceId, Tags[?Key=='Name'].Value|[0] ]"
aws_filter="Name=instance-state-name,Values=running"
current_ec2_num=`aws ec2 describe-instances --query "${aws_query}" --filter ${aws_filter} --output text | grep ${search_tag} | wc -l`
}
#----------------------------------------------------------------------------------------------------------------
# log 출력
_get_time_log (){
datetime=`date +'%Y-%m-%d %H:%M:%S'`
string=$1
echo "[${datetime}] ${string}"
}
#----------------------------------------------------------------------------------------------------------------
# aws lambda 실행 후 인스턴스 조회하여 성공/실패 여부 체크
_main (){
lambda_function=$1
echo ${echo_line}
if [[ ${lambda_fuction} == *"stop"* ]]; then
what_func='stop'
else
what_func='start'
fi
_get_time_log "[INFO] aws lambda ${lambda_function} start"
aws lambda invoke --function-name ${lambda_function} --cli-binary-format raw-in-base64-out --payload '{ "key": "value" }' response.json > /tmp/aws_func_result
#echo "aws lambda invoke --function-name ${lambda_function} --cli-binary-format raw-in-base64-out --payload '{ "key": "value" }' response.json"
succ_flag=0
while read line
do
if [[ $line == *"200"* ]]; then
succ_flag=1
_get_time_log "[INFO] aws lambda ${lambda_function} success!"
break
else
succ_flag=0
fi
done < /tmp/aws_func_result
if [[ ${succ_flag} == 1 ]]; then
aws lambda invoke --function-name ${lambda_function} out --log-type Tail --query 'LogResult' --output text | base64 -d > /tmp/aws_func_output
if [[ ${what_func} == 'stop' ]]; then
final_ec2_num=0
else
final_ec2_num=`grep "Starting" /tmp/aws_func_output | wc -l`
fi
num=0
while true
do
_get_aws_status
num=`echo $(( $num + 1 ))`
if [[ ${current_ec2_num} == ${final_ec2_num} ]]; then
_get_time_log "[INFO] aws ${search_tag} instance number: ${final_ec2_num} check success!"
break
elif [[ ${num} == 30 ]]; then
_get_time_log "[Error] time out!"
break
else
_get_time_log "[Retry: ${num}] aws ${search_tag} instance number: ${final_ec2_num} checking..."
fi
sleep 5
done
else
echo ${echo_line}
_get_time_log "[Error] aws lambda ${lambda_function} failed!"
exit
fi
echo ${echo_line}
#---------------
}
#----------------------------------------------------------------------------------------------------------------
# 실행
_main ${stop_function}
#----------------------------------------------------------------------------------------------------------------
# 임시 파일 삭제
unlink out
unlink response.json
unlink /tmp/aws_func_output
unlink /tmp/aws_func_result
#----------------------------------------------------------------------------------------------------------------

66
scripts/prod/prod.sh Executable file
View File

@@ -0,0 +1,66 @@
#!/bin/bash
if [ -z "$BASH_VERSION" ]; then exec bash "$0" "$@"; exit; fi
#----------------------------------------------------------------------------------------------------------------
# 변수 선언
current_path=`pwd`
line="*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*"
#----------------------------------------------------------------------------------------------------------------
# 파일 및 폴더 경로 확인
__find_path (){
script_file="00_terraform_var_change.sh"
cd ../../
tmp_path=`find -name ${script_file} | grep -vi old`
tmp_num=`grep -c "/" ${tmp_path}`
path_num=`echo $(( $tmp_num - 1 ))`
script_path=`echo ${tmp_path}| cut -d "/" -f1-${path_num}`
_bash=`which bash`
_terraform=`which terraform`
}
#----------------------------------------------------------------------------------------------------------------
# lambda 실행
__lambda_execute (){
lambda_file="lambda_${1}.sh"
cd "${current_path}/lambda"
#./${lambda_file}
echo ${line}
echo "lambda file : $(pwd)/${lambda_file}" #DEBUG
${_bash} ${lambda_file}
echo ${line}
}
#----------------------------------------------------------------------------------------------------------------
# 변수 변경 스크립트 실행 뒤 terraform apply 실행
__terraform_target (){
cd ${current_path}
cd ../../
cd ${script_path}
echo "script_file : ${script_file}" #DEBUG
${_bash} ${script_file}
echo ${line}
${_terraform} apply
}
#----------------------------------------------------------------------------------------------------------------
if [[ ${1} == '' ]];then
echo "[Usage] ${0} { start | stop | restart } "
exit
else
script_func=${1}
__find_path
if [[ ${script_func} == 'start' ]];then
__lambda_execute start
__terraform_target
elif [[ ${script_func} == 'stop' ]];then
__lambda_execute stop
elif [[ ${script_func} == 'restart' ]];then
__lambda_execute restart
__terraform_target
else
echo "[Usage] ${0} { start | stop | restart } "
exit
fi
fi