AWS Cost Automation with Lambda, SNS, and Boto3
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

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에서 BudgetAlertsTopicAWS Lambda 프로토콜 구독
  • Lambda > Permissions에서 SNS Trigger 추가

6. 실행 및 모니터링

  • 예산 초과 시 EC2 인스턴스 자동 중단 확인
  • CloudWatch Logs에서 Lambda 실행 여부 확인 (로그스트림 확인)

결론

  • SNSLambda를 연동하여 비용 초과 시 자동 조치 가능
  • Boto3를 활용한 EC2 및 S3 자동화 코드는 확장 가능
  • CloudWatch로 로그 확인하여 시스템 실행 상태 실시간 모니터링
  • 이메일 구독 확인과 SNS 이벤트 핸들러 설정은 필수 단계