$ yh.log
AWS Lambda 정리

AWS Lambda 정리

AWSLambdaServerlessDVA-C02

작성자 : 오예환 | 작성일 : 2026-01-12 | 수정일 : 2026-01-12

1. Serverless 개요

Serverless란?

  • 개발자가 서버를 관리하지 않는 새로운 패러다임
  • 코드(함수)만 배포
  • FaaS (Function as a Service)
  • 서버가 없다는 뜻이 아님 → 관리/프로비저닝/보이지 않을 뿐

AWS Serverless 서비스

서비스용도
AWS Lambda함수 실행
DynamoDBNoSQL DB
API GatewayREST API
S3스토리지
SNS & SQS메시징
Kinesis Data Firehose스트리밍
Aurora Serverless관계형 DB
Step Functions워크플로우 오케스트레이션
Fargate서버리스 컨테이너
Cognito인증

2. AWS Lambda vs EC2

항목EC2Lambda
서버직접 관리관리 불필요
실행지속 실행온디맨드 실행
시간무제한최대 15분
스케일링수동 개입자동
리소스RAM/CPU 제한RAM 최대 10GB

3. Lambda 장점

가격

항목무료 티어초과 시
요청 수1,000,000건/월$0.20/1M 요청
컴퓨팅 시간400,000 GB-초/월$1.00/600,000 GB-초

💡 매우 저렴 → Lambda 인기 비결!

기타 장점

  • AWS 서비스와 완전 통합
  • 다양한 언어 지원
  • CloudWatch로 쉬운 모니터링
  • RAM 증가 → CPU/네트워크도 향상

4. 지원 언어 & 통합

지원 언어

언어비고
Node.js (JavaScript)-
Python-
Java-
C# (.NET Core) / PowerShell-
Ruby-
Custom Runtime APIRust, Go 등
Container ImageLambda Runtime API 구현 필수

⚠️ 임의 Docker 이미지는 ECS/Fargate 권장

주요 통합 서비스

S3, DynamoDB, Kinesis, SNS, SQS
API Gateway, CloudFront (Lambda@Edge)
CloudWatch Events/EventBridge, Cognito
CloudWatch Logs

5. Lambda 사용 예시

예시 1: S3 썸네일 생성

S3 (이미지 업로드) → Lambda (썸네일 생성) → S3 (썸네일 저장)
 DynamoDB (메타데이터)

예시 2: Serverless CRON Job

EventBridge (매 1시간) → Lambda (작업 수행)

6. Lambda 호출 유형

6.1 동기 호출 (Synchronous)

Client SDK/CLI Lambda Response (즉시 반환)
Client API Gateway Lambda Response
특징설명
응답즉시 반환
에러 처리클라이언트 측 (재시도, Exponential Backoff)

동기 호출 서비스:

  • User Invoked: ALB, API Gateway, CloudFront (Lambda@Edge), S3 Batch
  • Service Invoked: Cognito, Step Functions
  • Other: Lex, Alexa, Kinesis Data Firehose

6.2 비동기 호출 (Asynchronous)

S3 (새 파일) → Event Queue → Lambda → 처리

                   └─→ 실패 재시도 (최대 3회)
                           └─→ DLQ (SNS/SQS)
특징설명
재시도3회 (1분 → 2분 대기)
멱등성처리 로직은 idempotent 해야 함
DLQSNS 또는 SQS로 실패 처리
장점결과 대기 불필요 → 대량 처리에 유용

비동기 호출 서비스:

  • S3, SNS
  • CloudWatch Events / EventBridge
  • CodeCommit, CodePipeline
  • CloudWatch Logs, SES, CloudFormation
  • AWS Config, IoT

6.3 Event Source Mapping

Kinesis/DynamoDB Streams/SQS

    Event Source Mapping (Poll)


    Lambda (배치로 동기 호출)
특징설명
대상Kinesis, DynamoDB Streams, SQS
방식Polling (Lambda가 소스에서 레코드 가져옴)
호출동기 (배치 단위)

7. ALB + Lambda 통합

구조

Client ALB Target Group Lambda
              (HTTP→JSON)     (JSON→HTTP)
  • Lambda를 Target Group에 등록
  • ALB가 HTTP를 JSON으로 변환하여 Lambda 호출
  • Lambda 응답을 HTTP로 변환하여 클라이언트에 반환

Multi-Value Headers

URL: http://example.com/path?name=foo&name=bar
 
 Lambda Event:
{
  "queryStringParameters": {
    "name": ["foo", "bar"]
  }
}

8. S3 Events → Lambda

S3 Event 유형

  • S3:ObjectCreated
  • S3:ObjectRemoved
  • S3:ObjectRestore
  • S3:Replication

특징

항목설명
필터링객체 이름 필터 가능 (*.jpg)
지연보통 초 단위, 간혹 1분 이상
중복비버저닝 버킷에서 동시 쓰기 시 이벤트 누락 가능

