Step Fuctions 작동 원리

  • Step Functions 상태머신: 실행될 워크플로우를 선언적으로 정의하는 그래프
    • 하나의 워크플로우는 여러 개의 작업 단위로 구성될 수 있음
    • Action: Lambda  함수 호출, SNS로의 publish, ECS task 실행 등과 같은 다른 AWS 서비스를 활용하여 작업 수행
    • Flow: task들의 제어 흐름을 정의하는 7가지 상태
      • Choice: 조건문에 따른 분기를 정의
      • Parallel: 동일 입력에 대해 여러 작업을 병렬 처리
      • Map: 배열과 같은 Iterable 입력에 대해 task의 동적 병렬 처리를 수행
      • Pass: 디버깅 / Wait: 타이머 기능 / Success/Fail: 실행 성공 여부 확인
    • Action과 Flow의 조합으로 Start 상태부터 End 상태까지 다양한 워크플로우를 쉽게 정의
  • 모니터링: try - catch - finally 패턴을 통해 timeout, retry, error message 등을 한번에 관리 가능
  • 자동 스케일링, 고가용성 제공

 

Step Functions 개발 옵션

  • Workflow Studio:
    • GUI 인터페이스만으로 워크플로우 배포 가능
    • Production 환경에서 얘만 사용하면 유지보수에 어려움이 있을 수 있음
  •  IaC 프레임 워크 활용: AWS CDK, Terraform + 서버리스 개발용 라이브러리: AWS Chalice(파이썬)
    • 위의 상황은 디커플링된 상태: 애플리케이션과 인프라가 디커플링
    • 각 각에 대해 코드 수정을 해야하는 비효율성이 생길 수 있음
  • 애플리케이션과 인프라를 커플링 → 서버리스 프레임워크

 

개발 팁

  • 서비스 할당량
    • 소프트 할당량(별도의 요청으로 상한을 올릴 수 있음) / 하드 할당량(상한을 올릴 수 없음)
    • 자주 접할 수 있는 하드 할당량:
      • 페이로드의 최대 크기: 256KB 넘길 수 없음
        • 상태머신의 페이로드는 필수 정보, 상태 정보 등.. 
        • 이외의 데이터는 다른 서비스나 서버에 저장 후 불러와라
          • (S3, DynamoDB, Aurora, Kinesis Data Streams, SQS)
      • 실행 기록의 최대 이벤트 개수: 최대 25000개 까지 기록(넘어가면 실행 즉시 실패)
        • 이벤트 개수 줄이기 → 비추천
        • Lambda 함수를 통해 상태머신 재실행(AWS 측 추천)
          • 워크플로우 과정 중 현재 실행의 실행기록이 최대치에 근접할 때, 상태머신 재실행 하는 판단 부분 삽입
          • 해당 진행사항을 저장하는 부분도 필요함: 재실행할 때 정보가 변하면 안됨!
  • 동적 병렬처리
    • MaxConcurrency: 동시 실행 가능한 작업자의 최대 개수
    • Map 상태가 최대 동시성 값에 따라 병렬로 실행할 작업자의 개수를 결정
    • 문제: 작업의 동적할당을 위해선 작업을 배열의 형태로 만들어야함. 근데 페이로드 안에 다 있어야하니까.. 최대 페이로드 크기에 걸릴 수 있음
      • 전체 작업을 처리 가능한 크기의 작업으로 분할 후 반복실행을 통해 순차적으로 처리 
  • 외부 서비스 통합: Activity Worker 패턴 이용
    •  동기적으로 처리하기 위함..
    • Activity: 상태머신의 진행을 비동기적으로 바꾸기 위함
      • 상태머신이 Activity 대기 상태로 들어가면 해당 Activity 하위에 새로운 작업을 생성 후 실행을 잠시 정지 시킴
      • AWS SDK를 활용해 GetActivityTask 호출:
        • 지정한 Activity에 처리되지 않은 작업이 있으면 해당 작업을 할당받음과 동시에 작업의 입력값과 토큰을 받음
        • 이후 전달받은 입력값으로 완료되면 SendTaskSuccess를 이용해 작업의 성공을 알림
      • 생성한 작업이 완료되면 대기 상태 해체 후 실행 재개

 

 

 

❗ 솔직히 AWS 내에서 서버리스로 다 구성하려면... 이거 활용하면 좋을듯!!! ❗

'Cloud > AWS' 카테고리의 다른 글

[AWS] Amazon Athena 사용법 -2 + Glue(Crawler) 활용  (1) 2022.11.19
[AWS] Amazon Athena 사용법 -1  (1) 2022.11.19
[AWS] Spot Fleet  (0) 2022.11.16
[AWS] Lambda와 RDS Proxy  (0) 2022.11.14
[AWS] EC2 인스턴스 자동 중지 및 시작  (0) 2022.11.13

+ Recent posts