S3 이벤트 알림: Lambda, SQS, SNS 연동으로 자동화하기
S3 이벤트 알림으로 Lambda, SQS, SNS를 연동하여 파일 업로드 자동 처리 파이프라인을 구축하는 방법을 알아봅니다.
관련 시험 도메인
- Domain 2: Design Resilient Architectures
핵심 요약 (BLUF)
S3 이벤트 알림은 객체 생성/삭제 등의 이벤트 발생 시 Lambda, SQS, SNS, EventBridge로 자동 알림을 전송하는 기능입니다. 하나의 이벤트 유형에 하나의 대상만 설정 가능하며, Fan-Out이 필요하면 SNS 또는 EventBridge를 사용합니다.
시험 팁
시험 핵심: "S3 파일 업로드 → 자동 처리 = S3 이벤트 알림 + Lambda", "Fan-Out = SNS 토픽", "FIFO SQS 불가 → EventBridge 사용"
S3 이벤트 알림이란?
S3 버킷에서 특정 이벤트가 발생했을 때 자동으로 다른 AWS 서비스를 트리거하는 기능입니다.
지원 이벤트 유형
| 이벤트 | 설명 | 사용 사례 |
|---|---|---|
| s3:ObjectCreated:* | 객체 생성 (PUT, POST, COPY, MultipartUpload) | 이미지 업로드 시 썸네일 생성 |
| s3:ObjectRemoved:* | 객체 삭제 | 삭제 로그 기록 |
| s3:ObjectRestore:* | Glacier 복원 완료 | 복원 알림 전송 |
| s3:Replication:* | 복제 실패/완료 | 복제 모니터링 |
| s3:LifecycleExpiration:* | 수명주기 만료 | 만료 로그 |
| s3:ObjectTagging:* | 태그 추가/삭제 | 태그 변경 감사 |
알림 대상
4가지 대상
[S3 버킷]
│ 이벤트 발생
│
├── [Lambda 함수] ── 직접 코드 실행
│
├── [SQS 대기열] ── 메시지 큐잉 후 처리
│
├── [SNS 토픽] ── 여러 구독자에게 팬아웃
│
└── [Amazon EventBridge] ── 규칙 기반 라우팅
| 대상 | 특징 | 적합한 경우 |
|---|---|---|
| Lambda | 직접 비동기 호출 | 즉시 처리 (썸네일, 변환) |
| SQS | 메시지 큐에 저장 | 안정적 처리, 배치, 디커플링 |
| SNS | 여러 구독자에 팬아웃 | 하나의 이벤트 → 여러 대상 |
| EventBridge | 규칙 기반 필터링/라우팅 | 복잡한 라우팅, FIFO SQS |
대상별 비교
직접 Lambda 호출:
[S3] → [Lambda]
→ 간단, 최소 지연
→ Lambda 동시 실행 한도 주의
SQS 경유:
[S3] → [SQS] → [Lambda]
→ 트래픽 급증 시 버퍼 역할
→ DLQ로 실패 메시지 보존
→ 배치 처리 가능 (비용 절감)
SNS 팬아웃:
[S3] → [SNS] → [SQS 1]
→ [SQS 2]
→ [Lambda]
→ [Email]
→ 하나의 이벤트를 여러 대상에 전달
시험 팁
중요 제한: 같은 이벤트 유형(예: ObjectCreated)에 대해 하나의 대상만 설정 가능합니다. 여러 대상에 전달하려면 SNS 또는 EventBridge를 사용하세요.
Fan-Out 패턴
SNS 기반 Fan-Out
이미지 업로드 시 여러 작업 동시 실행:
[S3: 이미지 업로드]
│
▼
[SNS 토픽]
│
├── [SQS 1] → [Lambda: 썸네일 생성]
├── [SQS 2] → [Lambda: 메타데이터 추출]
└── [Lambda: DynamoDB에 기록]
EventBridge 기반 Fan-Out
EventBridge 사용 시:
[S3: 이벤트 발생]
│
▼
[EventBridge]
│
├── 규칙 1: *.jpg → [Lambda: 이미지 처리]
├── 규칙 2: *.csv → [Step Functions: ETL]
├── 규칙 3: 모든 파일 → [SQS FIFO: 순서 보장]
└── 규칙 4: 삭제 → [SNS: 관리자 알림]
EventBridge vs 기존 S3 이벤트 알림
| 항목 | S3 이벤트 알림 | Amazon EventBridge |
|---|---|---|
| 대상 | Lambda, SQS, SNS | 18+ AWS 서비스 |
| 필터링 | 접두사, 접미사만 | 객체 크기, 메타데이터 등 |
| 동일 이벤트 다중 대상 | ❌ | ✅ |
| SQS FIFO | ❌ | ✅ |
| 아카이빙/재생 | ❌ | ✅ |
| 비용 | 무료 | 이벤트당 $1/백만건 |
| 설정 | 버킷 레벨 | EventBridge에서 활성화 필요 |
시험 팁
EventBridge 선택 시기: "SQS FIFO 대상", "복잡한 필터링", "18+ AWS 서비스 연동", "이벤트 아카이빙/재생"이 필요할 때.
권한 설정
S3 → Lambda
Lambda 리소스 기반 정책:
{
"Effect": "Allow",
"Principal": {"Service": "s3.amazonaws.com"},
"Action": "lambda:InvokeFunction",
"Condition": {
"ArnLike": {"AWS:SourceArn": "arn:aws:s3:::my-bucket"}
}
}
S3 → SQS
SQS 액세스 정책:
{
"Effect": "Allow",
"Principal": {"Service": "s3.amazonaws.com"},
"Action": "sqs:SendMessage",
"Condition": {
"ArnLike": {"aws:SourceArn": "arn:aws:s3:::my-bucket"}
}
}
S3 → SNS
SNS 액세스 정책:
{
"Effect": "Allow",
"Principal": {"Service": "s3.amazonaws.com"},
"Action": "sns:Publish",
"Condition": {
"ArnLike": {"aws:SourceArn": "arn:aws:s3:::my-bucket"}
}
}
필터링
접두사(prefix)와 접미사(suffix)로 특정 객체에만 이벤트를 발생시킬 수 있습니다.
필터 예시:
이벤트: s3:ObjectCreated:*
접두사: images/
접미사: .jpg
→ images/photo.jpg 업로드 시 알림 ✅
→ images/photo.png 업로드 시 알림 ❌
→ docs/file.jpg 업로드 시 알림 ❌
실전 아키텍처 예시
이미지 처리 파이프라인
[사용자] → [S3: uploads/]
│ ObjectCreated
▼
[Lambda: 이미지 리사이즈]
│
├── [S3: thumbnails/] ← 결과 저장
└── [DynamoDB] ← 메타데이터 기록
로그 분석 파이프라인
[애플리케이션] → [S3: logs/]
│ ObjectCreated
▼
[SQS 대기열] ← 버퍼
│
▼
[Lambda: 로그 파싱]
│
├── [OpenSearch] ← 검색/분석
└── [CloudWatch] ← 메트릭
SAA-C03 시험 출제 포인트
- ✅ 자동 처리: "S3 업로드 → 자동 처리 = 이벤트 알림 + Lambda"
- ✅ Fan-Out: "하나의 이벤트 → 여러 대상 = SNS 또는 EventBridge"
- ✅ SQS FIFO: "S3 → SQS FIFO 직접 불가, EventBridge 사용"
- ✅ 디커플링: "트래픽 급증 대응 = S3 → SQS → Lambda"
- ✅ 권한: "대상 서비스에 S3의 접근 권한(리소스 기반 정책) 필요"
시험 팁
시험 문제 예시: "S3에 이미지가 업로드되면 자동으로 썸네일을 생성하고, 동시에 메타데이터를 DynamoDB에 기록하려면?" → 정답: S3 이벤트 알림 → SNS 토픽 → Lambda(썸네일) + Lambda(DynamoDB) (Fan-Out 패턴)
자주 묻는 질문 (FAQ)
Q: S3 이벤트 알림은 무료인가요?
S3 이벤트 알림 자체는 무료입니다. 하지만 대상 서비스(Lambda 실행, SQS 메시지, SNS 게시)의 비용은 발생합니다. EventBridge는 이벤트당 과금됩니다.
Q: 이벤트 알림이 누락될 수 있나요?
S3 이벤트 알림은 "최소 한 번(at-least-once)" 전달을 보장합니다. 드물지만 중복 전달이 발생할 수 있으므로, 처리 로직은 멱등성(idempotent)을 갖추는 것이 좋습니다.
Q: 알림 설정 후 바로 적용되나요?
알림 구성을 생성하거나 변경한 후 적용까지 약 5분이 소요될 수 있습니다.
Q: 같은 버킷에 여러 알림을 설정할 수 있나요?
네. 서로 다른 이벤트 유형이나 다른 접두사/접미사 조합이면 여러 알림을 설정할 수 있습니다. 같은 이벤트 유형과 같은 필터 조합에는 하나의 대상만 가능합니다.
Q: 크로스 리전 이벤트 알림이 가능한가요?
S3 이벤트 알림 대상은 같은 리전에 있어야 합니다. 크로스 리전 처리가 필요하면 EventBridge의 크로스 리전 이벤트 버스를 사용하거나, Lambda에서 다른 리전의 서비스를 호출하세요.