Step Functions로 Lambda 함수 오케스트레이션
여러 태스크를 관리하거나, 재시도 로직을 구현하거나, 브랜치 로직을 포함하는 Lambda 함수는 안티 패턴입니다. 대신 단일 태스크를 수행하는 Lambda 함수를 작성하고 AWS Step Functions를 사용하여 애플리케이션 워크플로를 오케스트레이션하는 것이 좋습니다.
예를 들어, 주문을 처리하려면 주문 세부 정보를 검증하고, 인벤토리 수준을 확인하고, 결제를 처리하고, 인보이스를 생성해야 할 수 있습니다. 각 태스크에 대해 별도의 Lambda 함수를 작성하고 Step Functions를 사용하여 워크플로를 관리합니다. Step Functions는 함수 간의 데이터 흐름을 조정하고 각 단계에서 오류를 처리합니다. 이렇게 분리하면 워크플로가 더 복잡해질수록 시각화, 수정 및 유지 관리가 더 쉬워집니다.
Lambda에서 Step Functions를 사용해야 하는 경우
다음 시나리오는 Step Functions를 사용하여 Lambda 기반 애플리케이션을 오케스트레이션하는 경우의 좋은 예입니다.
순차적 처리
순차적 처리는 한 태스크가 완료되어야 다음 태스크가 시작되는 것을 말합니다. 예를 들어 주문 처리 시스템에서는 주문 검증이 완료될 때까지 결제 처리를 시작할 수 없으며 인보이스 생성은 결제 확인을 기다려야 합니다. 각 태스크에 대해 별도의 Lambda 함수를 작성하고 Step Functions를 사용하여 시퀀스를 관리하고 함수 간 데이터 흐름을 처리합니다.
단일 Lambda 함수가 다음을 통해 전체 주문 처리 워크플로를 관리합니다.
순차적으로 다른 Lambda 함수 간접 호출
각 함수의 응답 구문 분석 및 검증
오류 처리 및 복구 로직 구현
함수 간 데이터 흐름 관리
두 개의 Lambda 함수를 사용합니다. 하나는 주문을 검증하는 데 사용하고, 다른 하나는 결제를 처리하는 데 사용합니다. Step Functions가 다음을 통해 이러한 함수를 조정합니다.
올바른 순서로 태스크 실행
함수 간 데이터 전달
각 단계에서 오류 처리 구현
Choice 상태를 사용하여 유효한 주문만 결제로 진행되도록 하기
예 워크플로 그래프

복잡한 오류 처리
Lambda는 비동기식 간접 호출 및 이벤트 소스 매핑을 위한 재시도 기능을 제공하는 반면, Step Functions는 복잡한 워크플로를 위한 보다 정교한 오류 처리를 제공합니다. 지수 백오프를 사용하여 자동 재시도를 구성하고 다양한 유형의 오류에 대해 서로 다른 재시도 정책을 설정할 수 있습니다. 재시도가 소진되면 Catch
를 사용하여 오류를 폴백 상태로 라우팅합니다. 이는 여러 함수와 서비스를 조정하는 워크플로 수준 오류 처리가 필요한 경우에 특히 유용합니다.
상태 시스템의 Lambda 함수 오류 처리에 대한 자세한 내용은 The AWS Step Functions Workshop의 Handling errors
단일 Lambda 함수가 다음을 모두 처리합니다.
-
결제 처리 서비스 직접 호출 시도
-
결제 서비스를 사용할 수 없는 경우 함수가 기다렸다가 나중에 다시 시도함
-
대기 시간에 대한 사용자 지정 지수 백오프 구현
-
모든 시도 실패 후 오류 파악 및 다른 흐름 선택
결제 처리에만 초점을 맞춘 단일 Lambda 함수를 사용합니다. Step Functions가 다음을 통해 오류 처리를 관리합니다.
오류 유형에 따라 다양한 재시도 정책 적용
적절한 폴백 상태로 다양한 유형의 오류 라우팅
오류 처리 상태 및 기록 유지
예 워크플로 그래프

조건부 워크플로 및 사람 승인
Step Functions Choice 상태를 사용하여 함수 출력에 따라 워크플로를 라우팅하고 waitForTaskToken 접미사를 사용하여 사람 결정을 위해 워크플로를 일시 중지합니다. 예를 들어 신용 한도 증가 요청을 처리하려면 Lambda 함수를 사용하여 위험 요소를 평가합니다. 그런 다음 Step Functions를 사용하여 위험도가 높은 요청을 수동 승인으로 라우팅하고 위험도가 낮은 요청을 자동 승인으로 라우팅합니다.
콜백 태스크 토큰 통합 패턴을 사용하는 예시 워크플로를 배포하려면 The AWS Step Functions Workshop의 Callback with Task Token
단일 Lambda 함수가 다음을 통해 복잡한 승인 워크플로를 관리합니다.
중첩된 조건부 로직을 구현하여 신용 요청 평가
요청 금액에 따라 다른 승인 함수 간접 호출
여러 승인 경로 및 결정 지점 관리
대기 중인 승인 상태 추적
승인을 위한 제한 시간 및 알림 로직 구현
3개의 Lambda 함수를 사용합니다. 하나는 각 요청의 위험을 평가하는 데 사용하고, 다른 하나는 위험도가 낮은 요청을 승인하는 데 사용하고, 나머지 하나는 위험도가 높은 요청을 검토를 위해 관리자에게 라우팅하는 데 사용합니다. Step Functions가 다음을 통해 워크플로를 관리합니다.
Choice 상태를 사용하여 금액 및 위험 수준에 따라 요청 라우팅
사람 승인을 기다리는 동안 실행 일시 중지
대기 중인 승인에 대한 제한 시간 관리
각 요청의 현재 상태에 대한 가시성 제공
예 워크플로 그래프

