졸업 프로젝트를 위해 AWS EC2를 24시간 실행했더니 과금 발생.
인스턴스: t3.small
스토리지: EBS gp3 30GB
운영 방식: 24시간 상시 운영
💸 한달 요금: 38,000원 이상!! (돈 없는 대학생한테는 이것도 아깝.. )
두 개의 애플리케이션을 실행하다 보니 메모리를 고려하기 위해 t3.small로 했고, 디스크 용량을 확보하기 위해 스토리지를 늘렸다. 그리고 탄력적 IP도 사용했다.
24시간 내내 인스턴스를 켜둠 + 스토리지 늘림 + 탄력적 IP 사용이 원인이었다. 스토리지는 두개의 컨테이너를 실행하기 위해서는 디스크 용량 확보가 필요해서 적절한 크기를 찾아야했고 탄력적 IP는 계속 써야하니까 가장 먼저 할 수 있는 비용 절감 방법은 인스턴스 실행하는 시간을 줄이는 것이라고 판단했다.
개발 서버는 굳이 밤새 켜둘 필요가 없다는 생각에 자동 스케줄링을 도입하기로 했다.
Lambda가 EC2를 제어할 수 있도록 권한을 부여한다.
정책 생성
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"ec2:Start*",
"ec2:Stop*",
"ec2:Describe*"
],
"Resource": "*"
}
]
}
역할 생성
역할 -> 역할 생성 -> 사용사례는 lambda -> 생성한 정책 연결 -> 생성

start와 stop 함수를 생성한다.
lambda -> 함수 -> 함수 생성 으로 가서 함수 이름을 작성하고 런타임은 python으로 한다.

함수 코드를 작성하고 deploy

구성 -> 권한 -> 실행 역할 편집 -> 아까 생성한 역할을 넣어준다.

stop 함수도 똑같이 만든다.
eventbridge -> 일정 생성 -> 반복 일정 -> 인스턴스 시작하고 싶은 시간을 cron 표현식으로 적는다.
아침 11시에 시작하고싶어서 아래와 같이 했다. 시간대는 서울 기준으로 되어있어서 그냥 한국 시간을 기준으로 작성했다.

다음단계 대상 선택에서는 lambda와 연결할 것이기 때문에 lambda를 선택했다.

만들었던 람다함수를 선택하고 이후 과정은 다음으로 넘기고 일정을 생성하면 된다.
cloudwatch -> 로그그룹 으로 가면 생성했던 람다 함수가 실행된 기록이 있다. start 함수로 가서 확인했더니 11시마다 인스턴스 시작하는 것을 확인할 수 있었다.

스케줄링 전 청구서

스케줄링 후 청구서

다음달 8월 요금은 30,000원이 나왔다.
생각보다 크게 절약되지는 않았지만 ec2 사용시간이 줄어들어 고정 비용을 제외하고 비용 절감이 확실히 됐다.
AWS 비용은 예상보다 복잡하다: 컴퓨팅 비용 외에도 다양한 고정비용이 존재
스케줄링은 부분적 해결책이다: 근본적인 아키텍처 최적화가 더 중요
모니터링의 중요성: 정기적인 비용 리뷰와 최적화가 필수
🚀 현재 적은 비용 절약을 달성했지만, 더 큰 절약을 위해서는 고정 비용에서 줄일 수 있는 비용이 있는지 (스토리지 크기 최적화 등) 확인해봐야곘다.
AWS 비용 관리를 이해하게 된 좋은 경험이었다.