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 측 추천)
- 워크플로우 과정 중 현재 실행의 실행기록이 최대치에 근접할 때, 상태머신 재실행 하는 판단 부분 삽입
- 해당 진행사항을 저장하는 부분도 필요함: 재실행할 때 정보가 변하면 안됨!
- 페이로드의 최대 크기: 256KB 넘길 수 없음
- 동적 병렬처리
- 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 |