轮询任 Job 状态(Lambda、Amazon Batch) - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

轮询任 Job 状态(Lambda、Amazon Batch)

本示例项目将创建一个 Amazon Batch 作业轮询器。它将实现一台 Amazon Step Functions 状态机,该状态机使用 Amazon Lambda 创建在 Amazon Batch 作业上执行检查的 Wait 状态循环。

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

注意

您也可以在不使用 Lambda 函数的情况下实现此模式。有关直接控制 Amazon Batch 的信息,请参阅 将 Amazon Step Functions 与其他服务一起使用

本示例项目将创建一台状态机、两个 Lambda 函数和Amazon Batch队列,然后配置相关的 IAM 权限。

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

创建状态机并预置资源

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

  2. 选择运行示例项目选择,然后选择Job 轮询器.

    状态机定义可视工作流此时会显示。

    
          作业轮询器可视工作流
    注意

    这些区域有:定义此状态机中的部分引用Amazon将为此示例项目创建的资源。

  3. 选择 Next(下一步)。

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

    • 一个SubmitJobLambda 函数

    • 一个CheckJobLambda 函数

    • SampleJobQueue 批处理作业队列

  4. 选择部署资源.

    注意

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

开始执行

在配置和部署了所有资源之后,启动执行此时会显示类似于以下内容的示例输入对话框。

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

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

启动新的执行

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

    注意

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

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

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

    例如,要查看更改的状态Amazon Batch任务和执行的循环结果,请选择步骤输出.

    
              状态机执行。

示例状态机代码

此示例项目中的状态机与Amazon Lambda要提交Amazon Batch任务。浏览此示例状态机以了解 Step Functions 如何控制 Lambda 和Amazon Batch.

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

{ "Comment": "An example of the Amazon States Language that runs an Amazon 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": "Amazon 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 } } }