跳至主要内容

使用Amazon Step Functions实现多阶段客户旅程自动化

前提条件

  • 难度:初级
  • 时间:30 分钟
  • 费用:免费套餐
  • 受众:开发者
  • 前提条件:AWS 账户
  • 示例代码:低代码
  • 上次更新时间:20251225
  • 相关行业:通用
  • 相关产品: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)

全部打开

    在管理控制台搜索“Step Functions”。

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

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

     

    在“权限”下拉菜单,选择刚才创建的角色StepFuncitonsExecutionRole。

    进入到Workflow Studio。左边是“添加状态”区,右边是“检查器”,中间是画布。状态机查询语言默认为”JSONata”,也是系统推荐的。

    现在开始分步骤设计状态机:

    1. 将左侧状态区的AWS Lambda图标拖拽到中间画布上,分别按照四个Lambda函数一次叠放在Start和End中间;
    2. 为四个Lambda状态分配API函数,有效负载,参数和输出等;依次命名四个Lambda为:
      1. ValidateOrder
      2. ProcessPayment
      3. UpdateInventory
      4. SendConfirmation

    这四个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。

     

    至此,完成了本教程的全部内容。

第七步 总结

全部打开

    本教程通过一个简单的电商订单处理场景,帮助您掌握了使用 Amazon Step Functions 实现多阶段客户旅程自动化,让您能够低代码、可视化地编排多个 AWS 服务(如 Lambda 和 SNS),构建可靠、可维护的业务流程。

    本教程采用的主要方法有:

    • 低代码方式:全程使用 Step Functions 的 Workflow Studio 可视化设计器。
    • 启用 JSONata 查询语言:简化数据传递与转换,避免复杂 JSONPath 配置和额外 Pass 状态。
    • 严格遵循 AWS 免费套餐:所有资源(Standard 状态机、Lambda、SNS)均在免费额度内,几乎零成本完成。

    掌握 Step Functions 编排自动化旅程,是构建现代、无服务器、弹性业务系统的核心技能之一。完成本教程后,您已具备将复杂业务流程转化为可靠自动化工作流的能力,可直接应用于实际项目中。