AWS Lambda: 클라우드 자동화를 구동하는 서버리스 엔진
I’m happy to translate the article for you, but I need the full text of the post (the content you’d like translated). Please paste the article’s body here, and I’ll provide a Korean translation while keeping the source line, formatting, markdown, and any code blocks or URLs unchanged.
개요
AWS Lambda는 서버를 관리하지 않고도 애플리케이션 로직을 실행할 수 있게 해 주는 서버리스 컴퓨팅 서비스입니다. 코드를 업로드하고 트리거를 정의하기만 하면 되며, AWS가 프로비저닝, 스케일링 및 실행을 자동으로 처리합니다. Lambda는 Python, Node.js, Java, Go, .NET, Ruby 및 사용자 정의 런타임을 포함한 여러 언어를 지원합니다.
주요 이점
- 구성하거나 유지 관리할 서버가 없음 – 프로비저닝, 패치 및 인프라 관리와 같은 운영 부담을 없앱니다.
- 자동 스케일링 – 별도의 설정 없이 0부터 수천 개의 동시 요청까지 확장됩니다.
- 사용량 기반 요금 – 함수가 실제로 사용하는 컴퓨팅 시간에만 비용이 청구되며, 유휴 시간에 대한 비용은 없습니다.
- AWS 서비스와의 깊은 통합 – S3, DynamoDB, CloudWatch, EventBridge, SNS/SQS, API Gateway 등과 기본적으로 연동됩니다.
Lambda가 자동화를 개선하는 방법
전통적인 자동화는 종종 전용 서버가 필요했으며, 그 결과 비용이 많이 드는 유휴 인프라, 수동 스케일링 및 OS 유지 관리가 발생했습니다. Lambda는 다음과 같은 방식으로 해당 모델을 대체합니다:
- 필요 시 서버리스 컴퓨팅
- 이벤트 기반 실행
- 자동 리소스 관리
- 운영 작업 부담 감소
개발자는 인프라 문제 대신 비즈니스 로직에만 순수하게 집중할 수 있습니다.
실용적인 사용 사례
1. 자동 EBS 스냅샷 정리
조직에서는 EBS 스냅샷을 자주 생성하지만 오래된 스냅샷을 삭제하지 않아 불필요한 스토리지 비용이 발생합니다. 예약된 EventBridge 규칙이 Lambda 함수를 트리거하여 다음을 수행할 수 있습니다:
- 계정이 소유한 모든 스냅샷을 조회합니다.
- 정의된 보존 기간보다 오래된 스냅샷을 식별합니다.
- 오래된 스냅샷을 삭제합니다.
이점: 스토리지 비용 절감, 보존 규정 준수 보장, 수동 정리 작업 제거.
# lambda_cleanup_snapshots.py
import boto3
ec2 = boto3.client('ec2')
def lambda_handler(event, context):
snapshots = ec2.describe_snapshots(OwnerIds=['self'])['Snapshots']
for snap in snapshots:
snap_id = snap['SnapshotId']
print(f"Deleting Snapshot: {snap_id}")
try:
ec2.delete_snapshot(SnapshotId=snap_id)
except Exception as e:
print(f"Error deleting {snap_id}: {e}")
return {
"status": "Completed",
"deleted_snapshots": len(snapshots)
}
2. 연결되지 않은 EBS 볼륨 제거
EC2 인스턴스를 종료하면 해당 인스턴스의 EBS 볼륨이 available 상태로 남아 계속 비용이 발생할 수 있습니다. 예약된 Lambda 함수가 다음을 수행합니다:
- 상태가
available인 모든 볼륨을 목록화합니다. - 연결되지 않은 각 볼륨을 삭제합니다.
이점: 낭비되는 스토리지 비용 감소, 클라우드 위생 개선, 정리 자동화.
# lambda_cleanup_volumes.py
import boto3
ec2 = boto3.client('ec2')
def lambda_handler(event, context):
volumes = ec2.describe_volumes(
Filters=[{'Name': 'status', 'Values': ['available']}]
)['Volumes']
for vol in volumes:
vol_id = vol['VolumeId']
print(f"Deleting Unattached Volume: {vol_id}")
try:
ec2.delete_volume(VolumeId=vol_id)
except Exception as e:
print(f"Error deleting {vol_id}: {e}")
return {
"status": "Completed",
"deleted_volumes": len(volumes)
}
3. 중지된 EC2 인스턴스 자동 시작
일부 환경에서는 비즈니스 시간이나 패치 윈도우 이후에 EC2 인스턴스를 시작해야 합니다. 매일 지정된 시간(예: 오전 9시)에 트리거되는 스케줄이 Lambda 함수를 실행하도록 설정하면:
stopped상태인 인스턴스를 찾습니다.- 태그 필터 또는 특정 인스턴스 ID를 기준으로 인스턴스를 시작합니다.
이점: 필요한 서버를 제때 가용하게 보장, 수동 작업 감소, DevOps 자동화 지원.
# lambda_start_instances.py
import boto3
ec2 = boto3.client('ec2')
def lambda_handler(event, context):
response = ec2.describe_instances(
Filters=[{'Name': 'instance-state-name', 'Values': ['stopped']}]
)
stopped_instances = [
instance['InstanceId']
for reservation in response['Reservations']
for instance in reservation['Instances']
]
if stopped_instances:
print(f"Starting instances: {stopped_instances}")
ec2.start_instances(InstanceIds=stopped_instances)
else:
print("No stopped instances found")
return {
"action": "start_instances",
"instances": stopped_instances
}
다른 AWS 서비스와의 통합
Lambda는 다음과 같은 다양한 AWS 이벤트에 의해 트리거될 수 있습니다:
- S3 – 객체 생성 또는 삭제
- DynamoDB – 스트림 레코드
- CloudWatch – 예약된 크론 작업 또는 알람
- EventBridge – 사용자 정의 이벤트 버스
- SNS / SQS – 메시지 알림
- API Gateway – HTTP 요청
이러한 통합을 통해 전용 서버 없이도 완전 자동화된 이벤트 기반 아키텍처를 구축할 수 있습니다.