일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- AWS
- Go-lang
- docker
- Playwright
- Rust
- Monthly Checklist
- 실용주의 프로그래머
- amazon ecs
- 도커 주의사항
- leetcode
- ssh
- 신혼 여행
- 경로 계획 알고리즘
- Til
- 구조 패턴
- 청첩장 모임
- 14일 공부
- 지표
- AWS 비용 절감
- github
- 티스토리챌린지
- 디자인 패턴
- 생성 패턴
- study
- DevOps
- PostgreSQL
- MAPF
- terraform
- 논문 정리
- 오블완
- Today
- Total
밤 늦게까지 여는 카페
[AWS 비용 절감] crontab을 이용해서 주말에는 서버 자동으로 내리기 본문
안녕하세요. 오늘은 AWS 비용 절감을 위해 시도한 방안 중 하나를 기록하고자 합니다.
주말에는 사용하지 않는 서버를 내리는 정말 간단한 방안인데 적용하기까지는 시간이 오래 걸렸습니다.
crontab을 이용해서 deactivate.sh 스크립트를 금요일 밤에 실행하고
activate.sh를 월요일 아침에 실행하여 주말에는 사용하지 않는 서버 인스턴스들이 자동으로 내려가도록 설정했습니다.
- crontab 예시
- 0 9 * * 1 /home/user/script/activate.sh (월요일 오전 9시에 서버 활성화 시키기)
- 0 20 * * 5 /home/user/script/deactivate.sh (금요일 오후 8시에 서버 비활성화 시키기)
- activate.sh
#!/bin/bash
# 클러스터 이름 설정 (필요 시 수정)
CLUSTER_NAME="CLUSTER-NAME"
# DB 인스턴스 이름 설정 (필요 시 수정)
DB_ID="DB-ID
# DB가 실행되기 전에 서버가 먼저 실행되는 것을 막기 위함
resp=$(aws rds start-db-instance --db-instance-identifier $DB_ID)
echo $resp
sleep 300
# 모든 서비스 목록 가져오기
SERVICES=$(aws ecs list-services --cluster $CLUSTER_NAME --query "serviceArns[]" --output text)
# 서비스 목록이 비어 있지 않은 경우 실행
if [[ -n "$SERVICES" ]]; then
for SERVICE_ARN in $SERVICES; do
SERVICE_NAME=$(basename $SERVICE_ARN)
echo "Stopping service: $SERVICE_NAME"
# 서비스의 작업 수를 0으로 설정
resp=$(aws ecs update-service --cluster $CLUSTER_NAME --service $SERVICE_NAME --desired-count 0)
echo $resp
done
echo "All services in cluster '$CLUSTER_NAME' have been stopped."
else
echo "No services found in cluster '$CLUSTER_NAME'."
fi
- deactivate.sh
#!/bin/bash
# 클러스터 이름 설정 (필요 시 수정)
CLUSTER_NAME="CLUSTER-NAME"
# DB 인스턴스 이름 설정 (필요 시 수정)
DB_ID="DB-ID
# 모든 서비스 목록 가져오기
SERVICES=$(aws ecs list-services --cluster $CLUSTER_NAME --query "serviceArns[]" --output text)
# 서비스 목록이 비어 있지 않은 경우 실행
if [[ -n "$SERVICES" ]]; then
for SERVICE_ARN in $SERVICES; do
SERVICE_NAME=$(basename $SERVICE_ARN)
echo "Stopping service: $SERVICE_NAME"
# 서비스의 작업 수를 0으로 설정
resp=$(aws ecs update-service --cluster $CLUSTER_NAME --service $SERVICE_NAME --desired-count 1)
echo $resp
done
echo "All services in cluster '$CLUSTER_NAME' have been stopped."
else
echo "No services found in cluster '$CLUSTER_NAME'."
fi
resp=$(aws rds stop-db-instance --db-instance-identifier $DB_ID)
echo $resp
서비스 운영 시간을 더 세밀하게 관리하는 방법도 있을텐데 준비해보겠습니다.
+++
처음으로 시도해봤는데 서버가 DB보다 먼저 실행되어서 패닉이 발생하더라고요...!
activate.sh 에서 DB 인스턴스 시작 순서를 앞당기는 것으로 조치했습니다.
예전에 비슷한 작업을 해봤어서 이번에는 매우 간단하게 처리할 수 있었던 것 같습니다 👍
🎁다른 AWS 비용 절감 관련 포스팅들 🎁
- [AWS 비용 절감] 자칫하면 줄줄 샐 수 있는 데이터 통신 비용 - 데이터 통신 비용으로 얼마까지 지출해보셨나요?
- [AWS 비용 절감] AWS RDS 인스턴스 삭제는 못하고 비용은 아깝고 ㅜㅠ - aws cli와 crontab을 이용한 DB 인스턴스 일시 정지 자동화