Step Functions로 Lambda 함수 오케스트레이션

Step Functions로 Lambda 함수 오케스트레이션

AWS Step Functions는 Lambda 함수를 다른 AWS 서비스와 조정하기 위한 시각적 워크플로 오케스트레이션을 제공해요. 220개 이상의 AWS 서비스에 대한 네이티브 통합과 완전 관리형·무유지 보수 인프라를 갖춘 Step Functions는 시각적 워크플로 설계와 완전 관리형 서비스 통합이 필요할 때 이상적이에요.

워크플로 로직이 비즈니스 로직 옆 코드에 있는 Lambda 내부 표준 프로그래밍 언어로 오케스트레이션하려면 Lambda 지속 함수(durable functions)를 고려해 보세요. 두 옵션 중 선택을 돕는 내용은 지속 함수 또는 Step Functions를 참고하세요.

예를 들어 주문 처리는 주문 세부 정보 검증, 재고 수준 확인, 결제 처리, 인보이스 생성이 필요할 수 있어요. 각 작업에 대해 별도의 Lambda 함수를 작성하고 Step Functions로 워크플로를 관리하세요. Step Functions는 함수들 사이의 데이터 흐름을 조정하고 각 단계에서 오류를 처리해요. 이렇게 분리하면 워크플로가 더 복잡해질수록 시각화·수정·유지 관리가 쉬워져요.

출처: AWS Lambda 개발자 안내서

본문

언제 Step Functions를 Lambda와 함께 사용하는가

다음 시나리오는 Step Functions가 Lambda 기반 애플리케이션 오케스트레이션에 특히 잘 맞는 좋은 예시예요.

순차 처리

순차 처리는 한 작업이 다음 작업을 시작하기 전에 완료되어야 하는 경우예요. 예를 들어 주문 처리 시스템에서 결제 처리는 주문 검증이 완료될 때까지 시작할 수 없고, 인보이스 생성은 결제 확인을 기다려야 해요. 각 작업에 대해 별도의 Lambda 함수를 작성하고 Step Functions로 순서를 관리하며 함수들 사이의 데이터 흐름을 처리하세요.

안티패턴 예시

단일 Lambda 함수가 다음을 수행하며 전체 주문 처리 워크플로를 관리해요:

  • 다른 Lambda 함수를 순서대로 호출
  • 각 함수의 응답을 파싱하고 검증
  • 오류 처리 및 복구 로직 구현
  • 함수들 사이의 데이터 흐름 관리

권장 접근 방식

주문을 검증하는 함수 하나와 결제를 처리하는 함수 하나, 두 개의 Lambda 함수를 사용하세요. Step Functions는 다음을 수행하며 이 함수들을 조정해요:

  • 작업을 올바른 순서로 실행
  • 함수들 사이에 데이터 전달
  • 각 단계에서 오류 처리 구현
  • Choice 상태를 사용해 유효한 주문만 결제로 진행되도록 보장

예제 워크플로 그래프

주문 검증, 선택 상태, 성공·실패 경로가 있는 결제 처리를 보여주는 Step Functions 워크플로 그래프.

참고
코드 우선 대안: 코드 기반 체크포인트와 재시도를 이용한 순차 처리에 대해서는 Lambda 지속 함수 단계를 참고하세요.

복잡한 오류 처리

Lambda는 비동기식 호출과 이벤트 소스 매핑에 대한 재시도 기능을 제공하지만, Step Functions는 복잡한 워크플로에 대해 더 정교한 오류 처리를 제공해요. 지수 백오프로 자동 재시도를 구성하고 오류 유형별로 다른 재시도 정책을 설정할 수 있죠. 재시도가 소진되면 Catch를 사용해 오류를 폴백 상태로 라우팅해요. 이는 여러 함수와 서비스를 조정하는 워크플로 수준의 오류 처리가 필요할 때 특히 유용해요.

스테이트 머신에서 Lambda 함수 오류를 처리하는 방법에 대해 더 알아보려면 AWS Step Functions Workshop의 오류 처리를 참고하세요.

안티패턴 예시

