본문으로 건너뛰기
김신건의 로그

[AWS] Step Functions: 워크플로 오케스트레이션

· 수정 · 📖 약 1분 · 359자/단어 #aws #step-functions #workflow #orchestration #serverless
Step Functions, SFN, State Machine, ASL, Express Workflow, Standard Workflow

정의

Step Functions = 서버리스 워크플로 오케스트레이션. Amazon States Language (ASL, JSON) 으로 상태 기계 정의.

ASL 예시

{
  "StartAt": "ValidateOrder",
  "States": {
    "ValidateOrder": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:...:validate",
      "Next": "ChargePayment",
      "Retry": [{
        "ErrorEquals": ["Lambda.ServiceException"],
        "MaxAttempts": 3,
        "BackoffRate": 2.0
      }],
      "Catch": [{
        "ErrorEquals": ["ValidationError"],
        "Next": "OrderFailed"
      }]
    },
    "ChargePayment": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:...:charge",
      "Next": "ReserveInventory",
      "Catch": [{
        "ErrorEquals": ["States.ALL"],
        "Next": "RefundPayment"
      }]
    },
    "ReserveInventory": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:...:reserve",
      "Next": "ShipOrder"
    },
    "ShipOrder": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:...:ship",
      "End": true
    },
    "OrderFailed": { "Type": "Fail", "Cause": "Validation" },
    "RefundPayment": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:...:refund",
      "Next": "OrderFailed"
    }
  }
}

시각화

flowchart TD
    Start --> Validate[ValidateOrder]
    Validate -->|성공| Charge[ChargePayment]
    Validate -->|ValidationError| Fail[OrderFailed]
    Charge -->|성공| Reserve[ReserveInventory]
    Charge -->|에러| Refund[RefundPayment]
    Reserve --> Ship[ShipOrder]
    Refund --> Fail
    Ship --> End[(End)]

자세한 saga 흐름은 saga-pattern.

State 종류

Type의미
TaskLambda, ECS, Glue, SNS, SQS 등
Choiceif-else 분기
Wait대기 (sec, timestamp)
Parallel동시 실행
Map배열 iterate
Pass데이터 변환만
Succeed / Fail종료

Standard vs Express

StandardExpress
실행 시간최대 1년5분
가격 모델per-transitionduration
적합long-running (인간 승인)짧은 API
실행 이력90일짧음
Throughput2000/s100,000+/s

Map (배열 처리)

{
  "Type": "Map",
  "ItemsPath": "$.orders",
  "MaxConcurrency": 10,
  "Iterator": {
    "StartAt": "ProcessOne",
    "States": {
      "ProcessOne": {
        "Type": "Task",
        "Resource": "arn:lambda:...",
        "End": true
      }
    }
  }
}

수만 ~ 수십만 항목 병렬 처리.

Distributed Map (2022+)

수백만 항목까지. S3 prefix 의 모든 객체 처리 같은 큰 batch.

Wait for Callback

{
  "Type": "Task",
  "Resource": "arn:aws:states:::lambda:invoke.waitForTaskToken",
  "Parameters": {
    "FunctionName": "manual-approval-notifier",
    "Payload": { "taskToken.$": "$$.Task.Token" }
  }
}

인간 승인 / 외부 API 응답 대기. 토큰을 외부에 넘기고 완료 알림 대기.

Step Functions vs Temporal

Step FunctionsTemporal
운영managed (AWS)self-host 또는 Temporal Cloud
코드JSON ASL언어 코드 (TS, Go, Java, …)
학습 곡선중간높음
가격per-transitionhosted 또는 자체
적합AWS-native멀티 클라우드 / 복잡 코드

흔한 함정

WARNING

  1. Retry / Catch 미정의 = 한 단계 실패 = 전체 fail. 명시 정책.
  2. Express 의 5분 한도 = 모르고 사용하면 truncation. Standard 권장 (모르면).
  3. 상태 사이 데이터 전달 너무 큼 = 256KB 한도. S3 reference.
  4. 시각화만 의존 = 복잡 workflow 의 디버깅 어려움. CloudWatch Logs + X-Ray.

관련 위키

이 글의 용어 (4개)
[AWS] EventBridge: 이벤트 버스, 스케줄러, partner sourcescloud
정의 EventBridge = AWS 의 통합 event bus. 옛 CloudWatch Events 의 후계. AWS service 이벤트 + custom 이벤트 + SaaS …
[AWS] Lambda: 서버리스 함수, 트리거, 동시성cloud
정의 AWS Lambda = 서버리스 함수 실행. 이벤트 트리거 → 함수 실행 → 결과 / 비동기 처리. 서버 관리 0. 트리거 종류 | 트리거 | 모델 | |---|---| |…
[Pattern] Outbox Pattern: DB + 메시지의 원자성distributed-systems
정의 Outbox Pattern = DB 변경 + 메시지 발행 의 원자성 보장. 이중 쓰기 (dual write) 문제 의 표준 해결. 문제: Dual Write | 시나리오 |…
[Pattern] Saga: 분산 트랜잭션의 보상 흐름distributed-systems
정의 Saga = 여러 service 의 로컬 트랜잭션 을 연결한 긴 흐름. 한 단계 실패 시 이전 단계의 보상 (compensating) 트랜잭션 으로 논리적 롤백. [!IMP…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기