imok
article thumbnail
Published 2023. 5. 11. 14:18
AWS Step Functions이란? AWS/Step Functions
728x90

Sign you might need an orchestration service

orchestration service는 복잡한 Task와 workflow를 보다 쉽게 관리할 수 있도록 돕는 서비스입니다.

AWS 클라우드 환경을 사용 중이라면, 보통 아래와 같은 상황일 때 orchestration service 툴 도입을 고려합니다.

 


1. Do you have an application that spans multiple AWS service?
2. Is the sequence of service interaction important?
3. Does your application manage state between AWS service calls?
4. Do you have application workflow that requires human intervention?
5. Does your application contain workflow patterns like decision trees, branching logic, parallel processing, retries, and error handling?

 

 

 


AWS Step Functions

AWS Step Functions은 AWS Lambda 및 기타 AWS 서비스 기능을 통합할 수 있는 서버리스 오케스트레이션 서비스로 애플리케이션 워크플로를 일련의 이벤트 기반 단계로 나타낼 수 있습니다.

Workflow 동작 방식

Step Functions은 state machines와 task를 기반으로 합니다.

 

state machines

실행될 workflow를 선언적으로 정의하는 그래프로, 하나의 workflow는 여러 개의 작업 단위인 tasks로 구성될 수 있습니다.

workflow의 각 단계를 states라고 합니다. 여기서 task를 수행하고, 결과를 다른 task로 전달할 수 있습니다.

 

다음은 AWS Lambda 함수를 수행하는 HelloWorld라는 states의 예시 입니다.

  • Type(필수) : states의 유형
  • Next : 현재 states가 종료될 때 실행되는 다음 states의 이름 (Choice와 같은 일부 states유형에서는 여러 개의 states 허용)
  • End : true로 설정하면 이 states가 터미널 상태(실행을 끝냄)로 지정
  • Comment(선택 사항) : states 설
  • InputPath(선택 사항) : 처리를 위해 states 작업에 전달되도록 states의 입력 부분을 선택하는 경로 (생략하는 경우 $)
  • OutputPath(선택 사항) : states 출력의 일부를 다음 states로 전달하도록 선택하는 경로 (생략하는 경우 $)
"HelloWorld": {
  "Type": "Task", # states의 유형
  "Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction", # aws resource
  "Next": "AfterHelloWorldState",
  "Comment": "Run the HelloWorld Lambda function" # states 설명
}

 

Actions

AWS Lambda 함수 호출, Amazon SNS로의 publish, Amazon ECS task 실행과 같은 다른 AWS 서비스를 활용해 작업을 수행합니다.

 

Flows

task의 제어 흐름을 정의하는 7가지의 상태입니다.


1. Choice : 조건문에 따른 분기를 정의
2. Parallel : 동일 입력에 대해 여러 작업을 병렬 처리
3. Map : 배열과 같은 iterable 입력에 대해 task의 동적 병렬 처리를 수행
4. Pass : 작업을 수행하지 않고 입력을 출력으로 전달, states 시스템을 생성하고 디버그할 때 유용
5. Wait : 지정한 시간 동안 대기할 수 있음
6. Success : 실행 성공 여부 확인
7. Fail : 실행 실패 여부 확인
Actions : 실제 태스크 수행 Flows : 제어 흐름 정의

 

Tasks

state machines에서 실행되는 단일 작업 단위로, state machines의 모든 작업은 task에 의해 수행됩니다.

task는 직접 Lambda 함수를 호출해서 작업을 수행하거나 다른 서비스의 API 작업으로 파라미터를 전달하여 작업을 수행합니다. 

 

  • Resource(필수) : URI, 실행할 특정 작업을 고유하게 식별하는 ARN
  • Parameters(선택 사항) : 연결된 리소스의 API 작업으로 정보를 전달
  • Credentials(선택 사항) : state machines의 실행 role이 맡아야 하는 대상 role을 지정
  • ResultPath(선택 사항) : Resource에 지정된 작업 실행 결과를 배치할 위치  지정
  • ResultSelector(선택 사항) : 키 값 페어 컬렉션을 전달
  • Retry(선택 사항) : 런타임 오류가 발생하는 경우 사용될 재시도 정책을 정의하는 객체 배열
  • Catch(선택 사항) : 폴백(fallback) 상태를 정의하는 객체 배열
  • TimeoutSeconds(선택 사항) : task가 지정된 시간보다 오래 실행되면 실패하고 States.Timeout오류 이름이 표시됨
  • TimeoutSecondsPath(선택 사항) : 참조 경로를 사용하여 상태 입력에서 타임아웃 값을 동적으로 제공
  • HeartbeatSeconds(선택 사항) : 하트비트 사이에서 지정된 시간보다 많은 시간이 경과하면 이 상태가 실패하고 States.Timeout오류 이름이 표시됨
  • HeartbeatSecondsPath(선택 사항) : 참조 경로를 사용하여 상태 입력에서 동적으로 하트비트 값을 제공

 

다음은 task state의 자격 증명 필드 예제입니다.

{
  "StartAt": "Cross-account call",
  "States": {
    "Cross-account call": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Credentials": {
        "RoleArn": "arn:aws:iam::111122223333:role/LambdaRole"
      },
      "Parameters": {
        "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:Echo",
      },
      "End": true
    }
  }
}

 

workflow는 ASL(Amazon States Language)를 사용합니다.

 

ASL(Amazon States Language)

workflow를 정의하기 위한 JSON 기반의 구조화된 언어로 States 시스템은 아래와 같은 구조를 가집니다.

  • Comment(선택 사항) : 머신 상태 설명
  • StartAt(필수) : state objects 중 하나의 이름과 대/소문자를 포함하여 정확하게 일치해야 하는 문자열
  • TimeoutSeconds(선택 사항) : state machine 이 시작할 수 있는 실행의 최대 시간(초)
  • Version(선택 사항) : state machine에서 사용되는 ASL 버전 (기본값은 1.0)
  • States (필수) : 쉼표로 구분된 states의 set를 포함하는 객체입니다.
{
  "Comment": "A Hello World example of the Amazon States Language using a Pass state",
  "StartAt": "HelloWorld",
  "States": {
    "HelloWorld": {
      "Type": "Pass",
      "Result": "Hello World!",
      "End": true
    }
  }
}

 

Input/Output 처리

Step Functions 실행은 JSON 텍스트를 입력으로 수신하고 해당 입력을 workflow의 첫 번째 state에 전달합니다.
JSON을 입력으로 수신하고 일반적으로 다음 상태에서 JSON을 출력으로 넘겨줍니다.


 

728x90

'AWS > Step Functions' 카테고리의 다른 글

Step Functions Workshop (2) - Request Response  (0) 2023.05.11
Step Functions Workshop (1) - Hello World  (0) 2023.05.10
profile

imok

@imok2

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!