SAABlog
스토리지중급

S3 이벤트 알림: Lambda, SQS, SNS 연동으로 자동화하기

S3 이벤트 알림으로 Lambda, SQS, SNS를 연동하여 파일 업로드 자동 처리 파이프라인을 구축하는 방법을 알아봅니다.

PHILOLAMB-
S3이벤트 알림LambdaSQSSNS

관련 시험 도메인

  • 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, SNS18+ 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 시험 출제 포인트

  1. 자동 처리: "S3 업로드 → 자동 처리 = 이벤트 알림 + Lambda"
  2. Fan-Out: "하나의 이벤트 → 여러 대상 = SNS 또는 EventBridge"
  3. SQS FIFO: "S3 → SQS FIFO 직접 불가, EventBridge 사용"
  4. 디커플링: "트래픽 급증 대응 = S3 → SQS → Lambda"
  5. 권한: "대상 서비스에 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에서 다른 리전의 서비스를 호출하세요.

관련 글

참고 자료