💡 모든 쓰기에 이벤트 보장하려면 버전 관리 활성화

메타데이터 동기화 패턴

S3 (새 파일) → Lambda → DynamoDB/RDS (메타데이터 저장)

9. Streams & Lambda (Kinesis/DynamoDB)

특징

항목설명
IteratorShard당 1개 생성
순서Partition Key 기준 순서 보장
데이터스트림에서 제거 안 됨 (다른 Consumer도 읽기 가능)
병렬Shard당 최대 10개 배치 동시 처리

에러 처리

기본 동작설명
재처리전체 배치 재처리 (성공 또는 만료까지)
Shard 일시정지순서 보장을 위해 에러 해결까지 중지

설정 옵션:

  • 오래된 이벤트 폐기
  • 재시도 횟수 제한
  • 에러 시 배치 분할 (Lambda 타임아웃 대응)
  • 폐기된 이벤트 → Destination으로 전송

10. SQS & Lambda

특징

항목설명
PollingLong Polling
배치 크기1~10 메시지
Visibility TimeoutLambda 타임아웃의 6배 권장
DLQSQS Queue에 설정 (Lambda DLQ는 비동기 전용)

스케일링

Queue 유형스케일링
Standard분당 60개 인스턴스 추가, 최대 1000개 동시 배치
FIFO활성 Message Group 수만큼 스케일링

11. Lambda Event & Context Objects

Event Object

  • JSON 형식 문서
  • 호출 서비스의 데이터 포함
  • 예: 입력 인자, 서비스별 인자

Context Object

  • 호출, 함수, 런타임 환경 정보
  • 예: aws_request_id, function_name, memory_limit_in_mb
def lambda_handler(event, context):
    print(event)  # 입력 데이터
    print(context.aws_request_id)  # 요청 ID
    print(context.function_name)  # 함수 이름

12. Lambda Destinations

비동기 호출 Destinations

결과대상
성공SQS, SNS, Lambda, EventBridge
실패SQS, SNS, Lambda, EventBridge

💡 AWS는 DLQ보다 Destinations 권장 (둘 다 사용 가능)

Event Source Mapping Destinations

  • 폐기된 이벤트 → SQS, SNS

13. Lambda IAM

Execution Role (실행 역할)

  • Lambda가 AWS 서비스에 접근하는 권한
관리형 정책용도
AWSLambdaBasicExecutionRoleCloudWatch Logs 업로드
AWSLambdaKinesisExecutionRoleKinesis 읽기
AWSLambdaDynamoDBExecutionRoleDynamoDB Streams 읽기
AWSLambdaSQSQueueExecutionRoleSQS 읽기
AWSLambdaVPCAccessExecutionRoleVPC 배포
AWSXRayDaemonWriteAccessX-Ray 추적

💡 함수당 하나의 Execution Role 권장

Resource-based Policy

  • 다른 계정/서비스가 Lambda를 호출할 수 있도록 허용
  • S3 버킷 정책과 유사

14. Lambda 환경 변수 & 모니터링

환경 변수

  • Key/Value 쌍 (String)
  • 코드 수정 없이 동작 변경
  • KMS로 암호화 가능 (비밀 저장)

CloudWatch Logs

  • Lambda 실행 로그 저장
  • Execution Role에 CloudWatch 쓰기 권한 필요

CloudWatch Metrics

메트릭설명
Invocations호출 수
Duration실행 시간
Concurrent Executions동시 실행 수
Error count에러 수
Throttles스로틀링 수
Iterator AgeKinesis/DynamoDB 지연

X-Ray 추적

  • Lambda 콘솔에서 Active Tracing 활성화
  • X-Ray Daemon 자동 실행
  • AWSXRayDaemonWriteAccess 정책 필요

15. Edge Functions (CloudFront)

개요

  • CloudFront 배포에 연결하는 코드
  • 사용자에게 가까운 위치에서 실행 → 지연시간 최소화
  • 서버리스, 전역 배포

CloudFront Functions vs Lambda@Edge

항목CloudFront FunctionsLambda@Edge
언어JavaScriptNode.js, Python
처리량수백만 req/s수천 req/s
트리거Viewer Request/ResponseViewer + Origin Request/Response
실행 시간< 1ms5~10초
메모리2MB128MB ~ 10GB
패키지 크기10KB1~50MB
네트워크/파일 접근
Request Body 접근
비용저렴 (1/6)비쌈

사용 사례

CloudFront Functions:

  • Cache Key 정규화
  • 헤더 조작
  • URL 리다이렉트
  • JWT 검증

Lambda@Edge:

  • 긴 실행 시간 필요
  • 외부 라이브러리 (AWS SDK 등)
  • 네트워크 호출 필요
  • HTTP Body 접근 필요

