[AWS] Step Functions (1)

곽우현·2022년 5월 10일
0

AWS

목록 보기
3/6
post-thumbnail

AWS Step Functions란?
Step Functions는 결합하는 서버리스 오케스트레이션 서비스이다. AWS Lambda 함수 및 기타 AWS 비즈니스 크리티컬 애플리케이션을 구축하는 서비스이다. Step Functions의 그래픽 콘솔을 통해 애플리케이션의 워크플로우를 일련의 이벤트 중심 단계로 볼 수 있다.

쉽게 정리하면 AWS에 있는 여러 컴퓨팅 자원들을 일련의 단계(Step), 수행 순서를 설정할 수 있는 AWS 서비스이다.

Step Functions의 작동 방식

AWS Step Functions는 각 단계가 이전 단계의 출력으로 입력되는 단계로 구성된 워크 플로우를 설계하고 실행할 수 있도록 함으로써, 작업을 보다 쉽게 조정할 수 있게 하는 완전 관리형 서비스이다.

Step Functions는 작업 및 상태 머신의 개념을 기반으로 한다.
JSON 기반 Amazon States Language를 사용하여 상태 머신을 정의한다.
상태 머신을 정의하는데 사용되는 JSON 기반의 구조화된 언어는 Amazon States Language라고 불린다.

  • 상태 (State)
    • 각 단계는 상태(State)라 불리고, 다음과 같은 필드를 갖는다.
    • Type 필드(필수) : 상태 유형을 나타낸다.
      • {"Type": "Pass"} 상태는 작업을 수행하지 않고 입력을 출력으로 전달한다. 디버그시 유용하다.
      • {"Type": "Task"} 상태는 상태 머신에 의해 수행되는 하나의 작업 단위를 나타낸다. Lambda로 수행되는 작업일 수도 있고, Batch로 수행되는 작업일 수도 있다.
      • {"Type": "Choice"} 상태는 상태 시스템에 논리 브랜치를 추가한다. 다음 상태를 결정하는 Choices(필수)배열 필드가 추가되며, 하나도 수행되지 않는 경우를 대비하여 Default 필드가 권장된다.
      • {"Type": "Wait"} 상태는 상태 시스템이 지정된 시간 동안 계속되지 않도록 지연시킨다. Seconds, Timestamp등의 시간 필드가 추가된다.
      • {"Type": "Succeed"} 상태는 실행을 성공적으로 중지하며 터미널 상태이므로 Next, End 필드가 필요하지 않다.
      • {"Type": "Fail"} 상태는 시스템 실행을 중지하고(Catch블록), 실패로 표시한다. Next, End 필드가 필요하지 않다.
      • {"Type": "Parallel"} 상태는 상태 시스템에 병렬 실행 브랜치를 생성할 수 있다.
      • {"Type": "Map"} 상태는 각 입력 배열 요소에 대한 단계 집합을 실행하는데 사용할 수 있다. 동적으로 단계를 반복할때 쓰인다.
    • StartAt 필드(필수) : 상태 객체 중 시작할 상태의 이름과 대/소문자를 포함하여 정확하게 일치해야 하는 문자열이다.
    • Comment 필드(선택 사항) : 상태에 대한 메모나 설명이 들어 있다.
    • Next 필드 : 각 상태에 있어햐 하며, 현재 상태가 종료될 때 실행되는 다음 상태의 이름이다.
    • End 필드 : true로 설정하면 이 상태가 터미널 상태(실행을 끝냄)로 지정된다. 상태에서는 Next또는 End중 하나만 사용될 수 있다. Choice와 같은 일부 상태 유형은 End필드를 사용하지 않는다.
    • InputPath, OutputPath 필드 : 상태의 입력, 출력 부분을 선택하는 경로이다.

사용 사례

1. Function orchestration

특정 순서로 Lambda 함수 그룹을 실행하는 워크플로우를 생성한다. 하나의 Lambda 함수의 출력은 다음 Lambda 함수의 입력으로 전달된다. 워크플로우의 마지막 단계는 결과를 제공한다. Step Functions를 사용하면 워크플로우의 각 단계가 서로 어떻게 상호작용하는지 확인할 수 있으므로 각 단계가 의도한 기능을 수행하는지 확인할 수 있다.

2. Branching

고객이 신용 한도 증가를 요청한다. Choice 상태에서 다음을 기반으로 결정을 내릴 수 있다. 요청이 고객의 사전 승인된 시용 한도보다 큰 경우 고객의 요청을 관리자에게 보내 승인을 요청하도록 할 수 있다. 요청이 고객의 사전 승인된 신용 한도보다 작은경우 요청을 자동으로 승인하도록 할 수 있다.

3. Error handling

Retry
고객이 사용자 이름을 요청한다. 처음에는 고객의 요청이 실패시 Step Functions가 Retry문을 사용하여 고객의 요청을 다시 시도하도록 할 수 있다.

Catch
고객이 사용할 수 없는 사용자 이름을 요청한다. Catch문을 사용하여 Step Functions에서 사용 가능한 사용자 이름을 제안하도록 한다.

4. Human in the loop

은행 앱을 사용하여 고객 중 한 명이 친구에게 돈을 보낸다고 할때, 고객이 확인 이메일을 기다린다. 콜백과 작업 토큰을 사용하여 고객의 친구가 돈을 받으면 다시 보고하도록 Lambda에 지시하는 Step Functions를 사용할 수 있다. Lambda가 고객의 친구가 돈을 받았다고 보고하면 Step Functions가 워크플로우의 다음 단계인 고객에게 확인 이메일을 보내도록 할 수 있다.

5. Parallel processing

고객이 비디오 파일을 5가지 다른 디스플레이 해상도로 변환하여 시청자가 여러 장치에서 비디오를 볼 수 있도록 한다. 병렬 상태를 사용하여 Step Functions는 비디오 파일을 입력하므로 Lambda는 이를 동시에 5가지 디스플레이 해상도로 처리할 수 있다.

6. Dynamic parallelism

고객이 3개의 품목을 주문하고 각 품목을 배송할 준비를 해야 한다. 각 품목의 재고를 확인하고 각 품목을 수집한 다음 배송을 위해 각 품목을 포장한다. Map 상태를 사용하여 Step Functions는 Lambda가 고객의 각 항목을 병렬로 처리하도록 한다. 고객의 모든 항목이 배송을 위해 포장되면 Step Functions는 워크플로우의 다음 단계로 이동한다. 이 단계는 추적 정보가 포함된 확인 이메일을 고객에게 보내는 것이다.

참고자료
https://jhb.kr/385
https://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/welcome.html
https://velog.io/@daeyoon/AWS-step-function

profile
주니어 Java 개발자

0개의 댓글