본문으로 건너뛰기
김신건의 로그

[AWS] Lambda: 서버리스 함수, 트리거, 동시성

· 수정 · 📖 약 2분 · 876자/단어 #aws #lambda #serverless #cloud #compute
AWS Lambda, serverless function, Lambda invocation, concurrency, provisioned concurrency, Lambda layers

정의

AWS Lambda = 서버리스 함수 실행. 이벤트 트리거함수 실행 → 결과 / 비동기 처리. 서버 관리 0.

사용 상황

상황Lambda 적합성
REST API (API Gateway + Lambda)적합, 짧은 처리
S3 업로드 후 이미지 리사이즈적합, 이벤트 처리
DynamoDB Streams 변경 감지적합, poll 처리
SQS 메시지 소비적합, 자동 스케일
웹소켓 상시 연결 유지부적합, ECS 권장
15분 초과 ML 추론부적합, ECS/Batch 권장
GPU 워크로드부적합, EC2 권장

트리거 종류

flowchart LR
    HTTP["API Gateway / ALB"] --> L[Lambda]
    SQS --> L
    SNS --> L
    Kinesis --> L
    DDB["DynamoDB Streams"] --> L
    S3["S3 events"] --> L
    EB[EventBridge] --> L
    CW["CloudWatch Events"] --> L
    Cognito --> L
트리거모델
API Gateway / ALBsync
SQSasync poll
Kinesis / DynamoDB Streamspoll + ordered
S3 / SNS / EventBridgeevent
CronEventBridge Scheduler

함수 작성

// Node.js
export const handler = async (event, context) => {
  console.log('event', event);
  return {
    statusCode: 200,
    body: JSON.stringify({ message: 'hello' }),
  };
};
# Python
def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'body': json.dumps({'message': 'hello'})
    }

실행 모델

모드의미
Request-Response (sync)호출자가 응답 대기
Asyncinvoke 후 즉시 반환, 재시도 자동
Stream (Kinesis)batch 처리

Concurrency

flowchart LR
    Req["1000 동시 요청"] --> L[Lambda]
    L --> I1["Instance 1"]
    L --> I2["Instance 2"]
    L --> IN["Instance N"]
    Note["account quota: 1000 기본"]
종류의미
Unreserved (기본)account 공통 풀
Reserved concurrency함수에 한도 / 보장 분리
Provisioned concurrency미리 워밍업 + 콜드 스타트 0

Cold Start

sequenceDiagram
    participant Trigger
    participant Lambda
    Trigger->>Lambda: invoke
    Note over Lambda: container 없음
    Lambda->>Lambda: init 50-1000ms
    Lambda->>Lambda: handler 실행
    Lambda-->>Trigger: 응답
    Note over Lambda: 5분 idle 후 종료
Runtime평균 cold start
Node 22~150ms
Python 3.13~200ms
Go~50ms
Rust~30ms
Java500ms-2s
Java + SnapStart~150ms

Cold Start 완화

  1. Provisioned Concurrency: 항상 N개 워밍업.
  2. Lambda SnapStart (Java): snapshot 으로 빠르게.
  3. smaller package (코드 / dependency).
  4. avoid VPC (옛 cold start 5초+, 현재는 빠름).
  5. 함수 분리 (큰 모놀리스 함수 회피).

Memory & CPU

Memory 늘리면 CPU 도 비례 증가. 성능 결정의 단일 dial.

MemoryvCPU
128 MB0.083
1024 MB0.6
1769 MB1.0 (full vCPU)
10240 MB5.78

가격

요금 = (실행 시간 ms) x (Memory GB) x $0.0000166667
     + (실행 횟수) x $0.20/M

짧고 자주 호출되면 호출 비용, 긴 실행 이면 시간 비용. 모니터링 필요.

Layers (공유 코드)

Layers:
  - arn:aws:lambda:us-east-1:123456789012:layer:common-deps:5
  • 여러 함수가 공유.
  • 의존성 분리 → 함수 코드 작아짐.
  • 5 layer per function 한도.

Lambda URLs

API Gateway 없이 Lambda 에 직접 HTTPS endpoint 부여.

# Lambda URL 생성
aws lambda create-function-url-config \
  --function-name my-function \
  --auth-type NONE

# 반환: https://<id>.lambda-url.<region>.on.aws/
항목내용
AuthNONE (공개) 또는 AWS_IAM
비용API Gateway 보다 저렴
기능단순 HTTP 만 지원
적합웹훅, 간단한 API
부적합복잡한 라우팅, 인증 미들웨어

Lambda @ Edge / CloudFront Functions

CloudFront 엣지 로케이션에서 실행 하는 Lambda.

