Aws
Ec2 5분마다 healthcheck 하고 실패하면 종료하기
wngnl-dev
2024. 6. 17. 15:11
while true; do
# health check
response=$(curl --write-out "%{http_code}" --silent --output /dev/null "http://localhost:8080/health")
if [ "$response" -ne 200 ]; then
# 인스턴스 ID 가져오기
token=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
Instance_ID=$(curl -s -H "X-aws-ec2-metadata-token: $token" "http://169.254.169.254/latest/meta-data/instance-id")
Instance_Name=$(aws ec2 describe-instances --instance-ids $Instance_ID --query 'Reservations[0].Instances[0].Tags[?Key==`Name`].Value' --output text)
# 도커 컨테이너 로그 가져오기
Container_ID=$(docker ps -a --format "{{.ID}}")
Error_Log=$(docker logs "$container_id")
sns_topic_arn='<SNS ARN>'
message="$Instance_Name (ID: $Instance_ID)를 종료했습니다.\n\n$Error_Log"
aws sns publish --topic-arn "$sns_topic_arn" --message "$message" --subject "$Instance_Name 인스턴스 종료"
aws ec2 terminate-instances --instance-ids $Instance_ID
fi
sleep 300 # 5분 대기
done