Step Functions로 Lambda 함수 오케스트레이션
AWS Step Functions는 Lambda 함수를 다른 AWS 서비스와 조정하기 위한 시각적 워크플로 오케스트레이션을 제공합니다. 220개 이상의 AWS 서비스와의 네이티브 통합 및 완전관리형 제로 유지 관리 인프라를 제공하므로 Step Functions는 시각적 워크플로 설계 및 완전관리형 서비스 통합이 필요한 경우에 적합합니다.
워크플로 로직과 비즈니스 로직이 함께 존재하는 Lambda 내에서 표준 프로그래밍 언어를 사용한 오케스트레이션의 경우 Lambda 지속성 함수를 고려하세요. 이러한 옵션 중에서 선택하는 데 도움이 필요하면 지속성 함수 또는 Step Functions를 참조하세요.
예를 들어, 주문을 처리하려면 주문 세부 정보를 검증하고, 인벤토리 수준을 확인하고, 결제를 처리하고, 인보이스를 생성해야 할 수 있습니다. 각 태스크에 대해 별도의 Lambda 함수를 작성하고 Step Functions를 사용하여 워크플로를 관리합니다. Step Functions는 함수 간의 데이터 흐름을 조정하고 각 단계에서 오류를 처리합니다. 이렇게 분리하면 워크플로가 더 복잡해질수록 시각화, 수정 및 유지 관리가 더 쉬워집니다.
Lambda에서 Step Functions를 사용해야 하는 경우
다음 시나리오는 Step Functions가 Lambda 기반 애플리케이션의 오케스트레이션에 특히 적합한 경우의 좋은 예입니다.
순차적 처리
순차적 처리는 한 태스크가 완료되어야 다음 태스크가 시작되는 것을 말합니다. 예를 들어 주문 처리 시스템에서는 주문 검증이 완료될 때까지 결제 처리를 시작할 수 없으며 인보이스 생성은 결제 확인을 기다려야 합니다. 각 태스크에 대해 별도의 Lambda 함수를 작성하고 Step Functions를 사용하여 시퀀스를 관리하고 함수 간 데이터 흐름을 처리합니다.
단일 Lambda 함수가 다음을 통해 전체 주문 처리 워크플로를 관리합니다.
순차적으로 다른 Lambda 함수 간접 호출
각 함수의 응답 구문 분석 및 검증
오류 처리 및 복구 로직 구현
함수 간 데이터 흐름 관리
두 개의 Lambda 함수를 사용합니다. 하나는 주문을 검증하는 데 사용하고, 다른 하나는 결제를 처리하는 데 사용합니다. Step Functions가 다음을 통해 이러한 함수를 조정합니다.
올바른 순서로 태스크 실행
함수 간 데이터 전달
각 단계에서 오류 처리 구현
Choice 상태를 사용하여 유효한 주문만 결제로 진행되도록 하기
예워크플로 그래프
참고
코드 우선 대안: 코드 기반 체크포인팅 및 재시도를 사용한 순차 처리는 Lambda 지속성 함수 단계를 참조하세요.
복잡한 오류 처리
Lambda는 비동기식 간접 호출 및 이벤트 소스 매핑을 위한 재시도 기능을 제공하는 반면, Step Functions는 복잡한 워크플로를 위한 보다 정교한 오류 처리를 제공합니다. 지수 백오프를 사용하여 자동 재시도를 구성하고 다양한 유형의 오류에 대해 서로 다른 재시도 정책을 설정할 수 있습니다. 재시도가 소진되면 Catch를 사용하여 오류를 폴백 상태로 라우팅합니다. 이는 여러 함수와 서비스를 조정하는 워크플로 수준 오류 처리가 필요한 경우에 특히 유용합니다.
상태 시스템의 Lambda 함수 오류 처리에 대한 자세한 내용은 The AWS Step Functions Workshop의 Handling errors
단일 Lambda 함수가 다음을 모두 처리합니다.
-
결제 처리 서비스 직접 호출 시도
-
결제 서비스를 사용할 수 없는 경우 함수가 기다렸다가 나중에 다시 시도함
-
대기 시간에 대한 사용자 지정 지수 백오프 구현
-
모든 시도 실패 후 오류 파악 및 다른 흐름 선택
결제 처리에만 초점을 맞춘 단일 Lambda 함수를 사용합니다. Step Functions가 다음을 통해 오류 처리를 관리합니다.
오류 유형에 따라 다양한 재시도 정책 적용
적절한 폴백 상태로 다양한 유형의 오류 라우팅
오류 처리 상태 및 기록 유지
예워크플로 그래프
참고
코드 우선 대안: 지속성 함수는 구성 가능한 재시도 전략을 통해 try-catch 오류 처리를 제공합니다. 지속성 함수의 오류 처리를 참조하세요.
조건부 워크플로 및 사람 승인
Step Functions Choice 상태를 사용하여 함수 출력에 따라 워크플로를 라우팅하고 waitForTaskToken 접미사를 사용하여 사람 결정을 위해 워크플로를 일시 중지합니다. 예를 들어 신용 한도 증가 요청을 처리하려면 Lambda 함수를 사용하여 위험 요소를 평가합니다. 그런 다음 Step Functions를 사용하여 위험도가 높은 요청을 수동 승인으로 라우팅하고 위험도가 낮은 요청을 자동 승인으로 라우팅합니다.
콜백 태스크 토큰 통합 패턴을 사용하는 예시 워크플로를 배포하려면 The AWS Step Functions Workshop의 Callback with Task Token
단일 Lambda 함수가 다음을 통해 복잡한 승인 워크플로를 관리합니다.
중첩된 조건부 로직을 구현하여 신용 요청 평가
요청 금액에 따라 다른 승인 함수 간접 호출
여러 승인 경로 및 결정 지점 관리
대기 중인 승인 상태 추적
승인을 위한 제한 시간 및 알림 로직 구현
3개의 Lambda 함수를 사용합니다. 하나는 각 요청의 위험을 평가하는 데 사용하고, 다른 하나는 위험도가 낮은 요청을 승인하는 데 사용하고, 나머지 하나는 위험도가 높은 요청을 검토를 위해 관리자에게 라우팅하는 데 사용합니다. Step Functions가 다음을 통해 워크플로를 관리합니다.
Choice 상태를 사용하여 금액 및 위험 수준에 따라 요청 라우팅
사람 승인을 기다리는 동안 실행 일시 중지
대기 중인 승인에 대한 제한 시간 관리
각 요청의 현재 상태에 대한 가시성 제공
예워크플로 그래프
참고
코드 우선 대안: 지속성 함수는 휴먼 인 더 루프(human-in-the-loop) 워크플로에 대한 콜백을 지원합니다. 지속성 함수의 콜백을 참조하세요.
병렬 처리
Step Functions가 병렬 처리를 처리하는 3가지 방법을 제공합니다.
-
Parallel 상태는 워크플로의 여러 브랜치를 동시에 실행합니다. 이미지 메타데이터를 추출하는 동안 썸네일을 생성하는 등 여러 함수를 병렬로 실행해야 할 때 이 상태를 사용합니다.
-
Inline Map 상태는 최대 40회의 동시 반복으로 데이터 배열을 처리합니다. 각 항목에 대해 동일한 작업을 수행해야 하는 중소 규모의 데이터세트에 이 상태를 사용합니다.
-
Distributed Map 상태는 최대 1만 개의 동시 실행으로 대규모 병렬 처리를 처리하여 JSON 배열과 Amazon Simple Storage Service(Amazon S3) 데이터 소스를 모두 지원합니다. 대규모 데이터세트를 처리하거나 더 높은 동시성이 필요할 때 이 상태를 사용합니다.
단일 Lambda 함수가 다음을 통해 병렬 처리 관리를 시도합니다.
동시에 여러 이미지 처리 함수 간접 호출
사용자 지정 병렬 실행 로직 구현
각 병렬 태스크에 대한 제한 시간 및 오류 처리 관리
모든 함수에서 결과 수집 및 집계
3개의 Lambda 함수를 사용합니다. 하나는 썸네일 이미지를 생성하는 데 사용하고, 다른 하나는 워터마크를 추가하는 데 사용하고, 다른 하나는 메타데이터를 추출하는 데 사용합니다. Step Functions가 다음을 통해 이러한 함수를 관리합니다.
Parallel 상태를 사용하여 동시에 모든 함수 실행
정렬된 배열로 각 함수의 결과 수집
모든 병렬 실행에서 제한 시간 및 오류 처리 관리
모든 병렬 브랜치가 완료된 경우에만 진행
예워크플로 그래프
참고
코드 우선 대안: 지속성 함수는 parallel() 및 map() 작업을 제공합니다. 병렬 실행을 참조하세요.
Lambda에서 Step Functions를 사용하지 않아야 하는 경우
모든 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는 내장 데이터 카탈로그와 스키마 관리 기능이 필요할 때 특히 유용합니다.
-
데이터 분석: 페타바이트 규모의 데이터 분석, 특히 Apache Hadoop 에코시스템 도구가 필요하거나 Lambda의 메모리 제한을 초과하는 기계 학습 워크로드에 Amazon EMR을 사용합니다.
CPU 집약적 워크로드
Step Functions는 CPU 집약적 태스크를 오케스트레이션할 수 있는 반면, Lambda 함수는 제한된 CPU 리소스로 인해 이러한 워크로드에 부적합할 수 있습니다. 워크플로 내 컴퓨팅 집약적 작업의 경우 다음 대안을 고려하세요.
-
컨테이너 오케스트레이션: Step Functions를 사용하여 보다 일관되고 확장 가능한 컴퓨팅 리소스를 위해 Amazon Elastic Container Service(Amazon ECS) 태스크를 관리합니다.
-
배치 처리: 지속적인 CPU 사용이 필요한 컴퓨팅 집약적 배치 작업을 관리하기 위해 AWS Batch를 Step Functions와 통합합니다.