AWS Step Functions
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

回调模式示例

此示例项目演示了如何在任务期间暂停 AWS Step Functions,并等待外部进程返回任务启动时生成的任务令牌。

部署此示例项目并开始执行时,将执行以下步骤。

  1. Step Functions 将包含任务令牌的消息传递给 Amazon SQS 队列。

  2. 然后 Step Functions 暂停,等待该令牌返回。

  3. Amazon Simple Queue Service 队列触发一个 AWS Lambda 函数,该函数使用相同的任务令牌调用 SendTaskSuccess

  4. 收到任务令牌后,工作流程将继续。

  5. "Notify Success" 任务发布一条 Amazon SNS 消息,表明已收到回调。

要了解如何在 Step Functions 中实施回调模式,请参阅 等待具有任务令牌的回调

创建状态机并预配置所有资源

  1. 打开 Step Functions 控制台,然后选择 Create a state machine (创建状态机)

  2. 选择 Sample Projects (示例项目),然后选择 Callback Pattern Example (回调模式示例)

    此时将显示状态机 Code (代码)Visual Workflow (可视工作流程)

    
          回调示例工作流程。
  3. 选择 Create Sample Project (创建示例项目)

    此时将显示 Create Project Resources (创建项目资源) 页面,其中列出了将创建的资源。对于本示例项目,资源包括:

    • 一个 Amazon SQS 消息队列。

    • 一个 AWS Lambda 函数,用于调用 Step Functions API 操作 SendTaskSuccess

    • 一个 Amazon SNS 主题,用于在工作流程可以继续时通知成功或失败。

    注意

    创建这些资源和相关 IAM 权限可能需要长达 10 分钟的时间。当 Create Project Resources (创建项目资源) 页面显示 Creating resources (正在创建资源) 时,您可打开 Stack ID: (堆栈 ID:) 链接以查看正在预置的资源。

    完成后,将会显示 New execution (新执行) 页面。

  4. (可选)输入执行名称和示例输入。

    
          开始回调执行
  5. 选择 Start Execution (开始执行)

    此时将启动新的状态机执行,并显示一个说明正在运行的执行的新页面。

    
          回调执行
  6. 要查看 Step Functions 在工作流程中的进展情况及其如何从 Amazon SQS 收到回调,请查看执行事件历史记录中的条目。

Lambda 回调示例

要查看此示例项目的组件如何协同工作,请参阅在您的 AWS 账户中部署的资源。例如,这是使用任务令牌调用 Step Functions 的 Lambda 函数。

console.log('Loading function'); const aws = require('aws-sdk'); exports.lambda_handler = (event, context, callback) => { const stepfunctions = new aws.StepFunctions(); for (const record of event.Records) { const messageBody = JSON.parse(record.body); const taskToken = messageBody.TaskToken; const params = { output: "\"Callback task completed successfully.\"", taskToken: taskToken }; console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`); stepfunctions.sendTaskSuccess(params, (err, data) => { if (err) { console.error(err.message); callback(err.message); return; } console.log(data); callback(null); }); } };

本页内容: