AWS Step Functions는 분산 애플리케이션의 워크플로우를 시각적으로 조율하는 서버리스 오케스트레이션 서비스다. Lambda 함수, ECS 태스크, API Gateway 등을 상태 머신으로 연결한다.
상태 유형
| 상태 유형 | 설명 |
|---|
| Task | Lambda, ECS, API 호출 |
| Choice | 조건 분기 |
| Parallel | 병렬 실행 |
| Map | 배열 요소 반복 처리 |
| Wait | 지정 시간 대기 |
| Succeed/Fail | 종료 상태 |
| Pass | 입력을 출력으로 전달 |
ASL (Amazon States Language) 예시
json
{
"Comment": "주문 처리 워크플로우",
"StartAt": "ValidateOrder",
"States": {
"ValidateOrder": {
"Type": "Task",
"Resource": "arn:aws:lambda:ap-northeast-2:123456789:function:validate-order",
"Next": "CheckInventory",
"Retry": [{"ErrorEquals": ["Lambda.ServiceException"], "MaxAttempts": 3}],
"Catch": [{"ErrorEquals": ["ValidationError"], "Next": "OrderFailed"}]
},
"CheckInventory": {
"Type": "Task",
"Resource": "arn:aws:states:::dynamodb:getItem",
"Parameters": {
"TableName": "Inventory",
"Key": {"ProductId": {"S.$": "$.productId"}}
},
"Next": "InventoryChoice"
},
"InventoryChoice": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.Item.stock.N",
"NumericGreaterThan": 0,
"Next": "ProcessPayment"
}
],
"Default": "OutOfStock"
},
"ProcessPayment": {
"Type": "Task",
"Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken",
"Parameters": {
"QueueUrl": "https://sqs.ap-northeast-2.amazonaws.com/123456789/payment-queue",
"MessageBody": {
"taskToken.$": "$$.Task.Token",
"orderId.$": "$.orderId"
}
},
"HeartbeatSeconds": 300,
"Next": "NotifyCustomer"
},
"NotifyCustomer": {
"Type": "Task",
"Resource": "arn:aws:states:::sns:publish",
"Parameters": {
"TopicArn": "arn:aws:sns:ap-northeast-2:123456789:order-events",
"Message.$": "States.Format('주문 {} 완료', $.orderId)"
},
"End": true
},
"OutOfStock": {"Type": "Fail", "Error": "OutOfStock", "Cause": "재고 부족"},
"OrderFailed": {"Type": "Fail", "Error": "OrderFailed"}
}
}
Express vs Standard 워크플로우
| 항목 | Standard | Express |
|---|
| 최대 실행 시간 | 1년 | 5분 |
| 실행 보장 | Exactly-once | At-least-once |
| 실행 기록 | 90일 보존 | CloudWatch |
| 비용 | 상태 전환 당 | 실행 수/시간 |
| 적합한 용도 | 장기 비즈니스 | 고빈도 이벤트 처리 |