# AWS - Step Functions
# Step Function
AWS Step Functions 是一個 工作流程編排服務 (Workflow Orchestration Service),讓你能用 視覺化狀態機 (State Machine) 方式把多個 AWS 服務或 Lambda 函數串成「可追蹤、有條件、可重試」的流程。
用來:
- 協調 (Orchestrate) 多個 AWS 服務的執行順序
- 自動化流程(例如 ETL、資料分析、ML Pipeline、訂單流程)
- 可視化工作流,能定義分支、重試、錯誤處理
- 完全無伺服器 (Serverless),不需管理基礎設施
# 簡單理解,他就像是 AWS 的「流程控制中心」
- 上傳 S3 → 觸發 Lambda(驗證格式)
- 若驗證通過 → 呼叫 Rekognition 分析
- 儲存結果到 DynamoDB
- 若失敗 → 發送 SNS 通知
# 運作模型
核心概念
- State Machine:整個工作流程的定義
- States:流程中的每個步驟(例如 Lambda、Choice、Wait、Parallel)
- Execution:一次完整的流程執行
常見狀態類型
| 狀態類型 | 功能 | 說明 |
|---|---|---|
| Task | 執行動作 | 呼叫 Lambda、ECS、Glue 等 |
| Choice | 條件判斷 | if /else 決策 |
| Parallel | 平行執行 | 同時做多個任務 |
| Map | 迴圈處理 | 對陣列中每個項目執行任務 |
| Wait | 等待 | 延遲一段時間 |
| Fail / Succeed | 流程結束 | 表示成功或失敗 |
| Pass | 傳遞資料 | 不執行任何動作,用於測試或資料轉換 |
# 兩種執行模式
| 模式 | 說明 | 適合用途 |
|---|---|---|
| Standard Workflow | 長時間(最長 1 年)執行、完整記錄 | ETL、審批流程、ML Pipeline |
| Express Workflow | 高併發、短時間(最長 5 分鐘)執行 | 即時處理、API 呼叫、IoT 事件 |
# 映射狀態處理模式
剛剛有講說 Step Functions 會有一些狀態,但 Map (映射) 這個狀態 (Map State) 這個「處理多筆資料」的強大功能還可以細談一下
# Map State
Map 狀態 是 Step Functions 中用來「重複執行相同子流程」的特殊狀態,
它可以針對 一個清單 (Array) 中的每個元素,重複執行一段工作流程。
就像 Python 的 for loop,
但在 Step Functions 裡可以讓每個元素的任務「平行執行」而非逐一跑。
# Map 狀態的兩種「處理模式 (Processing Mode)」
# Inline Map(內嵌映射)
| 特性 | 說明 |
|---|---|
| 執行模式 | 在 Step Functions 引擎內部 處理所有迭代 |
| 平行數量 | 限制在 40 同時運行(受帳戶限額影響) |
| 適合情境 | 處理少量項目(幾百筆以下) |
| 成本 | 與一般 Step Function 計費相同 |
| 輸入輸出 | 結果會在流程結束後自動收集成陣列返回 |
| 使用範例 | 批量呼叫 Lambda、少量影像處理、小規模任務 |
# Distributed Map(分散式映射)
| 特性 | 說明 |
|---|---|
| 執行模式 | 每個項目會觸發 獨立的 Step Function 子執行 (Execution) |
| 擴展能力 | 幾乎無限制,可處理 上百萬筆資料 |
| 啟動方式 | 使用 S3 Input(從 S3 讀入陣列資料) |
| 適合情境 | 大量任務處理(ETL、大型批次任務、AI 影像批次分析) |
| 成本 | 每個子流程都要額外計費 |
| 特色 | 支援分散式監控、可跨 AZ 同時運行 |
| 內建快取 | 支援使用 S3 儲存中間結果 |