단일 Lambda 함수가 다음을 모두 처리해요:

  • 결제 처리 서비스 호출 시도
  • 결제 서비스를 사용할 수 없으면 기다렸다가 나중에 다시 시도
  • 대기 시간에 커스텀 지수 백오프 구현
  • 모든 시도가 실패하면 오류를 잡아 다른 흐름 선택

권장 접근 방식

결제 처리에만 집중하는 단일 Lambda 함수를 사용하세요. Step Functions는 다음을 수행하며 오류 처리를 관리해요:

  • 구성 가능한 백오프 기간으로 실패한 작업을 자동 재시도
  • 오류 유형별로 다른 재시도 정책 적용
  • 다양한 유형의 오류를 적절한 폴백 상태로 라우팅
  • 오류 처리 상태와 내역 유지

예제 워크플로 그래프

결제 성공, 결제 무효, 결제 실패 세 가지 결과가 있는 결제 처리 Step Functions 워크플로 그래프.

참고
코드 우선 대안: 지속 함수는 구성 가능한 재시도 전략과 함께 try-catch 오류 처리를 제공해요. 지속 함수의 오류 처리를 참고하세요.

조건부 워크플로 및 인간 승인

Step Functions Choice 상태로 함수 출력에 따라 워크플로를 라우팅하고, waitForTaskToken 접미사로 인간의 결정을 위해 워크플로를 일시 중지할 수 있어요. 예를 들어 신용 한도 증가 요청을 처리하려면 Lambda 함수로 위험 요소를 평가하세요. 그런 다음 Step Functions로 고위험 요청은 수동 승인으로, 저위험 요청은 자동 승인으로 라우팅해요.

콜백 작업 토큰 통합 패턴을 사용하는 예제 워크플로를 배포하려면 AWS Step Functions Workshop의 Task Token을 사용한 콜백을 참고하세요.

안티패턴 예시

단일 Lambda 함수가 다음을 수행하며 복잡한 승인 워크플로를 관리해요:

  • 신용 요청을 평가하는 중첩 조건부 로직 구현
  • 요청 금액에 따라 다른 승인 함수 호출
  • 여러 승인 경로와 결정 지점 관리
  • 보류 중인 승인 상태 추적
  • 승인에 대한 타임아웃 및 알림 로직 구현

권장 접근 방식

세 개의 Lambda 함수를 사용하세요: 각 요청의 위험을 평가하는 함수, 저위험 요청을 승인하는 함수, 고위험 요청을 검토를 위해 관리자에게 라우팅하는 함수. Step Functions는 다음을 수행하며 워크플로를 관리해요:

  • Choice 상태를 사용해 금액과 위험 수준에 따라 요청을 라우팅
  • 인간 승인을 기다리는 동안 실행 일시 중지
  • 보류 중인 승인의 타임아웃 관리
  • 각 요청의 현재 상태에 대한 가시성 제공

예제 워크플로 그래프

위험에 따라 신용 요청 평가가 자동 승인 또는 관리자 승인으로 분기되는 Step Functions 워크플로 그래프.

참고
코드 우선 대안: 지속 함수는 인간 개입(human-in-the-loop) 워크플로에 대한 콜백을 지원해요. 지속 함수의 콜백을 참고하세요.

병렬 처리

Step Functions는 병렬 처리를 처리하는 세 가지 방법을 제공해요:

  • Parallel 상태는 워크플로의 여러 분기를 동시에 실행해요. 이미지 메타데이터를 추출하면서 썸네일을 생성하는 것처럼 서로 다른 함수를 병렬로 실행해야 할 때 사용하세요.
  • Inline Map 상태는 최대 40개의 동시 반복으로 데이터 배열을 처리해요. 각 항목에 같은 작업을 수행해야 하는 소형~중형 데이터 세트에 사용하세요.
  • Distributed Map 상태는 최대 10,000개의 동시 실행으로 대규모 병렬 처리를 처리하며, JSON 배열과 Amazon Simple Storage Service(Amazon S3) 데이터 소스를 모두 지원해요. 대규모 데이터 세트를 처리하거나 더 높은 동시성이 필요할 때 사용하세요.

안티패턴 예시

단일 Lambda 함수가 다음을 수행하며 병렬 처리를 관리하려고 해요:

  • 여러 이미지 처리 함수를 동시에 호출
  • 커스텀 병렬 실행 로직 구현
  • 각 병렬 작업의 타임아웃과 오류 처리 관리
  • 모든 함수의 결과 수집 및 집계

권장 접근 방식

세 개의 Lambda 함수를 사용하세요: 썸네일 이미지를 만드는 함수, 워터마크를 추가하는 함수, 메타데이터를 추출하는 함수. Step Functions는 다음을 수행하며 이 함수들을 관리해요:

  • Parallel 상태로 모든 함수를 동시에 실행
  • 각 함수의 결과를 순서 있는 배열로 수집
  • 모든 병렬 실행에 걸쳐 타임아웃과 오류 처리 관리
  • 모든 병렬 분기가 완료될 때만 진행

예제 워크플로 그래프

썸네일 생성, 워터마크 추가, 메타데이터 추출의 세 병렬 Lambda 함수가 있는 Step Functions 워크플로 그래프.

참고
코드 우선 대안: 지속 함수는 parallel() 및 map() 작업을 제공해요. 병렬 실행을 참고하세요.

언제 Step Functions를 Lambda와 함께 사용하지 않는가

모든 Lambda 기반 애플리케이션이 Step Functions를 사용하면 이득을 보는 것은 아니에요. 애플리케이션 아키텍처를 선택할 때 다음 시나리오를 고려하세요.

간단한 애플리케이션

참고
시각적 설계나 광범위한 서비스 통합이 필요 없는 워크로드에는 Lambda 지속 함수가 워크플로 로직을 Lambda 코드 안에 유지하는 더 간단한 대안일 수 있어요.

복잡한 오케스트레이션이 필요 없는 애플리케이션에는 Step Functions를 사용하면 불필요한 복잡성이 추가될 수 있어요. 예를 들어 Amazon SQS 큐의 메시지를 처리하거나 Amazon EventBridge 이벤트에 응답하는 것뿐이라면 이러한 서비스가 Lambda 함수를 직접 호출하도록 구성할 수 있어요. 마찬가지로 애플리케이션이 간단한 오류 처리를 가진 Lambda 함수 하나 또는 두 개로만 구성된다면 직접 Lambda 호출이나 이벤트 기반 아키텍처가 배포·유지 관리하기 더 쉬울 수 있어요.

복잡한 데이터 처리

Step Functions Distributed Map 상태로 Lambda 함수와 함께 대규모 Amazon S3 데이터 세트를 동시에 처리할 수 있어요. 이는 JSON이나 CSV 파일 같은 반정형 데이터 처리를 포함한 많은 대규모 병렬 워크로드에 효과적이에요. 하지만 더 복잡한 데이터 변환이나 고급 분석에는 다음 대안을 고려하세요:

  • 데이터 변환 파이프라인: 여러 소스의 구조적·반구조적 데이터를 처리하는 ETL 작업에는 AWS Glue를 사용하세요. AWS Glue는 내장 데이터 카탈로그와 스키마 관리 기능이 필요할 때 특히 유용해요.
  • 데이터 분석: 페타바이트 규모의 데이터 분석에는 Amazon EMR을 사용하세요. 특히 Apache Hadoop 에코시스템 도구가 필요하거나 Lambda의 메모리 한도를 초과하는 머신러닝 워크로드에 유용해요.

CPU 집약적 워크로드

Step Functions가 CPU 집약적 작업을 오케스트레이션할 수는 있지만, Lambda 함수는 제한된 CPU 리소스 때문에 이러한 워크로드에는 적합하지 않을 수 있어요. 워크플로 내의 계산 집약적 작업에는 다음 대안을 고려하세요:

  • 컨테이너 오케스트레이션: 더 일관되고 확장 가능한 컴퓨팅 리소스를 위해 Step Functions로 Amazon Elastic Container Service(Amazon ECS) 작업을 관리하세요.
  • 배치 처리: 지속적인 CPU 사용이 필요한 계산 집약적 배치 작업을 관리하려면 Step Functions와 AWS Batch를 통합하세요.

더 알아보기 (Learn more)

  • Step Functions가 Lambda 애플리케이션에 적합한 시나리오(순차·오류·조건부·병렬)와 적합하지 않은 시나리오(간단한 앱·데이터 처리·CPU 집약적)를 비교해 보세요.