From eb5dedcd4d52a9274b0b535ef592be2d88201d9f Mon Sep 17 00:00:00 2001 From: havelight-ee Date: Wed, 14 Dec 2022 17:45:54 +0900 Subject: [PATCH] =?UTF-8?q?directory=20=EA=B5=AC=EC=A1=B0=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 11 ++ .../00_old/terraform/backup.tar.gz | Bin 5653 -> 0 bytes .../terraform/.terraform.lock.hcl | 0 .../terraform/00_terraform_var_change.sh | 0 .../{00_old => }/terraform/01_main.tf | 0 .../{00_old => }/terraform/02_nlb.tf | 0 .../{00_old => }/terraform/03_nlb_listener.tf | 0 .../terraform/04_nlb_target_group.tf | 0 .../{00_old => }/terraform/05_route53.tf | 0 .../{00_old => }/terraform/99_variables.tf | 0 .../{00_old => }/terraform/terraform.tfstate | 0 .../terraform/terraform.tfstate.backup | 0 scripts/kops_env/kops_env.sh | 41 +++++++ scripts/spot_lambda/lambda_restart.sh | 102 ++++++++++++++++++ scripts/spot_lambda/lambda_stop.sh | 100 +++++++++++++++++ 15 files changed, 254 insertions(+) create mode 100644 README.md delete mode 100644 aws_kubernetes/aws_kops_prod/00_old/terraform/backup.tar.gz rename aws_kubernetes/aws_kops_prod/{00_old => }/terraform/.terraform.lock.hcl (100%) rename aws_kubernetes/aws_kops_prod/{00_old => }/terraform/00_terraform_var_change.sh (100%) rename aws_kubernetes/aws_kops_prod/{00_old => }/terraform/01_main.tf (100%) rename aws_kubernetes/aws_kops_prod/{00_old => }/terraform/02_nlb.tf (100%) rename aws_kubernetes/aws_kops_prod/{00_old => }/terraform/03_nlb_listener.tf (100%) rename aws_kubernetes/aws_kops_prod/{00_old => }/terraform/04_nlb_target_group.tf (100%) rename aws_kubernetes/aws_kops_prod/{00_old => }/terraform/05_route53.tf (100%) rename aws_kubernetes/aws_kops_prod/{00_old => }/terraform/99_variables.tf (100%) rename aws_kubernetes/aws_kops_prod/{00_old => }/terraform/terraform.tfstate (100%) rename aws_kubernetes/aws_kops_prod/{00_old => }/terraform/terraform.tfstate.backup (100%) create mode 100755 scripts/kops_env/kops_env.sh create mode 100755 scripts/spot_lambda/lambda_restart.sh create mode 100755 scripts/spot_lambda/lambda_stop.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..ae4956b --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# public-ds-cluster-env +aws 환경 구축 시 사용하는 파일을 정리한다. + +## directory 구조 +1. docs: 문서파일 저장. +2. architecture : aws 구성도 +3. aws_image : aws AMI 이미지 생성 +4. aws_kubernetes : aws kubernetes 생성 (kops) +5. aws_network : aws network 구성 (terraform) +6. aws_total : aws 백업 파일 (kops) +7. script : support script diff --git a/aws_kubernetes/aws_kops_prod/00_old/terraform/backup.tar.gz b/aws_kubernetes/aws_kops_prod/00_old/terraform/backup.tar.gz deleted file mode 100644 index dee52ea6a4f76ce4b612c5975e54850c9b46db13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5653 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 Q=6k6z83u6_04mD=0Gp}%0ssI2 diff --git a/aws_kubernetes/aws_kops_prod/00_old/terraform/.terraform.lock.hcl b/aws_kubernetes/aws_kops_prod/terraform/.terraform.lock.hcl similarity index 100% rename from aws_kubernetes/aws_kops_prod/00_old/terraform/.terraform.lock.hcl rename to aws_kubernetes/aws_kops_prod/terraform/.terraform.lock.hcl diff --git a/aws_kubernetes/aws_kops_prod/00_old/terraform/00_terraform_var_change.sh b/aws_kubernetes/aws_kops_prod/terraform/00_terraform_var_change.sh similarity index 100% rename from aws_kubernetes/aws_kops_prod/00_old/terraform/00_terraform_var_change.sh rename to aws_kubernetes/aws_kops_prod/terraform/00_terraform_var_change.sh diff --git a/aws_kubernetes/aws_kops_prod/00_old/terraform/01_main.tf b/aws_kubernetes/aws_kops_prod/terraform/01_main.tf similarity index 100% rename from aws_kubernetes/aws_kops_prod/00_old/terraform/01_main.tf rename to aws_kubernetes/aws_kops_prod/terraform/01_main.tf diff --git a/aws_kubernetes/aws_kops_prod/00_old/terraform/02_nlb.tf b/aws_kubernetes/aws_kops_prod/terraform/02_nlb.tf similarity index 100% rename from aws_kubernetes/aws_kops_prod/00_old/terraform/02_nlb.tf rename to aws_kubernetes/aws_kops_prod/terraform/02_nlb.tf diff --git a/aws_kubernetes/aws_kops_prod/00_old/terraform/03_nlb_listener.tf b/aws_kubernetes/aws_kops_prod/terraform/03_nlb_listener.tf similarity index 100% rename from aws_kubernetes/aws_kops_prod/00_old/terraform/03_nlb_listener.tf rename to aws_kubernetes/aws_kops_prod/terraform/03_nlb_listener.tf diff --git a/aws_kubernetes/aws_kops_prod/00_old/terraform/04_nlb_target_group.tf b/aws_kubernetes/aws_kops_prod/terraform/04_nlb_target_group.tf similarity index 100% rename from aws_kubernetes/aws_kops_prod/00_old/terraform/04_nlb_target_group.tf rename to aws_kubernetes/aws_kops_prod/terraform/04_nlb_target_group.tf diff --git a/aws_kubernetes/aws_kops_prod/00_old/terraform/05_route53.tf b/aws_kubernetes/aws_kops_prod/terraform/05_route53.tf similarity index 100% rename from aws_kubernetes/aws_kops_prod/00_old/terraform/05_route53.tf rename to aws_kubernetes/aws_kops_prod/terraform/05_route53.tf diff --git a/aws_kubernetes/aws_kops_prod/00_old/terraform/99_variables.tf b/aws_kubernetes/aws_kops_prod/terraform/99_variables.tf similarity index 100% rename from aws_kubernetes/aws_kops_prod/00_old/terraform/99_variables.tf rename to aws_kubernetes/aws_kops_prod/terraform/99_variables.tf diff --git a/aws_kubernetes/aws_kops_prod/00_old/terraform/terraform.tfstate b/aws_kubernetes/aws_kops_prod/terraform/terraform.tfstate similarity index 100% rename from aws_kubernetes/aws_kops_prod/00_old/terraform/terraform.tfstate rename to aws_kubernetes/aws_kops_prod/terraform/terraform.tfstate diff --git a/aws_kubernetes/aws_kops_prod/00_old/terraform/terraform.tfstate.backup b/aws_kubernetes/aws_kops_prod/terraform/terraform.tfstate.backup similarity index 100% rename from aws_kubernetes/aws_kops_prod/00_old/terraform/terraform.tfstate.backup rename to aws_kubernetes/aws_kops_prod/terraform/terraform.tfstate.backup diff --git a/scripts/kops_env/kops_env.sh b/scripts/kops_env/kops_env.sh new file mode 100755 index 0000000..80d929e --- /dev/null +++ b/scripts/kops_env/kops_env.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +export KOPS_STATE_STORE=s3://clusters.spot.datasaker.io +export KOPS_CLUSTER_NAME=k8s-spot.datasaker.io + +export VPC_ID="vpc-00ba2b0e9ad59f0ed " +export Network_CIDR="172.24.0.0/19" +export AMI_Image="ami-0abb33b73a78cae31" +export Private_Subnet_ID_1="subnet-024f0deda82039fa4" +export Private_Subnet_ID_2="subnet-050d942fa1c46540a" +export Private_Subnet_ID_3="subnet-0946eb806af7377be" +export Public_Subnet_ID_1="subnet-00c363356f133411d" +export Public_Subnet_ID_2="subnet-07aa5e879a262014d" +export Public_Subnet_ID_3="subnet-0073a61bc56a68a3e" + +kops_cmd=""" +kops create cluster \ + --vpc "$VPC_ID" \ + --cloud aws \ + --ssh-public-key "$HOME/.ssh/id_rsa.pub" \ + --topology private --kubernetes-version "1.25.2" \ + --network-cidr "$Network_CIDR" \ + --networking calico \ + --container-runtime containerd \ + --image $AMI_Image \ + --zones ap-northeast-2a,ap-northeast-2b,ap-northeast-2c \ + --master-count 3 \ + --master-size t3.small \ + --node-count 3 \ + --node-size t3.small \ + --node-volume-size 100 \ + --subnets "$Private_Subnet_ID_1,$Private_Subnet_ID_2,$Private_Subnet_ID_3" \ + --utility-subnets "$Public_Subnet_ID_1,$Public_Subnet_ID_2,$Public_Subnet_ID_3" \ + -v 10 +""" + +kubeconfig="kops export kubecfg --admin --kubeconfig $HOME/.kube/config --name=${KOPS_CLUSTER_NAME} --state=${KOPS_STATE_STORE}" +echo ${kubeconfig} +echo +echo +echo ${kops_cmd} diff --git a/scripts/spot_lambda/lambda_restart.sh b/scripts/spot_lambda/lambda_restart.sh new file mode 100755 index 0000000..2e4b800 --- /dev/null +++ b/scripts/spot_lambda/lambda_restart.sh @@ -0,0 +1,102 @@ +if [ -z "$BASH_VERSION" ]; then exec bash "$0" "$@"; exit; fi + +#---------------------------------------------------------------------------------------------------------------- +# 변수 선언 +echo_line="==========================================================================" +search_tag="spot" +stop_function="spot_stop" +start_function="spot_start" + +#---------------------------------------------------------------------------------------------------------------- +# 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} + +_main ${start_function} + +#---------------------------------------------------------------------------------------------------------------- +# 임시 파일 삭제 + +unlink out +unlink response.json +unlink /tmp/aws_func_output +unlink /tmp/aws_func_result +#---------------------------------------------------------------------------------------------------------------- diff --git a/scripts/spot_lambda/lambda_stop.sh b/scripts/spot_lambda/lambda_stop.sh new file mode 100755 index 0000000..b8be4fd --- /dev/null +++ b/scripts/spot_lambda/lambda_stop.sh @@ -0,0 +1,100 @@ +if [ -z "$BASH_VERSION" ]; then exec bash "$0" "$@"; exit; fi + +#---------------------------------------------------------------------------------------------------------------- +# 변수 선언 +echo_line="==========================================================================" +search_tag="spot" +stop_function="spot_stop" +start_function="spot_start" + +#---------------------------------------------------------------------------------------------------------------- +# 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 +#----------------------------------------------------------------------------------------------------------------