前提条件
- 难度:初级
- 时间:30 分钟
- 费用:免费套餐
- 受众:开发者
- 前提条件:AWS 账户
- 示例代码:低代码
- 上次更新时间:2025年12月25日
- 相关行业:通用
- 相关产品:Amazon Step Functions
教程简介
Amazon Step Functions 是一个服务器无代码编排服务,用于协调多个 AWS 服务构建分布式应用、自动化流程和微服务。它允许您通过可视化工作流(状态机)定义多阶段流程,每个阶段可以调用 Lambda 函数、发送通知或其他 AWS 服务。
本教程将构建一个多阶段客户旅程自动化示例:模拟一个简单的电商订单处理流程,包括以下阶段:
1. 验证订单(Validate Order)
2. 处理支付(Process Payment)
3. 更新库存(Update Inventory)
4. 发送确认通知(Send Confirmation)
我们将采用低代码方式,优先使用 Step Functions 控制台的 Workflow Studio(可视化拖拽设计),并启用 JSONata 查询语言。JSONata 是 Step Functions 新支持的强大 JSON 查询和转换语言(2024 年底引入),相比传统 JSONPath,它更简洁、功能更丰富(支持数学运算、日期格式化、条件逻辑等),能显著减少 Pass 状态和复杂 Parameters 配置,使工作流更实用简洁。
本教程完全在 AWS 免费套餐范围内:
- 使用 Standard Workflow(每月 4,000 次状态转换免费)。
- Lambda 函数(每月 100 万次免费请求)。
- SNS 通知(每月 1,000 封邮件免费)。
第二步 创建AWS Lambda函数
全部打开我们需要 4 个简单的 Lambda 函数(Python 3.12,运行时默认)。每个函数只需返回处理结果。
打开 AWS Lambda 控制台:https://console.aws.amazon.com/lambda/
点击Lambda,打开控制台页面。
*注:函数名称可分别命名为 ValidateOrder, ProcessPayment, UpdateInventory, SendConfirmation。
在左侧导航栏中选择“函数“,选择默认”从头开始创作“,并输入函数相关信息。

输入函数名称,选择Python 3.14运行时,其它保留默认项,点击“创建函数“。将以下函数代码替换默认代码:
import json
def lambda_handler(event, context):
# 模拟处理逻辑
print("Received event: ", json.dumps(event))
# 这里可以添加实际业务逻辑,如调用 DynamoDB 或外部 API
return {
'status': 'SUCCESS',
'message': '订单验证成功', # 修改为对应阶段消息,例如 ValidateOrder: '订单验证成功'
'input': event # 保留输入以便传递
}

创建测试事件,点击Save保存。显示“测试事件已成功保存“。测试完毕,点击“Invoke”测试调用函数,显示“成功(Succeeded)”。

接下来,点击“Deploy”部署。
显示“已成功更新函数”。
- ProcessPayment:message = '支付处理成功'
- UpdateInventory:message = '库存更新成功'
创建这两个函数步骤和第一个一致,仅需修改代码的返回结果,分别修改如下:
创建该函数时,使用以下代码替换默认代码。
import json
import boto3
def lambda_handler(event, context):
sns = boto3.client('sns')
sns.publish(
TopicArn='arn:aws:sns:us-east-1:YOUR_ACCOUNT_ID:OrderTopic', # 稍后创建
Message=f"订单确认:{json.dumps(event)}"
)
return {
'status': 'SUCCESS',
'message': '确认通知已发送'
}

测试完毕后,点击“Deploy”部署完成。
第三步 创建符合Step Functions状态机的角色
全部打开进入IAM控制台页面,选左侧导航栏的“角色”,点击“创建角色”。

选择可信实体页面,按照默认选项“AWS服务”;在“服务或使用案例”下拉菜单中,选择”Step Functions”,点击“下一步”。

点击“下一步”。

写下来,控制台页面显示“已创建角色”。
在“角色“详情页,点击”信任关系“选项卡。点击”编辑信任策略“。

替换默认内容,为以下JSON文本。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "states.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "YOUR_ACCOUNT_ID"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:states:us-east-1:YOUR_ACCOUNT_ID:stateMachine:*"
}
}
}
]
}
点击“更新策略“保存。
显示“已更新信任策略”。
在“角色“详情页,点击”权限“选项卡。

在“添加权限“下拉菜单中,选择“创建内联策略”。
切换“可视化”到 “JSON”选项卡。
选择 JSON 选项卡,输入以下策略 JSON(分多个策略添加,或合并到一个)。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": [
"arn:aws:lambda:us-east-1:YOUR_ACCOUNT_ID:function:ValidateOrder",
"arn:aws:lambda:us-east-1:YOUR_ACCOUNT_ID:function:ProcessPayment",
"arn:aws:lambda:us-east-1:YOUR_ACCOUNT_ID:function:UpdateInventory",
"arn:aws:lambda:us-east-1:YOUR_ACCOUNT_ID:function:SendConfirmation"
]
}
]
}
*解释:允许 Step Functions 调用指定的 Lambda 函数。替换 ARN 为您的实际值。如果 Lambda 在其他区域,调整分区。
点击“下一步”,然后输入策略名称: LambdaInvokePolicy。

点击“创建策略”。

