반응형
이 포스팅은 AWS Step Functions를 통한
마이크로서비스 오케스트레이션 (서비스 조정 패턴) 에 적용 해보기 위해 기록용으로 남기는 글이다.
따라서 이해를 잘 못하고 작성한 내용도 있으니 참고해 주시길 바란다.
- 오케스트레이션
하나의 프로세스가 워크플로우 상태를 관리하고 필요한 서비스를 적절하게 호출
마이크로 서비스 오케스트레이션의 사용 사례는
1. 특정 순서로 Lambda 함수 그룹을 실행하는 워크 플로우 생성
2. 하나의 Lambda 함수의 출력은 다음 Lambda 함수의 입력으로 전달.
3. 워크플로우의 최종 단계에서 결과 제공
마이크로 서비스 아키텍처(MSA) 에서는 서버리스한 환경 구성이라는 장점이 있지만,
워크플로우가 매우 복잡해 기존 Lambda 만으로는 워크플로우에 대한 처리가 매우 어렵다.
따라서 복잡한 워크플로우들을 Step Functions를 통해 다양한 AWS 서비스의 실행 순서를 정의하면
간단하고 직관적으로 구현할 수 있다.
- AWS Step Functions란
AWS Lambda 기능 및 기타 AWS 서비스 기능과 통합하여 비즈니스 크리티컬 애플리케이션을 구축할 수 있는 서버리스 오케스트레이션 서비스이다.
Step Functions는 상태 머신 및 태스크를 기반으로 한다.
Step Functions에서 워크플로우는 일련의 이벤트 기반 단계인 상태 머신이라고 하며,
워크플로의 각 단계를 상태라고 한다.
태스크 상태는 다른 AWS 서비스가 수행하는 작업 단위를 나타낸다.
AWS Lambda 태스크 상태는 임의의 AWS 서비스 또는 API를 호출할 수 있다.
즉, AWS의 여러 서비스들에 대한 실행 순서(워크플로우)를 정의하고 작업을 수행하는 서비스라고 할 수 있다.
- 상태 머신이란?
* 상태머신
> 여러단계로 표현되는 계산 단계의 모음
상태머신은 항상 하나의 시작 상태만 있고 한번에 하나의 상태만 활성된다.
또한 상태머신 실행 시 한 상태에서 다음 상태로 이동하는 것을 상태 전환 이라고 한다.
실행 예)
1 상태머신의 단계 활성화
2 활성상태 입력 받고
3 입력으로 작업 수행 후 출력 생성
개별 상태는 입력을 기반으로 결정을 내리고, 해당 입력에서 작업을 수행하고,
출력을 다른 상태로 전달할 수 있다.
Step Functions의 경우 JSON 기반의 아마존 스테이트 언어 (ASL) 로 워크플로(상태머신)를 정의한다.
- 상태의 종류
- 워크 플로우의 각 단계는 상태라 불리며 다양한 필드와 특징이 있다.
- 각 상태는 이름으로 식별이 된다.
- Type (필수)
-
- {"Type": "Pass"}
- 작업을 수행하지 않고 입력을 출력으로 전달한다. 디버그시 유용하다.
- {"Type": "Task"}
- 상태 머신에 의해 수행되는 하나의 작업 단위를 나타낸다. Lambda로 수행되는 작업일 수도 있고, Batch로 수행되는 작업일 수도 있다.
-
- 외부에서 특정 작업이 발생할 때 까지 기다릴 수 있는 상태이다.
Ex) 대기 상태에서 특정한 비즈니스 작업을 완료 할 때까지 일시 중지 상태로 유지 되고.
완료가 되어 콜백을 호출하면 실행을 재개 할 수 있다. - 콜백이 들어왔을때 상태머신은 판단을 내려야 하는데 이 경우 Task Token을 이용한다.
Task Function이 자동으로 생성해주며 외부에서 Step Functions는 SendTaskSuccess 또는 SendTaskFailure API를 호출한다. 이 때 Task Token을 다시 전달하면 일시 중지된 상태머신이 다시 작동하게 된다. - 특징으로는 실행하려는 Lambda 함수에 ARN을 전달하는 것이 아니라 특수한 리소스 유형을 이용해 호출한다.CallBack 대기
- 외부에서 특정 작업이 발생할 때 까지 기다릴 수 있는 상태이다.
- {"Type": "Choice"}
- 상태 시스템에 논리 브랜치를 추가한다. 다음 상태를 결정하는 Choices(필수)배열 필드가 추가되며, 하나도 수행되지 않는 경우를 대비하여 Default 필드가 권장된다.
- {"Type": "Wait"}
- 콜백이 올때까지 상태 시스템이 지정된 시간 동안 계속되지 않도록 지연시킨다.
Seconds, Timestamp등의 시간 필드가 추가된다.
- 콜백이 올때까지 상태 시스템이 지정된 시간 동안 계속되지 않도록 지연시킨다.
- {"Type": "Succeed"}
- 실행을 성공적으로 중지하며 터미널 상태이므로 Next, End 필드가 필요하지 않다.
- {"Type": "Fail"}
- 시스템 실행을 중지하고(Catch블록), 실패로 표시한다. Next, End 필드가 필요하지 않다.
- {"Type": "Parallel"}
- 상태 시스템에 병렬 실행 브랜치를 생성할 수 있다.
- {"Type": "Map"} 각 입력 배열 요소에 대한 단계 집합을 실행하는데 사용할 수 있다. 동적으로 단계를 반복할때 쓰인다.
- {"Type": "Pass"}
-
- Next
- 현재 상태가 종료될 때 실행되는 다음 상태의 이름
- Choice와 같은 일부 상태 유형에서는 여러 개의 전환 상태를 허용
- 현재 상태가 워크플로의 마지막 상태이거나 Succeed 또는 Fail 등의 최종 상태인 경우
Next 필드를 지정할 필요가 없다.
- End
- true로 설정하면 이 상태가 터미널 상태(실행을 끝냄)로 지정
- 하나 상태에서는 Next 또는 End 중 하나만 사용될 수 있다.
- Comment(선택 사항)
- 상태의 설명을 입력한다.
- InputPath(선택 사항)
- 처리를 위해 상태 작업에 전달되도록 상태의 입력 부분을 선택하는 경로
- 략하는 경우, 전체 입력을 지정하는 $ 값이 지정
- OutputPath(선택 사항)
- 상태 출력의 일부를 선택하여 다음 상태로 전달하는 경로
- 생략하면 전체 출력을 $ 지정하는 값을 갖는.
각 상태(Succeed 또는 Fail 상태 제외)에는 Next 필드가 있어야 하며, End 필드를 지정하여 터미널 상태로 전환할 수도 있다.
반응형