Lambda @ EdgeCloudFront Functions
실행 위치Regional edge450+ POP
런타임Node.js, PythonJS (제한)
실행 시간최대 30초1ms
메모리최대 10GB2MB
용도인증, 변환단순 리다이렉트
// Lambda @ Edge: 요청 헤더에 인증 토큰 확인
exports.handler = async (event) => {
  const request = event.Records[0].cf.request;
  const token = request.headers['authorization']?.[0]?.value;

  if (!token || !isValid(token)) {
    return { status: '401', body: 'Unauthorized' };
  }
  return request;
};

Lambda Extensions

Lambda lifecycle 에 훅 해서 실행되는 사이드카.

Extension Layer
├── Init Phase: extension 초기화
├── Invoke Phase: 함수와 병렬 실행
└── Shutdown Phase: 종료 전 처리 (flush logs 등)
용도예시
로그 수집Datadog, New Relic agent
시크릿 캐시Secrets Manager 사전 fetch
코드 검사RASP (보안 에이전트)

Lambda Powertools

AWS 공식 생산성 라이브러리 (Node.js / Python / Java).

import { Logger } from '@aws-lambda-powertools/logger';
import { Tracer } from '@aws-lambda-powertools/tracer';
import { Metrics, MetricUnit } from '@aws-lambda-powertools/metrics';

const logger = new Logger({ serviceName: 'order-api' });
const tracer = new Tracer({ serviceName: 'order-api' });
const metrics = new Metrics({ namespace: 'MyApp' });

export const handler = async (event: APIGatewayEvent) => {
  logger.info('Processing order', { orderId: event.pathParameters?.id });
  metrics.addMetric('OrderProcessed', MetricUnit.Count, 1);
  // ...
};
기능역할
Logger구조화 JSON 로깅, correlation ID
TracerX-Ray 자동 계측
MetricsEMF 기반 커스텀 메트릭
Idempotency중복 실행 방지
ParametersSSM / Secrets Manager 캐시

Lambda 의 적합 / 부적합

적합부적합
짧은 처리 (< 15분)장시간 처리 (> 15분)
비동기 이벤트 처리지속 연결 (WebSocket idle)
API endpoint극저지연 (cold start 부담)
ETL batch큰 메모리 (10GB 초과)
스케일 spike 흡수GPU 워크로드

흔한 함정

WARNING

  1. VPC 안 Lambda 의 cold start = ENI 생성 지연. 현재는 빠르지만 옛 경험 주의.
  2. handler 안에 DB 연결 = cold start 마다 새 연결. handler 밖 전역 으로 warm reuse.
  3. timeout 너무 짧음 = 무거운 처리 fail. 모니터링 + 늘림.
  4. 동시성 한도 = account 한도 1000 기본. 갑작스런 spike 시 throttling.
  5. Lambda URL + NONE auth = 공개 endpoint. WAF 연결 또는 IAM 인증 필요.
  6. 임시 파일 /tmp 한도 = 512MB 기본 (최대 10GB). 큰 파일 처리 시 S3 사용.

관련 위키

이 글의 용어 (6개)
[AWS] API Gateway: REST/HTTP/WebSocket API 관리cloud
정의 AWS API Gateway 는 REST / HTTP / WebSocket API 를 관리하는 완전관리형 서비스. 인증, 스로틀링, 캐싱, 요청/응답 변환, 로깅을 단일 서…
[AWS] EC2: 인스턴스 타입, AMI, EBScloud
정의 EC2 (Elastic Compute Cloud) = AWS 의 VM 서비스. instance type (CPU / RAM / NW) 결정 + AMI (OS 이미지) + E…
[AWS] EventBridge: 이벤트 버스, 스케줄러, partner sourcescloud
정의 EventBridge = AWS 의 통합 event bus. 옛 CloudWatch Events 의 후계. AWS service 이벤트 + custom 이벤트 + SaaS …
[AWS] Lambda Cold Start: 원인과 완화cloud
정의 Cold Start = Lambda 가 처음 호출 또는 idle 후 다시 호출 시 컨테이너 + 런타임 + 사용자 코드 init 에 소요되는 지연 시간. 사용 상황 (cold…
[AWS] SQS: managed queue, FIFO, DLQcloud
정의 SQS (Simple Queue Service) = AWS 의 완전 관리형 메시지 큐. infinite scale, no provisioning, pay-per-reques…
[AWS] Step Functions: 워크플로 오케스트레이션cloud
정의 Step Functions = 서버리스 워크플로 오케스트레이션. Amazon States Language (ASL, JSON) 으로 상태 기계 정의. 각 단계의 재시도, 에…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기