인프라 비용 최적화를 위한 자동화 스크립트 예시
클라우드 시대의 불필요한 지출을 줄이는 스마트한 DevOps 전략
클라우드 인프라의 확장은 빠르게 이루어지지만, 그에 비례해 비용 관리의 어려움도 커지고 있습니다. 특히, 미사용 리소스, 과도한 스펙 설정, 낮은 리소스 활용률은 조직 전체 예산을 위협하는 주요 요소입니다. 이를 해결하기 위해 많은 기업이 자동화 스크립트를 통한 비용 최적화 전략을 도입하고 있습니다.
이번 글에서는 AWS, GCP, Azure 등에서 자동화 기반으로 인프라 비용을 절감하는 스크립트 예시와 함께, 실제 활용 전략을 구체적으로 설명드리겠습니다.
1. 인프라 비용 비효율의 주요 원인
1) 미사용 리소스 방치
- 사용이 종료된 EC2, GKE 노드 등 인스턴스가 중지되지 않음
- 실험 후 남겨진 테스트 리소스들
2) 과다 프로비저닝
- 최대 부하를 기준으로 스펙 설정 → 낮은 평균 사용률
- 스케일링 정책 미적용
3) 리전/서비스별 단가 차이 고려 부족
- 동일 리소스라도 리전에 따라 비용 차이 존재
- 고급 서비스 활용 시 과금 누락
이러한 비효율을 줄이기 위해서는 모니터링 → 분석 → 자동화된 제어가 필요합니다.
2. 자동화 스크립트를 활용한 비용 절감 전략
전략 A. 미사용 인스턴스 자동 종료
AWS CLI 스크립트 예시 (EC2 자동 정지)
#!/bin/bash
# 특정 태그가 없는, 1시간 이상 비활성화된 인스턴스를 종료
INSTANCE_IDS=$(aws ec2 describe-instances \
--filters "Name=instance-state-name,Values=running" \
"Name=tag:Environment,Values=!Production" \
--query "Reservations[*].Instances[*].[InstanceId,LaunchTime]" \
--output text | awk '{print $1}')
for id in $INSTANCE_IDS; do
echo "Stopping instance $id..."
aws ec2 stop-instances --instance-ids $id
done
설명: 태그가 Production이 아닌 인스턴스를 주기적으로 모니터링하고 자동으로 정지시켜 불필요한 과금을 차단합니다.
전략 B. 스케줄링 기반 자원 ON/OFF 자동화
GCP Cloud Scheduler + Cloud Function 예시
- Cloud Function으로 VM 정지 로직 구성
from googleapiclient import discovery
import google.auth
def stop_instances(request):
credentials, project = google.auth.default()
service = discovery.build('compute', 'v1', credentials=credentials)
zones = ['us-central1-a', 'us-central1-b']
for zone in zones:
request = service.instances().list(project=project, zone=zone)
response = request.execute()
for instance in response.get('items', []):
if instance['status'] == 'RUNNING':
print(f"Stopping {instance['name']}")
service.instances().stop(project=project, zone=zone, instance=instance['name']).execute()
- Cloud Scheduler에서 매일 20시 자동 호출 설정
→ 근무 시간 외 리소스 정지
전략 C. 디스크/스냅샷 자동 정리
Azure PowerShell 스크립트 예시
# 30일 이상 사용하지 않은 비관리 디스크 삭제
$disks = Get-AzDisk | Where-Object { $_.TimeCreated -lt (Get-Date).AddDays(-30) }
foreach ($disk in $disks) {
Remove-AzDisk -ResourceGroupName $disk.ResourceGroupName -DiskName $disk.Name -Force
}
설명: 오랜 기간 사용되지 않은 디스크 자원을 정리하여 저장소 비용을 절감합니다.
3. 인프라 비용 시각화 및 모니터링
자동화와 함께 반드시 비용 시각화와 분석 대시보드를 운영해야 예산 관리가 가능합니다.
대표 도구
- AWS Cost Explorer: 서비스별, 태그별, 시간별 비용 시각화
- GCP Cost Table: 쿼리 기반 비용 분석
- Azure Cost Management + Power BI: 리소스 그룹/서비스 기준 세부 분석
- Kubecost: 쿠버네티스 환경에서 노드/파드 단위 리소스 사용률 및 비용 추적
팁: 자동화 스크립트를 실행한 후 비용 변화를 Kubecost 또는 AWS Explorer에서 시각적으로 확인해 리포트로 활용할 수 있습니다.
4. 서버리스/스팟 인스턴스 활용
A. 서버리스 아키텍처 전환
- Lambda, Cloud Functions, Azure Functions 사용
- 트래픽 발생 시만 과금
B. 스팟 인스턴스 활용
- 최대 90% 비용 절감 가능
- 비핵심 서비스, 백그라운드 작업, 테스트 환경에 적용
AWS 예시
aws ec2 request-spot-instances \
--spot-price "0.03" \
--instance-count 2 \
--launch-specification file://spot-config.json
5. 멀티 클라우드 환경의 비용 최적화 팁
- 클라우드 간 비용 비교: 동일한 리소스라도 GCP가 더 저렴한 경우가 있음
- Cross-region 트래픽 비용 고려: 데이터 전송 비용이 은근히 큼
- Terraform 등 IaC로 관리: 인프라 이력 추적 및 자동화 적용에 유리
6. 결론: 자동화 없이는 절감도 없다
인프라 비용은 처음에는 적은 것처럼 보여도, 누적되면 기업의 수익성을 위협하는 지출로 이어집니다. 특히 클라우드 인프라는 규모가 커질수록 자동화 없이는 관리가 불가능합니다.
- 주기적인 미사용 리소스 정리
- 스케줄 기반 자동 정지
- 디스크/스냅샷 청소
- 스팟/서버리스 도입
- 시각화 + 대시보드 통합
이러한 전략을 자동화 스크립트와 함께 체계적으로 구성하면, 인프라의 효율성과 비용 절감이라는 두 마리 토끼를 동시에 잡을 수 있습니다.
'IT개발' 카테고리의 다른 글
데브섹옵스(DevSecOps) 도입 방법론 (0) | 2025.04.26 |
---|---|
셀프 호스팅 CI 서버 구축(Azure DevOps Server, Jenkins) (0) | 2025.04.26 |
컨테이너 스캐닝과 취약점 관리 (0) | 2025.04.26 |
비상 복구(Disaster Recovery) 설계와 실행 절차 (0) | 2025.04.26 |
로깅과 모니터링: ELK 스택 vs Prometheus & Grafana (0) | 2025.04.26 |