显示“已成功创建策略”。
第四步 创建SNS Topic
全部打开打开 Amazon SNS 控制台。

点击Simple Notification Service(SNS)进入控制台页面。在“创建主题”下输入主题名称,点击“下一步”。

选择“标准”类型,输入名称。

点击“创建主题”。
显示“已成功创建主题”。
点击“创建订阅”。

选择默认主题后,协议选择“电子邮件”,终端节点为Email地址。点击“创建订阅”。


AWS 通过确认订阅的方式进行经营。
经过邮箱验证,该订阅生效。
点击邮件中的链接“Confirm subscription”(确认订阅)。

随后,在Web页面显示”Subscription confirmed!”(订阅已确认)。
第五步 创建Step Functions状态机(State Machine)
全部打开- 将左侧状态区的AWS Lambda图标拖拽到中间画布上,分别按照四个Lambda函数一次叠放在Start和End中间;
- 为四个Lambda状态分配API函数,有效负载,参数和输出等;依次命名四个Lambda为:
- ValidateOrder
- ProcessPayment
- UpdateInventory
- SendConfirmation
- 测试状态
- 创建状态机
在管理控制台搜索“Step Functions”。

点击“Step Functions”进入控制台页面。点击右上角“创建状态机”按钮。

点击“创建状态机”,选择“从空白创建”;输入状态机名称,选择“标准”类型,点击“继续”进行下一步。


在“权限”下拉菜单,选择刚才创建的角色StepFuncitonsExecutionRole。
进入到Workflow Studio。左边是“添加状态”区,右边是“检查器”,中间是画布。状态机查询语言默认为”JSONata”,也是系统推荐的。
现在开始分步骤设计状态机:
这四个Lambda就对应客户的四个旅程。

在检查器区域,每个Lambda均包含API参数下,在其“函数名称”下拉列表中选择对应的Lambda函数。有效负载选择下拉菜单中的“无有效负载”。
在“参数和输出”选项卡,“输出”编辑框中需要如下的JSONata代码:
{% $merge([ $states.result, {"journeyStage": "Validated", "timestamp": $now(), "originalOrderId": $states.input.orderId} ]) %}
这时第一个旅程,其余的三个旅程同样,仅修改”journeyStage”键的值为各自的四种状态即可。
*注意:在SendConfirmation中,在“配置”选项卡的“权限”中,针对执行角色需要添加特定的权限。

点击“角色名称”进入。这时SendConfirmation这个Lambda状态的执行角色,需要AmazonSNSFullAccess权限,必须加入到该角色。

这样,就可以顺利执行最后一个旅程SendConfirmation了。
同时,依次检查和配置各个Lambda旅程的API参数。须有正确的对应的函数名称(之前创建的Lambda函数),有效负载应为“无有效负载”。

切换到“参数和输出”选项卡,可以看到JSONata代码。

在“参数“编辑框内,没有输入的JSONata格式数据,这样能确保测试通过。
分别选择四个旅程的Lambda,点击“测试状态”,完成对该状态的测试。

显示“状态ValidateOrder已成功”!
以此类推,完成四个Lambda旅程的测试。下面是ProcessPaymet状态测试成功!

下面是UpdateInventory状态测试成功!

下面是SendConfirmation状态测试成功!

在状态机的参数配置后,点击“创建”按钮。


进行角色创建确认,点击“确认”按钮。

显示,“已成功创建状态机”!
第六步 测试验证和启动执行
全部打开选择之前创建的执行角色。点击“保存”。

显示“状态机已成功更新。”
此时,点击“执行”重定向到“启动执行”对话框。
将以下的模拟订单数据JSON格式内容:
{
"orderId": "25007",
"customer": "James Bond",
"amount": 1024,
"items": ["目标", "照相机"]
}
将它复制到编辑框中。复选点击“在新的浏览器选项卡中打开”。

点击“启动执行“按钮。

显示执行状态为“已成功”!
滚动到状态机页面下方。

发现画布上的图标视图中,状态机流程从头到尾也测试成功!
这时候,检查邮箱发现收到几封Email。

说明收到了SNS通知。
打开第一个Email查看。

收到信息为“您的订单已确认!”这是一个测试用例,如果点击邮件中的链接。

得到消息“Subcription removed!”(订阅已删除)。
而在三封Email后,又收到一个Email。
至此,完成了本教程的全部内容。
第七步 总结
全部打开- 低代码方式:全程使用 Step Functions 的 Workflow Studio 可视化设计器。
- 启用 JSONata 查询语言:简化数据传递与转换,避免复杂 JSONPath 配置和额外 Pass 状态。
- 严格遵循 AWS 免费套餐:所有资源(Standard 状态机、Lambda、SNS)均在免费额度内,几乎零成本完成。
本教程通过一个简单的电商订单处理场景,帮助您掌握了使用 Amazon Step Functions 实现多阶段客户旅程自动化,让您能够低代码、可视化地编排多个 AWS 服务(如 Lambda 和 SNS),构建可靠、可维护的业务流程。
本教程采用的主要方法有:
掌握 Step Functions 编排自动化旅程,是构建现代、无服务器、弹性业务系统的核心技能之一。完成本教程后,您已具备将复杂业务流程转化为可靠自动化工作流的能力,可直接应用于实际项目中。