AWS 비용 자동화 제어: Lambda, SNS 및 Boto3 활용
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
- DevOps 엔지니어 및 클라우드 개발자: AWS 비용 관리와 자동화 시스템 구축에 관심 있는 분야
- 난이도: 중급 (AWS 서비스 및 Python 기초 지식 필요)
핵심 요약
- Lambda 함수와 Boto3를 사용하여 AWS 비용을 자동으로 제어하고 EC2 인스턴스를 중단
- SNS를 통해 예산 초과 시 이메일 알림을 자동으로 생성
- IAM 역할을 생성하여 Lambda에 EC2 및 S3 권한 부여
- 비용 예산 설정을 통해 $0.01 초과 시 자동 조치
섹션별 세부 요약
1. SNS 주제 생성 및 이메일 알림 설정
- SNS Topics에서
BudgetAlertsTopic
이라는 표준 주제 생성 - 이메일 프로토콜을 통해 사용자 이메일로 구독하고 확인 이메일 수신
- 구독 후 SNS > Topics에서 구독 상태 확인
2. 비용 예산 설정
- Billing > Budgets에서 Cost Budget 설정
- 예산 이름:
MyBillingBudget
, 금액: $0.01, 범위: All services - 100% 임계값 설정 및 SNS Topic(
BudgetAlertsTopic
)에 알림 전송
3. IAM 역할 생성 및 권한 부여
- IAM > Roles에서 Lambda 사용 사례로 역할 생성
- Custom Policy 생성: EC2, S3 권한 포함 (예:
ec2:DescribeInstances
,ec2:StopInstances
,s3:ListBucket
) - 역할 이름:
LambdaBillingStopperRole
4. Lambda 함수 작성 및 배포
- Lambda > Create Function에서
StopAWSResources
함수 생성 - 런타임: Python 3.12, 역할:
LambdaBillingStopperRole
- Boto3 사용:
```python
import boto3
def lambda_handler(event, context):
ec2 = boto3.client('ec2')
instances = ec2.describe_instances(Filters=[{'Name': 'instance-state-name', 'Values': ['running']}])
for reservation in instances['Reservations']:
for instance in reservation['Instances']:
ec2.stop_instances(InstanceIds=[instance['InstanceId']])
```
- S3 버킷에 Public Access Block 설정 추가
5. SNS 이벤트 핸들러 연결
- SNS > Topics에서
BudgetAlertsTopic
에 AWS Lambda 프로토콜 구독 - Lambda > Permissions에서 SNS Trigger 추가
6. 실행 및 모니터링
- 예산 초과 시 EC2 인스턴스 자동 중단 확인
- CloudWatch Logs에서 Lambda 실행 여부 확인 (로그스트림 확인)
결론
- SNS와 Lambda를 연동하여 비용 초과 시 자동 조치 가능
- Boto3를 활용한 EC2 및 S3 자동화 코드는 확장 가능
- CloudWatch로 로그 확인하여 시스템 실행 상태 실시간 모니터링
- 이메일 구독 확인과 SNS 이벤트 핸들러 설정은 필수 단계