AWS Step Functions
- AWS 서비스 오케스트레이션 / 비즈니스 프로세스 자동화 / 서버리스 애플리케이션 구축에 사용되는 시각적 워크플로 서비스
- 실패, 재시도, 병렬화, 서비스 통합 등을 관리
- json 형태로 워크플로 정의
- 상태
- Choice : 브랜치 (or 기본 브랜치)로 보낼 조건 테스트
- Fail / Succeed : 워크플로의 실패 / 성공 여부로 실행을 중지
- Pass : 입력값을 출력값에 전달 or 작업을 수행하지 않고 고정된 데이터 주입
- Wait : 특정 날짜/시간동안 지연
- Map : 단계를 동적으로 반복
- Parallel : 브랜치 수행을 병렬적으로 수행
Step Functions - 오류 핸들링
- Step Function 자체에서 오류 처리 메커니즘 정의 가능
- 이를 통해 코드에서의 에러 처리 제외 > 복잡도 감소
- Retry (재시도) / Catch (실패한 경로로 오류 전환) 두가지 방식이 존재
- 사전정의된 에러 코드
- States.ALL : 모든 오류이름과 매칭
- States.Timeout : 타임아웃
- States.TaskFailed : 태스크 실행이 자체적으로 실패
- States.Permission : 태스크 실행을 위한 권한 관련
- Retry
- 오류 발생 시 재시도 관련 처리
- ErrorEquals : 오류 타입 (CustomError, States.TaskFailed ...)
- IntervalSeconds : 재시도 간격
- MaxAttempts : 최대 재시도 횟수 (기본값 3, 0 설정 시 재시도 X)
- BackoffRate : 지수 백오프 수치
- MaxAttempts까지 재시도 후 오류 발생 시 Catch 블록 실행
- Catch
- 실패 경로로 오류 전환
- ErrorEquals : 오류 타입
- ResultPath : 전송되는 입력값의 경로 ("$.error" 설정 시 기본 입력값과 함께 오류 정보도 함께 전송, 오류 분석 및 디버깅 가능)
- Next : 결과를 보낼 상태
- Type : 상태 (Pass 등)
- Result : 응답 결과
- End : 종료여부
Step Functions - 워크플로 비교 Standard vs Express
- Standard
- Max Duration : 최대 1년
- 실행 모델 : 정확히 1회 실행
- 실행 : 초당 약 2000개 워크플로 실행
- 실행 기록 : 콘솔에 최대 90일 기록 / CloudWatch 사용 영구보존 가능
- 비용 : # of 상태전환
- 사용사례 : 멱등성 보장되지 않는 작업 (결제 처리)
- Express
- Max Duration : 최대 5분
- 실행 : 초당 약 10만
- 실행 기록 : 콘솔에서는 기록 불가 / CloudWatch 사용
- 비용 : # of 실행횟수, 실행기간, 메모리 사용량
- 사용사례 : IoT 데이터 수집, 스트리밍 데이터 처리, 모바일 앱 백엔드
- 비동기
- 최소 1회 실행 보장 (오류 발생 시 동일한 작업 2번 실행 가능 / 멱등성 관리 필요)
- 실행 결과 기다리지 않음 (CloudWatch에서 결과 확인)
- ex) 메시지 서비스
- 동기
- 최대 1회 실행 보장 (실패하더라도 워크플로 재시작 X, 재시도 필요 시 사용자가 로직 직접 구현)
- 실행 결과 기다림 (결과를 즉각적으로 응답받아야 하는 경우)
- ex) 마이크로서비스 오케스트레이션
- Gateway or Lambda 함수에서 호출되어 응답 가능
Reference