메인 콘텐츠로 건너뛰기

AWS ECS와 Lambda를 결합한 하이브리드 서버리스 아키텍처

설탕사과
설탕사과
조회수 22
요약

하이브리드 구조의 기본 아이디어

전통적 서버리스인 Lambda는 짧은 작업, ECS는 지속적 과업에 각각 강점이 있습니다. 이 둘을 함께 쓰면, 꾸준한 작업과 갑작스러운 트래픽에 모두 유연하게 대응할 수 있습니다.

언제 쓰면 좋은가?

  • 백그라운드 작업을 컨테이너 환경에서 안정적으로 처리할 때

  • 갑작스런 트래픽이 몰릴 땐 ECS로 충분히 대응하기 어려울 때

  • ECS를 과도하게 할당하지 않고 비용 최적화를 원할 때

  • Lambda와 ECS에서 거의 같은 코드베이스를 활용하고 싶을 때

활용 예시

  • 실시간 데이터 처리 파이프라인: ECS는 꾸준히 스트림을 처리, Lambda는 갑자기 데이터가 몰릴 때 추가로 대응

  • PDF 즉시 생성: ECS에서 대량 작업, Lambda로 단건 작업 처리

  • 이미지/영상 처리 대기열 관리

주요 구성 요소와 역할

  • SQS Queue: 모든 작업이 일단 여기에 들어와 대기

  • ECS (Fargate): SQS에서 메시지를 읽어 안정적으로 처리

  • Lambda: SQS 대기열이 쌓이면 즉시 자동 확장해 빠르게 작업을 분산 처리

  • CloudWatch: SQS 대기 상태를 모니터링, 필요한 경우 Lambda의 동시 실행 수를 늘림

  • 공유 저장소: 결과는 S3나 DynamoDB 등에 저장

작동 방식 한눈에 보기

  1. 작업이 SQS로 들어옴

  2. ECS가 꾸준한 속도로 메시지를 처리

  3. 대기열이 일정 기준(수량 또는 지연시간) 이상 쌓이면 Lambda가 즉시 추가로 투입

  4. Lambda가 대기열을 소진하면 자동으로 중지

  5. ECS는 중단 없이 평상시 작업량을 계속 소화

인프라 코드 예시 (Terraform 기반)

아래는 각 리소스의 선언 코드 예시입니다.

resource aws_sqs_queue job_queue {
  name = job-queue
  visibility_timeout_seconds = 300
}

resource aws_ecs_cluster main {
  name = hybrid-cluster
}

resource aws_ecs_task_definition ecs_task {
  family                   = ecs-worker
  requires_compatibilities = [FARGATE]
  cpu                      = 512
  memory                   = 1024
  network_mode             = awsvpc
  container_definitions    = jsonencode([
    {
      name      = worker
      image     = 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-worker:latest
      essential = true
      environment = [
        { name = SQS_QUEUE_URL, value = aws_sqs_queue.job_queue.url }
      ]
    }
  ])
}

장점 요약

  • 비용효율: ECS는 평상시 작업을 저렴하게 처리, Lambda는 필요할 때만 실행되어 불필요한 요금 발생 없음

  • 즉각적인 확장성: Lambda는 ECS보다 빠르게 트래픽 증가에 대응

  • 코드 재사용성: Lambda와 ECS 모두 거의 같은 코드로 운영 가능

  • 내구성: SQS 사용으로 작업 손실 없이 안정적

주의할 점

  • 중복 처리 방지: ECS와 Lambda가 동시에 SQS 메시지를 읽으므로 메시지 가시성 타임아웃 설정이 중요

  • Lambda 콜드 스타트: Lambda가 처음 실행 시 다소 느릴 수 있으나, 주요 작업은 ECS가 계속 유지

  • 비용 통제 필요: 트래픽 급증시 Lambda 요금이 급등할 수 있어 모니터링 필요

결론: 최적의 균형점

Lambda의 즉각 대응력과 ECS의 지속적 처리 능력을 결합하면 예측 가능한 작업과 갑작스런 스파이크를 동시에 잡을 수 있습니다. 서버를 직접 관리하지 않아도, 비용과 성능 모두에서 생산적인 아키텍처를 설계할 수 있습니다.


출처 : Serverless with a Twist: Mixing Lambda and ECS for Perfect Scalability | by AWS Cloud Architect | Aug, 2025 | Medium