16. Lambda in VPC

기본 동작

Lambda (기본) → AWS 소유 VPC에서 실행

                    ├─→ Public Internet
                    └─→ Private VPC (RDS, ElastiCache) ❌

VPC 내 Lambda 배포

┌─────────────────── VPC ───────────────────┐

   Private Subnet
   ┌─────────────────────────────────────┐

  Lambda ──(ENI)──→ RDS

   └─────────────────────────────────────┘

└────────────────────────────────────────────┘
 
필요 설정:
 VPC ID
 Subnet IDs
 Security Group IDs
 AWSLambdaVPCAccessExecutionRole

VPC 내 Lambda → 인터넷 접근

┌─────────────────── VPC ───────────────────┐

   Private Subnet          Public Subnet
   ┌──────────────┐       ┌──────────────┐
   Lambda     │──────▶│ NAT Gateway
   └──────────────┘       └──────┬───────┘

                           ┌──────▼───────┐
 IGW
                           └──────┬───────┘
└──────────────────────────────────┼─────────┘


                            Public Internet
 
 VPC Lambda는 인터넷 접근 불가 (기본)
 Public Subnet에 배포해도 Public IP 없음
 Private Subnet + NAT Gateway 필요
 VPC Endpoint로 AWS 서비스 접근 (NAT 없이)

💡 CloudWatch Logs는 VPC Endpoint/NAT 없이도 동작


17. Lambda 구성

RAM & CPU

항목
RAM128MB ~ 10GB (1MB 단위)
vCPURAM에 비례
1 vCPU1,792MB RAM
최대 vCPU6개 (멀티스레딩 필요)

💡 CPU 집약적 작업 → RAM 증가

Timeout

  • 기본: 3초
  • 최대: 900초 (15분)

/tmp 디렉토리

  • 임시 파일 저장 공간
  • 최대 10GB
  • Execution Context 동결 시 유지 (캐시 역할)
  • 영구 저장 → S3 사용
  • 암호화 필요 시 → KMS Data Keys 직접 생성

18. Execution Context

개념

  • Lambda 코드의 외부 의존성을 초기화하는 임시 런타임 환경
  • 다음 호출에서 재사용 가능 → 초기화 시간 절약

Best Practice

# ❌ BAD - 매 호출마다 연결 생성
def lambda_handler(event, context):
    db = connect_to_database()
    # ...
 
# ✅ GOOD - 핸들러 외부에서 연결 생성 (재사용)
db = connect_to_database()
 
def lambda_handler(event, context):
    # db 재사용
    # ...

19. Lambda Layers

용도

  • Custom Runtime (C++, Rust)
  • 의존성 외부화 (재사용)

장점

Without Layers:
┌─────────────────────────────┐
 function.py
 + heavy_library (30MB)      │
 = 30.02MB 패키지
└─────────────────────────────┘
 
With Layers:
┌───────────────────┐    ┌─────────────────────┐
 function.py (20KB)│───▶│ Layer: library (30MB)│
└───────────────────┘    └─────────────────────┘

                         여러 함수에서 공유

제한

  • 함수당 최대 5개 Layer
  • 250MB (압축 해제 후)

20. Lambda Storage 옵션 비교

옵션최대 크기지속성유형공유
/tmp10GB임시파일 시스템함수 내
Layers250MB영구아카이브함수 간 ✅
S3무제한영구객체전역 ✅
EFS무제한영구파일 시스템전역 ✅

EFS 마운트

  • VPC 내 Lambda에서만 사용 가능
  • EFS Access Point 필요
  • ⚠️ 연결 제한 주의 (함수 인스턴스 1개 = 1 연결)

21. Lambda Concurrency (동시성)

기본 제한

  • 리전당 1,000개 동시 실행

Reserved Concurrency (예약 동시성)

  • 특정 함수에 동시성 제한/보장
  • 다른 함수가 모든 동시성 소진 방지

Throttling

호출 유형Throttle 동작
동기429 ThrottleError 반환
비동기자동 재시도 → DLQ

Concurrency 문제 예시

ALB/API Gateway (많은 사용자) ──┐

SDK/CLI (소수 사용자) ──────────┼──▶ Lambda (1000 동시 실행)

                           THROTTLE!

Reserved Concurrency로 함수별 제한 설정


22. Cold Start & Provisioned Concurrency

Cold Start

  • 새 인스턴스 생성 시 초기화 시간 발생
  • 코드, 의존성, SDK 로드
  • 첫 요청 지연 발생

Provisioned Concurrency

  • 함수 호출 전에 동시성 미리 할당
  • Cold Start 완전 방지
  • Application Auto Scaling으로 관리 가능
