step-functions
💡 摘要
一个用于通过 AWS Step Functions 编排工作流的参考技能,提供模式、CLI 命令和最佳实践。
🎯 适合人群
🤖 AI 吐槽: “这是一份写得很好的 AWS 手册,但称其为新颖的“技能”,就像把字典当作对话开场白来卖。”
该技能的示例涉及执行 AWS CLI 命令和管理 IAM 角色,如果配置不当,存在权限提升风险。缓解措施:实施严格的 IAM 策略边界,并在部署前审计所有状态机定义。
name: step-functions description: AWS Step Functions workflow orchestration with state machines. Use when designing workflows, implementing error handling, configuring parallel execution, integrating with AWS services, or debugging executions. last_updated: "2026-01-07" doc_source: https://docs.aws.amazon.com/step-functions/latest/dg/
AWS Step Functions
AWS Step Functions is a serverless orchestration service that lets you build and run workflows using state machines. Coordinate multiple AWS services into business-critical applications.
Table of Contents
Core Concepts
Workflow Types
| Type | Description | Pricing | |------|-------------|---------| | Standard | Long-running, durable, exactly-once | Per state transition | | Express | High-volume, short-duration | Per execution (time + memory) |
State Types
| State | Description | |-------|-------------| | Task | Execute work (Lambda, API call) | | Choice | Conditional branching | | Parallel | Execute branches concurrently | | Map | Iterate over array | | Wait | Delay execution | | Pass | Pass input to output | | Succeed | End successfully | | Fail | End with failure |
Amazon States Language (ASL)
JSON-based language for defining state machines.
Common Patterns
Simple Lambda Workflow
{ "Comment": "Process order workflow", "StartAt": "ValidateOrder", "States": { "ValidateOrder": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:ValidateOrder", "Next": "ProcessPayment" }, "ProcessPayment": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:ProcessPayment", "Next": "FulfillOrder" }, "FulfillOrder": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:FulfillOrder", "End": true } } }
Create State Machine
AWS CLI:
aws stepfunctions create-state-machine \ --name OrderWorkflow \ --definition file://workflow.json \ --role-arn arn:aws:iam::123456789012:role/StepFunctionsRole \ --type STANDARD
boto3:
import boto3 import json sfn = boto3.client('stepfunctions') definition = { "Comment": "Order workflow", "StartAt": "ProcessOrder", "States": { "ProcessOrder": { "Type": "Task", "Resource": "arn:aws:lambda:...", "End": True } } } response = sfn.create_state_machine( name='OrderWorkflow', definition=json.dumps(definition), roleArn='arn:aws:iam::123456789012:role/StepFunctionsRole', type='STANDARD' )
Start Execution
import boto3 import json sfn = boto3.client('stepfunctions') response = sfn.start_execution( stateMachineArn='arn:aws:states:us-east-1:123456789012:stateMachine:OrderWorkflow', name='order-12345', input=json.dumps({ 'order_id': '12345', 'customer_id': 'cust-789', 'items': [{'product_id': 'prod-1', 'quantity': 2}] }) ) execution_arn = response['executionArn']
Choice State (Conditional Logic)
{ "StartAt": "CheckOrderValue", "States": { "CheckOrderValue": { "Type": "Choice", "Choices": [ { "Variable": "$.total", "NumericGreaterThan": 1000, "Next": "HighValueOrder" }, { "Variable": "$.priority", "StringEquals": "rush", "Next": "RushOrder" } ], "Default": "StandardOrder" }, "HighValueOrder": { "Type": "Task", "Resource": "arn:aws:lambda:...:function:ProcessHighValue", "End": true }, "RushOrder": { "Type": "Task", "Resource": "arn:aws:lambda:...:function:ProcessRush", "End": true }, "StandardOrder": { "Type": "Task", "Resource": "arn:aws:lambda:...:function:ProcessStandard", "End": true } } }
Parallel Execution
{ "StartAt": "ProcessInParallel", "States": { "ProcessInParallel": { "Type": "Parallel", "Branches": [ { "StartAt": "UpdateInventory", "States": { "UpdateInventory": { "Type": "Task", "Resource": "arn:aws:lambda:...:function:UpdateInventory", "End": true } } }, { "StartAt": "SendNotification", "States": { "SendNotification": { "Type": "Task", "Resource": "arn:aws:lambda:...:function:SendNotification", "End": true } } }, { "StartAt": "UpdateAnalytics", "States": { "UpdateAnalytics": { "Type": "Task", "Resource": "arn:aws:lambda:...:function:UpdateAnalytics", "End": true } } } ], "Next": "Complete" }, "Complete": { "Type": "Succeed" } } }
Map State (Iteration)
{ "StartAt": "ProcessItems", "States": { "ProcessItems": { "Type": "Map", "ItemsPath": "$.items", "MaxConcurrency": 10, "Iterator": { "StartAt": "ProcessItem", "States": { "ProcessItem": { "Type": "Task", "Resource": "arn:aws:lambda:...:function:ProcessItem", "End": true } } }, "ResultPath": "$.processedItems", "End": true } } }
Error Handling
{ "StartAt": "ProcessWithRetry", "States": { "ProcessWithRetry": { "Type": "Task", "Resource": "arn:aws:lambda:...:function:Process", "Retry": [ { "ErrorEquals": ["Lambda.ServiceException", "Lambda.TooManyRequestsException"], "IntervalSeconds": 2, "MaxAttempts": 6, "BackoffRate": 2 }, { "ErrorEquals": ["States.Timeout"], "IntervalSeconds": 5, "MaxAttempts": 3, "BackoffRate": 1.5 } ], "Catch": [ { "ErrorEquals": ["CustomError"], "ResultPath": "$.error", "Next": "HandleCustomError" }, { "ErrorEquals": ["States.ALL"], "ResultPath": "$.error", "Next": "HandleAllErrors" } ], "End": true }, "HandleCustomError": { "Type": "Task", "Resource": "arn:aws:lambda:...:function:HandleCustom", "End": true }, "HandleAllErrors": { "Type": "Fail", "Error": "ProcessingFailed", "Cause": "An error occurred during processing" } } }
CLI Reference
State Machine Management
| Command | Description |
|---------|-------------|
| aws stepfunctions create-state-machine | Create state machine |
| aws stepfunctions update-state-machine | Update definition |
| aws stepfunctions delete-state-machine | Delete state machine |
| aws stepfunctions list-state-machines | List state machines |
| aws stepfunctions describe-state-machine | Get details |
Executions
| Command | Description |
|---------|-------------|
| aws stepfunctions start-execution | Start execution |
| aws stepfunctions stop-execution | Stop execution |
| aws stepfunctions describe-execution | Get execution details |
| aws stepfunctions list-executions | List executions |
| aws stepfunctions get-execution-history | Get execution history |
Best Practices
Design
- Keep states focused — one purpose per state
- Use meaningful state names
- Implement comprehensive error handling
- Use Parallel for independent tasks
- Use Map for batch processing
Performance
- Use Express workflows for high-volume, short tasks
- Set appropriate timeouts
- Limit Map concurrency to avoid throttling
- Use SDK integrations when possible (avoid Lambda wrapper)
Reliability
- Retry transient errors
- Catch and handle specific errors
- Use idempotent operations
- Enable X-Ray tracing
Cost Optimization
- Use Express for short workflows (< 5 minutes)
- Combine related operations to reduce transitions
- Use Wait states instead of Lambda delays
Troubleshooting
Execution Failed
# Get execution history aws stepfunctions get-execution-history \ --execution-arn arn:aws:states:us-east-1:123456789012:execution:MyWorkflow:exec-123 \ --query 'events[?type==`TaskFailed` || type==`ExecutionFailed`]'
Lambda Timeout
Causes:
- Lambda running too long
- Task timeout too short
Fix:
{ "Type": "Task", "Resource": "arn:aws:lambda:...", "TimeoutSeconds": 300, "HeartbeatSeconds": 60 }
State Stuck
Check:
- Task state waiting for callback
- Wait state not yet elapsed
- Activity worker not responding
Invalid State Machine
# Validate definition aws stepfunctions validate-state-machine-definition \ --definition file://workflow.json
References
优点
- 全面覆盖 Step Functions 的概念和模式。
- 包含 JSON、CLI 和 boto3 的实用代码示例。
- 结构清晰,包含故障排除和最佳实践部分。
缺点
- 主要是一个参考指南,而非交互式或自动化技能。
- 除了官方 AWS 文档外,缺乏独特功能。
- 没有为 AI 智能体提供清晰的安装或集成路径。
相关技能
免责声明:本内容来源于 GitHub 开源项目,仅供展示和评分分析使用。
版权归原作者所有 itsmostafa.
