使用 Lambda 轮询任务状态以及 AWS Batch - AWS Step Functions

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

使用 Lambda 轮询任务状态以及 AWS Batch

此示例项目创建了一个 AWS Batch 求职调查员。它实现了 AWS Step Functions 使用的状态机 AWS Lambda 创建一个Wait状态循环来检查 AWS Batch 工作。

此示例项目创建并配置所有资源,以便您的 Step Functions 工作流程将提交 AWS Batch 作业,并将等待该任务完成后才成功结束。

注意

您也可以在不使用 Lambda 函数的情况下实现此模式。有关控制的信息 AWS Batch 直接看将服务与 Step Functions 集成

此示例项目创建状态机、两个 Lambda 函数和一个 AWS Batch 排队,并配置相关IAM权限。

有关如何做的更多信息 AWS Step Functions 可以控制其他 AWS 服务,请参阅将服务与 Step Functions 集成

第 1 步:创建状态机

  1. 打开 Step Functions 控制台,然后选择创建状态机

  2. 在搜索框中键入 Job Poller,然后从返回的搜索结果中选择任务轮询器

  3. 选择下一步以继续。

  4. 选择 “运行演示” 以创建只读和 ready-to-deploy 工作流程,或者选择 “在其上构建” 以创建可编辑的状态机定义,您可以在此基础上构建并稍后部署。

    该示例项目部署了以下资源:

    • 三个 Lambda 函数可以提交 AWS Batch job,获取已提交的当前状态 AWS Batch 作业,以及最终的任务完成状态。

    • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的 AWS Batch 作业

    • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的 AWS Step Functions 状态机

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

    下图显示了任务轮询器示例项目的工作流图:

    任务轮询器示例项目的工作流图。
  5. 选择使用模板继续进行选择。

后续步骤取决于您之前的选择:

  1. 运行演示 — 您可以先查看状态机,然后再使用部署的资源创建只读项目 AWS CloudFormation 给你的 AWS 账户.

    您可以查看状态机定义,准备就绪后,选择部署并运行以部署项目并创建资源。

    部署最多可能需要 10 分钟才能创建资源和权限。您可以使用堆栈 ID 链接来监控进度 AWS CloudFormation.

    部署完成后,您应该会在控制台中看到您的新状态机。

  2. 在此基础上再接再厉 — 您可以查看和编辑工作流程定义。在尝试运行自定义工作流程之前,您可能需要为示例项目中的占位符设置值。

注意

部署到您的账户的服务可能会收取标准费用。

第 2 步:运行状态机

配置并部署完所有资源后,将显示启动执行对话框,其中包含类似于以下内容的示例输入。

{ "jobName": "my-job", "jobDefinition": "arn:aws:batch:us-east-2:123456789012:job-definition/SampleJobDefinition-343f54b445d5312:1", "jobQueue": "arn:aws:batch:us-east-2:123456789012:job-queue/SampleJobQueue-4d9d696031e1449", "wait_time": 60 }
注意

wait_time 指示 Wait 状态每 60 秒循环。

  • 启动执行对话框中,执行以下操作:

    1. (可选)输入自定义执行名称以覆盖生成的默认值。

      非ASCII姓名和日志

      Step Functions 接受状态机、执行、活动和包含非ASCII字符的标签的名称。由于此类字符不适用于亚马逊 CloudWatch,因此我们建议您仅使用ASCII字符,以便您可以跟踪中的指标 CloudWatch。

    2. (可选)在输入框中,将输入值输入为JSON。如果您正在运行演示,则可以跳过此步骤。

    3. 选择启动执行

    Step Functions 控制台将引导您进入执行详情页面,您可以在图表视图中选择状态以浏览步骤详细信息窗格中的相关信息。

    例如,要查看您的不断变化的状态 AWS Batch 作业和执行的循环结果,选择 “输出” 选项卡。

    下图显示了图表视图中的执行状态图。它还会在输出选项卡中显示所选步骤的执行输出。

    图表视图中名为 Get Final Job 状态的选定步骤的执行输出。

示例状态机代码

此示例项目中的状态机集成了 AWS Lambda 提交 AWS Batch 工作。浏览此示例状态机,了解 Step Functions 如何控制 Lambda 和 AWS Batch.

有关如何做的更多信息 AWS Step Functions 可以控制其他 AWS 服务,请参阅将服务与 Step Functions 集成

{ "Comment": "An example of the Amazon States Language that runs an AWS Batch job and monitors the job until it completes.", "StartAt": "Submit Job", "States": { "Submit Job": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:111122223333:function:StepFunctionsSample-JobStatusPol-SubmitJobFunction-jDaYcl4cx55r", "ResultPath": "$.guid", "Next": "Wait X Seconds" }, "Wait X Seconds": { "Type": "Wait", "SecondsPath": "$.wait_time", "Next": "Get Job Status" }, "Get Job Status": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:111122223333:function:StepFunctionsSample-JobStatusPoll-CheckJobFunction-1JkJwY10vonI", "Next": "Job Complete?", "InputPath": "$.guid", "ResultPath": "$.status" }, "Job Complete?": { "Type": "Choice", "Choices": [ { "Variable": "$.status", "StringEquals": "FAILED", "Next": "Job Failed" }, { "Variable": "$.status", "StringEquals": "SUCCEEDED", "Next": "Get Final Job Status" } ], "Default": "Wait X Seconds" }, "Job Failed": { "Type": "Fail", "Cause": "AWS Batch Job Failed", "Error": "DescribeJob returned FAILED" }, "Get Final Job Status": { "Type": "Task", "Resource": "arn:aws::lambda:us-east-1:111122223333:function:StepFunctionsSample-JobStatusPoll-CheckJobFunction-1JkJwY10vonI", "InputPath": "$.guid", "End": true } } }