┌─────────────────────────────────────────┐

  ┌─────────────┐  ┌─────────────┐
 Unreserved  Reserved
 Concurrency Concurrency

 ┌─────────┐
 │Provisioned│
 │Concurrency│
 └─────────┘
  └─────────────┘  └─────────────┘

        Account Concurrency Limit
└─────────────────────────────────────────┘

23. Lambda 배포

의존성 포함

언어방법
Node.jsnpm + node_modules/
Pythonpip --target
Java.jar 파일 포함

업로드 방식

크기방법
< 50MBLambda에 직접 업로드
≥ 50MBS3에 업로드 후 참조

💡 AWS SDK는 기본 포함 (별도 패키징 불필요)

Container Image

# Lambda Runtime API 구현 이미지 사용
FROM amazon/aws-lambda-nodejs:12
 
COPY app.js package*.json ./
RUN npm install
 
CMD ["app.lambdaHandler"]
항목
최대 크기10GB
저장소ECR
테스트Lambda Runtime Interface Emulator

CloudFormation 배포

Inline (간단한 함수):

Code:
  ZipFile: |
    def handler(event, context):
        return "Hello"

S3 (의존성 포함):

Code:
  S3Bucket: my-bucket
  S3Key: code.zip
  S3ObjectVersion: abc123 # 버전 관리 시

⚠️ S3 코드 업데이트 시 S3ObjectVersion 변경 필수 (아니면 CloudFormation이 업데이트 안 함)


24. Lambda Versions & Aliases

Versions

$LATEST (mutable) ← 개발 중

    ├─→ V1 (immutable)
    ├─→ V2 (immutable)
    └─→ V3 (immutable)
항목설명
$LATEST개발 버전 (가변)
V1, V2...발행된 버전 (불변)
ARN버전별 고유 ARN

Aliases

$LATEST ← DEV Alias
V2 TEST Alias
V1 (95%) + V2 (5%) ← PROD Alias (Canary)
항목설명
용도버전에 대한 포인터
가변성가변 (버전은 불변)
Canary가중치로 트래픽 분할
제한Alias는 다른 Alias 참조 불가

25. Lambda & CodeDeploy

배포 전략

전략설명
LinearN분마다 X% 증가
CanaryX%로 시작 → 일정 시간 후 100%
AllAtOnce즉시 100%

예시:

  • Linear10PercentEvery3Minutes
  • Canary10Percent5Minutes

AppSpec.yml

version: 0.0
Resources:
  - MyFunction:
      Type: AWS::Lambda::Function
      Properties:
        Name: MyFunction
        Alias: PROD
        CurrentVersion: 1
        TargetVersion: 2

Pre/Post Traffic Hooks

  • 트래픽 전환 전후 Lambda 함수로 헬스 체크

26. Lambda Function URL

개요

  • Lambda 전용 HTTP(S) 엔드포인트
  • 형식: https://<url-id>.lambda-url.<region>.on.aws
  • Public Internet으로만 접근
  • PrivateLink 미지원

보안

AuthType설명
NONE공개 접근 (Resource Policy로 제어)
AWS_IAMIAM 인증 (lambda:InvokeFunctionUrl 필요)

Cross-Account 접근:

  • Same Account: Identity-based OR Resource-based Allow
  • Cross Account: Identity-based AND Resource-based Allow

CORS

  • 다른 도메인에서 호출 시 CORS 설정 필요

27. Lambda Limits (리전당)

실행 제한

항목
메모리128MB ~ 10GB
실행 시간최대 900초 (15분)
환경 변수4KB
/tmp512MB ~ 10GB
동시 실행1000 (증가 요청 가능)

배포 제한

항목
압축 패키지50MB
압축 해제 후250MB
환경 변수4KB

28. Lambda Best Practices

핸들러 외부에서 초기화

# ✅ 핸들러 외부에서 초기화 (재사용)
import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('MyTable')
 
def lambda_handler(event, context):
    # table 재사용
    return table.get_item(...)

환경 변수 활용

  • DB 연결 문자열, S3 버킷 이름
  • 비밀번호 → KMS 암호화

기타

  • 배포 패키지 최소화
  • Layers 활용
  • Lambda Limits 숙지
  • 재귀 호출 금지 (Lambda가 자기 자신 호출 ❌)

핵심 요약

호출 유형

유형서비스특징
동기ALB, API Gateway, SDK즉시 응답
비동기S3, SNS, EventBridge재시도 3회, DLQ
Event Source MappingKinesis, DynamoDB, SQSPolling, 배치

VPC & 네트워킹

상황설정
Private 리소스 접근VPC 배포
인터넷 접근NAT Gateway
AWS 서비스 접근VPC Endpoint

동시성

개념설명
Reserved함수별 동시성 제한/보장
ProvisionedCold Start 방지

Edge Functions

유형용도
CloudFront Functions간단한 Viewer 처리, 저렴
Lambda@Edge복잡한 처리, Origin 접근