Lambda 编排示例 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Lambda 编排示例

此示例项目演示了如何集成Amazon LambdaStep Functions 状态机。此示例项目创建了以下资源:

  • 五个 Lambda 函数

  • Amazon Service 队列

  • Amazon Service 主题

  • 相关Amazon Identity and Access Management(IAM) 角色

在这个项目中,Step Functions 使用 Lambda 函数来检查股票价格并确定买入或卖出交易建议。然后向用户提供此建议,并可以选择是买入还是卖出股票。交易结果使用 SNS 主题返回。

有关 Step Functions 服务集成的更多信息,请参阅以下内容:

注意

此示例项目可能会产生费用。

为新 Amazon 用户提供了免费使用套餐。在此套餐中,低于某种使用水平的服务是免费的。有关的更多信息Amazon费用和免费套餐,请参阅定价.

创建状态机并预置资源

  1. 打开Step Functions ct然后选择创建状态机.

  2. 选择创作方法页面,选择运行示例项目.

  3. 选择编排 Lambda 函数.

    状态机定义可视化工作流显示。

    
            训练模型工作流程。
  4. 选择 Next(下一步)。

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

    • 状态机

    • Amazon SQS 队列

    • 五个 Lambda 函数

    • 一个 Amazon SNS 主题

    • 相关的 IAM 角色

  5. 选择 Deploy Resources (部署资源)

    注意

    创建这些资源和相关的 IAM 权限最多可能需要 10 分钟。当显示 Deploy resources (部署资源) 页面时,您可打开 Stack ID (堆栈 ID) 链接以查看正在预置的资源。

启动新的执行

配置和部署所有资源后,开始执行对话框出现。

  1. (可选)要识别您的执行,可以在中为其指定一个名称名称盒子。默认情况下,Step Functions 会自动生成一个唯一的执行名称。

    注意

    Step Functions 允许您创建包含非 ASCII 字符的状态机、执行和活动名称。这些非 ASCII 名称不适用于亚马逊 CloudWatch. 为了确保你可以追踪 CloudWatch 指标,请选择仅使用 ASCII 字符的名称。

  2. 选择 Start execution (开始执行)

  3. (可选)执行完成后,在图表检查器,然后选择Step In步骤输出选项卡分别查看每个状态的输入和输出。

关于状态机及其执行

此示例项目中的状态机集成了Amazon Lambda通过将参数直接传递给这些资源,使用 Amazon SQS 队列管理人工批准请求,并使用 Amazon SNS 主题返回查询结果。

Step Functions 执行接收 JSON 文本作为输入,并将该输入传递给工作流中的第一个状态。各个状态接收 JSON 数据作为输入,通常将 JSON 数据作为输出传递给下一个状态。在此示例项目中,每个步骤的输出将作为输入传递到工作流中的下一个步骤。例如,生成买入/卖出建议step 接收输出查看股票价格步骤作为输入。此外,的输出生成买入/卖出建议step s 作为输入,传递给下一个步骤,请求人工批准,它模仿了人工批准的步骤。

注意

要查看步骤返回的输出以及传递给步骤的输入,请打开执行详情工作流程执行页面。在步骤详情部分,查看您在中选择的每个步骤的输入和输出查看模式.

要实现人工批准步骤,通常需要暂停工作流程执行,直到返回任务令牌。在此示例项目中,一条消息被传递到 Amazon SQS 队列,该队列用作定义用于处理回调功能的 Lambda 函数的触发器。该消息包含任务令牌和上一步返回的输出。使用消息的负载调用 Lambda 函数。工作流程执行将暂停,直到它收到带有SendTaskSuccessAPI 调用。有关任务令牌的更多信息,请参阅等待具有任务令牌的回调.

的以下代码StepFunctionsSample-HelloLambda-ApproveSqsLambda函数显示了如何将其定义为自动批准 Amazon SQS 队列通过 Step Functions 状态机提交的任何任务。

exports.lambdaHandler = (event, context, callback) => { const stepfunctions = new aws.StepFunctions(); // For every record in sqs queue for (const record of event.Records) { const messageBody = JSON.parse(record.body); const taskToken = messageBody.TaskToken; const params = { output: "\"approved\"", taskToken: taskToken }; console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`); // Approve stepfunctions.sendTaskSuccess(params, (err, data) => { if (err) { console.error(err.message); callback(err.message); return; } console.log(data); callback(null); }); } };

浏览此示例状态机,了解 Step Functions 如何控制 Lambda 和 Amazon SQS。

有关 Amazon Step Functions 如何控制其他 Amazon 服务的更多信息,请参阅将 Amazon Step Functions 与其他服务一起使用

{ "StartAt": "Check Stock Price", "States": { "Check Stock Price": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666", "Next": "Generate Buy/Sell recommendation" }, "Generate Buy/Sell recommendation": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012", "ResultPath": "$.recommended_type", "Next": "Request Human Approval" }, "Request Human Approval": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "https://sqs.us-west-1.amazonaws.com/111122223333/StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-777788889999", "MessageBody": { "Input.$": "$", "TaskToken.$": "$$.Task.Token" } }, "ResultPath": null, "Next": "Buy or Sell?" }, "Buy or Sell?": { "Type": "Choice", "Choices": [ { "Variable": "$.recommended_type", "StringEquals": "buy", "Next": "Buy Stock" }, { "Variable": "$.recommended_type", "StringEquals": "sell", "Next": "Sell Stock" } ] }, "Buy Stock": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-000000000000", "Next": "Report Result" }, "Sell Stock": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-111111111111", "Next": "Report Result" }, "Report Result": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "TopicArn": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222", "Message": { "Input.$": "$" } }, "End": true } } }

有关如何配置 IAM 与其他功能配合使用 Step FunctionsAmazon服务,请参阅集成服务的 IAM 策略.

IAM 示例

这些示例Amazon Identity and Access Management示例项目生成的 (IAM) 策略包含执行状态机和相关资源所需的最低权限。我们建议您在 IAM 策略中仅包含必要的权限。

{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-777788889999", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-000000000000", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "sqs:SendMessage*" ], "Resource": "arn:aws:sqs:us-west-1:111122223333:StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-111111111111", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "sns:Publish" ], "Resource": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222", "Effect": "Allow" } ] }

有关如何配置 IAM 与其他功能配合使用 Step FunctionsAmazon服务,请参阅集成服务的 IAM 策略.