병렬 처리
Step Functions가 병렬 처리를 처리하는 3가지 방법을 제공합니다.
-
Parallel 상태는 워크플로의 여러 브랜치를 동시에 실행합니다. 이미지 메타데이터를 추출하는 동안 썸네일을 생성하는 등 여러 함수를 병렬로 실행해야 할 때 이 상태를 사용합니다.
-
Inline Map 상태는 최대 40회의 동시 반복으로 데이터 배열을 처리합니다. 각 항목에 대해 동일한 작업을 수행해야 하는 중소 규모의 데이터세트에 이 상태를 사용합니다.
-
Distributed Map 상태는 최대 1만 개의 동시 실행으로 대규모 병렬 처리를 처리하여 JSON 배열과 Amazon Simple Storage Service(Amazon S3) 데이터 소스를 모두 지원합니다. 대규모 데이터세트를 처리하거나 더 높은 동시성이 필요할 때 이 상태를 사용합니다.
단일 Lambda 함수가 다음을 통해 병렬 처리 관리를 시도합니다.
동시에 여러 이미지 처리 함수 간접 호출
사용자 지정 병렬 실행 로직 구현
각 병렬 태스크에 대한 제한 시간 및 오류 처리 관리
모든 함수에서 결과 수집 및 집계
3개의 Lambda 함수를 사용합니다. 하나는 썸네일 이미지를 생성하는 데 사용하고, 다른 하나는 워터마크를 추가하는 데 사용하고, 다른 하나는 메타데이터를 추출하는 데 사용합니다. Step Functions가 다음을 통해 이러한 함수를 관리합니다.
Parallel 상태를 사용하여 동시에 모든 함수 실행
정렬된 배열로 각 함수의 결과 수집
모든 병렬 실행에서 제한 시간 및 오류 처리 관리
모든 병렬 브랜치가 완료된 경우에만 진행
예 워크플로 그래프

Lambda에서 Step Functions를 사용하지 않아야 하는 경우
모든 Lambda 기반 애플리케이션이 Step Functions 사용의 이점을 누릴 수 있는 것은 아닙니다. 애플리케이션 아키텍처를 선택할 때 다음 시나리오를 고려하세요.
단순 애플리케이션
복잡한 오케스트레이션이 필요하지 않은 애플리케이션의 경우 Step Functions를 사용하면 불필요한 복잡성이 더해질 수 있습니다. 예를 들어 Amazon SQS 대기열에서 메시지를 처리하거나 Amazon EventBridge 이벤트에 응답하는 경우 Lambda 함수를 직접 간접적으로 호출하도록 이러한 서비스를 구성할 수 있습니다. 마찬가지로 애플리케이션이 간단한 오류 처리 기능을 갖춘 한두 개의 Lambda 함수로만 구성된 경우 직접 Lambda 간접 호출 또는 이벤트 중심 아키텍처를 사용하는 것이 배포 및 유지가 더 간단할 수 있습니다.
복잡한 데이터 처리
Step Functions Distributed Map 상태를 사용하여 Lambda 함수로 대규모 Amazon S3 데이터세트를 동시에 처리할 수 있습니다. 이는 JSON 또는 CSV 파일과 같은 반정형 데이터 처리를 포함한 많은 대규모 병렬 워크로드에 효과적입니다. 그러나 더 복잡한 데이터 변환 또는 고급 분석의 경우 다음 대안을 고려하세요.
-
데이터 변환 파이프라인: 여러 소스의 정형 또는 반정형 데이터를 처리하는 ETL 작업에 AWS Glue를 사용합니다. AWS Glue는 내장 데이터 카탈로그와 스키마 관리 기능이 필요할 때 특히 유용합니다.
-
데이터 분석: 페타바이트 규모의 데이터 분석, 특히 Apache Hadoop 에코시스템 도구가 필요하거나 Lambda의 메모리 제한을 초과하는 기계 학습 워크로드에 Amazon EMR을 사용합니다.
CPU 집약적 워크로드
Step Functions는 CPU 집약적 태스크를 오케스트레이션할 수 있는 반면, Lambda 함수는 제한된 CPU 리소스로 인해 이러한 워크로드에 부적합할 수 있습니다. 워크플로 내 컴퓨팅 집약적 작업의 경우 다음 대안을 고려하세요.
-
컨테이너 오케스트레이션: Step Functions를 사용하여 보다 일관되고 확장 가능한 컴퓨팅 리소스를 위해 Amazon Elastic Container Service(Amazon ECS) 태스크를 관리합니다.
-
배치 처리: 지속적인 CPU 사용이 필요한 컴퓨팅 집약적 배치 작업을 관리하기 위해 AWS Batch를 Step Functions와 통합합니다.