Lambda와 AWS 서비스 통합

AWS Lambda로 구축하는 서버리스 애플리케이션

Claudio Canales

Senior DevOps Engineer

통합 루프

  • 이벤트 수신.
  • 핸들러 로직 실행.
  • SDK 호출.

이벤트 -> 핸들러 -> SDK 루프

AWS Lambda로 구축하는 서버리스 애플리케이션

트리거 vs SDK 호출

트리거(Trigger)

  • Lambda 실행 시점을 결정합니다.

SDK 호출 (핸들러 내부)

  • DynamoDB, S3 등 서비스를 읽고 씁니다.

트리거와 SDK 호출 비교

AWS Lambda로 구축하는 서버리스 애플리케이션

구체적인 예시

  • S3에 파일이 업로드됩니다.
  • Lambda가 실행됩니다.
  • DynamoDB에 레코드를 저장합니다.

S3 업로드 -> Lambda -> DynamoDB

AWS Lambda로 구축하는 서버리스 애플리케이션

이벤트 페이로드: 필요한 데이터 찾기

{
  "Records": [{
    "s3": {
      "bucket": {"name": "…"},
      "object": {"key": "…"}
    }
  }]
}

S3 이벤트 페이로드 설명

AWS Lambda로 구축하는 서버리스 애플리케이션

AWS SDK의 역할

  • 코드에서 SDK(boto3)를 호출합니다.
  • SDK가 AWS API를 호출합니다.
  • IAM이 접근을 제어합니다.

핸들러 -> SDK -> AWS API

AWS Lambda로 구축하는 서버리스 애플리케이션

실행 역할 = 자격 증명

  • 실행 역할에서 임시 자격 증명을 제공합니다.
  • 코드에 액세스 키를 포함하지 않습니다.
  • 역할에 API 호출 권한이 없으면 SDK 호출이 실패합니다.

실행 역할이 자격 증명 제공

AWS Lambda로 구축하는 서버리스 애플리케이션

최소 권한: 작업과 리소스 범위 지정

  • 피해 범위를 최소화합니다.
  • 필요한 작업과 리소스에만 권한을 부여합니다.
  • 꼭 필요한 경우가 아니면 와일드카드를 사용하지 않습니다.

최소 권한: 작업 및 리소스

AWS Lambda로 구축하는 서버리스 애플리케이션

DynamoDB: 적합한 작업 선택하기

  • PutItem은 항목을 씁니다.
  • GetItem은 키로 항목을 읽습니다.
  • Query는 관련 항목을 조회합니다.
  • 전체 스캔보다 목적에 맞는 작업을 사용하세요.

DynamoDB 작업

AWS Lambda로 구축하는 서버리스 애플리케이션

S3: 버킷과 키 활용하기

  • 객체는 버킷과 키로 저장됩니다.
  • GetObject는 콘텐츠를 가져옵니다.
  • PutObject는 새 파생 파일을 씁니다.

S3 버킷과 키

AWS Lambda로 구축하는 서버리스 애플리케이션

환경 변수로 설정 관리하기

  • 리소스 이름을 하드코딩하면 유지보수가 어렵습니다.
  • 환경 변수를 사용하세요.
  • 동일한 코드를 dev와 prod에 배포할 수 있습니다.

환경 변수 설정

AWS Lambda로 구축하는 서버리스 애플리케이션

SDK 코드: 간결하고 테스트 가능하게

import boto3
ddb = boto3.client("dynamodb")
def handler(event, context):
    ddb.put_item(
        TableName="files",
        Item={"pk": {"S": "1"}},
    )
  • 입력 유효성 검사 후 SDK를 호출하고 결과를 반환합니다.
  • 순수 로직은 단위 테스트로 검증합니다.

SDK 호출이 포함된 간단한 핸들러

AWS Lambda로 구축하는 서버리스 애플리케이션

SDK 오류를 명확하게 처리하기

  • 처음에는 권한 오류가 자주 발생합니다.
  • 호출 실패 시 원인을 명확히 드러내세요.
  • 로그가 충실하면 디버깅이 쉬워집니다.

성공 및 실패 경로

AWS Lambda로 구축하는 서버리스 애플리케이션

IAM이 잘못되면 코드는 정상처럼 보입니다

AccessDeniedException
required action denied
  • IAM을 먼저 수정한 후 핸들러 로직을 점검합니다.

접근 거부

AWS Lambda로 구축하는 서버리스 애플리케이션

멱등성: 안전한 재시도와 중복 처리

  • 동일한 이벤트가 두 번 수신될 수 있습니다.
  • 멱등성 키(Idempotency key)로 중복 처리를 방지합니다.
  • 조건부 쓰기로 재시도를 안전하게 처리합니다.

멱등성 키 패턴

AWS Lambda로 구축하는 서버리스 애플리케이션

전체 흐름 정리 (엔드투엔드)

  • S3 이벤트에서 버킷과 키를 가져옵니다.
  • 핸들러가 이를 파싱합니다.
  • PutItem으로 DynamoDB에 메타데이터를 씁니다.
  • CloudWatch Logs에서 처리 결과를 확인합니다.

엔드투엔드 통합 요약

AWS Lambda로 구축하는 서버리스 애플리케이션

핵심 정리

  • 트리거와 SDK 호출을 분리하세요.
  • 실행 역할로 권한을 최소화하세요.
  • 환경 변수로 설정을 이식 가능하게 유지하세요.

통합 핵심 정리

AWS Lambda로 구축하는 서버리스 애플리케이션

연습해 봅시다!

AWS Lambda로 구축하는 서버리스 애플리케이션

Preparing Video For Download...