本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Step Functions 和 Amazon SNS 通知结果 AWS Batch 作业
此示例项目演示了如何使用 Step Functions 运行一个 AWS Batch 使用具有错误处理功能的状态机执行任务,该状态机使用 Amazon SNS 提供成功或失败通知。
在这个项目中,Step Functions 使用状态机调用 AWS Batch 同步作业。然后,它会等待任务成功或失败,在任务失败时重试并捕获错误,然后发送 Amazon SNS 主题,其中包含有关作业成功还是失败的消息。
第 1 步:创建状态机
-
打开 Step Functions 控制台
,然后选择创建状态机。 -
在搜索框中键入
Manage a batch job
,然后从返回的搜索结果中选择管理批处理任务。 -
选择下一步以继续。
-
选择 “运行演示” 以创建只读和 ready-to-deploy 工作流程,或者选择 “在其上构建” 以创建可编辑的状态机定义,您可以在此基础上构建并稍后部署。
该示例项目部署了以下资源:
-
A AWS Batch 作业
-
亚马逊的SNS话题
-
网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的 AWS Step Functions 状态机
-
相关 AWS Identity and Access Management (IAM) 角色
下图显示了管理批处理任务示例项目的工作流图:
-
-
选择使用模板继续进行选择。
后续步骤取决于您之前的选择:
-
运行演示 — 您可以先查看状态机,然后再使用部署的资源创建只读项目 AWS CloudFormation 给你的 AWS 账户.
您可以查看状态机定义,准备就绪后,选择部署并运行以部署项目并创建资源。
部署最多可能需要 10 分钟才能创建资源和权限。您可以使用堆栈 ID 链接来监控进度 AWS CloudFormation.
部署完成后,您应该会在控制台中看到您的新状态机。
-
在此基础上再接再厉 — 您可以查看和编辑工作流程定义。在尝试运行自定义工作流程之前,您可能需要为示例项目中的占位符设置值。
注意
部署到您的账户的服务可能会收取标准费用。
第 2 步:运行状态机
-
在状态机页面上,选择您的示例项目。
-
在示例项目页面上,选择启动执行。
-
在启动执行对话框中,执行以下操作:
-
(可选)输入自定义执行名称以覆盖生成的默认值。
非ASCII姓名和日志
Step Functions 接受状态机、执行、活动和包含非ASCII字符的标签的名称。由于此类字符不适用于亚马逊 CloudWatch,因此我们建议您仅使用ASCII字符,以便您可以跟踪中的指标 CloudWatch。
-
(可选)在输入框中,将输入值输入为JSON。如果您正在运行演示,则可以跳过此步骤。
-
选择启动执行。
Step Functions 控制台将引导您进入执行详情页面,您可以在图表视图中选择状态以浏览步骤详细信息窗格中的相关信息。
-
示例状态机代码
此示例项目中的状态机集成了 AWS Batch 而且 Amazon 则SNS通过将参数直接传递给这些资源来实现。
浏览此示例状态机,了解 Step Functions 是如何控制的 AWS Batch 和 Amazon,SNS方法是连接到Resource
字段中的亚马逊资源名称 (ARN),然后传递Parameters
到服务API。
有关如何做的更多信息 AWS Step Functions 可以控制其他 AWS 服务,请参阅将服务与 Step Functions 集成。
{
"Comment": "An example of the Amazon States Language for notification on an AWS Batch job completion",
"StartAt": "Submit Batch Job",
"TimeoutSeconds": 3600,
"States": {
"Submit Batch Job": {
"Type": "Task",
"Resource": "arn:aws:states:::batch:submitJob.sync",
"Parameters": {
"JobName": "BatchJobNotification",
"JobQueue": "arn:aws:batch:us-west-2
:123456789012
:job-queue/BatchJobQueue-123456789abcdef
",
"JobDefinition": "arn:aws:batch:us-west-2
:123456789012
:job-definition/BatchJobDefinition-123456789abcdef
:1"
},
"Next": "Notify Success",
"Retry": [
{
"ErrorEquals": [
"States.ALL"
],
"IntervalSeconds": 30,
"MaxAttempts": 2,
"BackoffRate": 1.5
}
],
"Catch": [
{
"ErrorEquals": [ "States.ALL" ],
"Next": "Notify Failure"
}
]
},
"Notify Success": {
"Type": "Task",
"Resource": "arn:aws:states:::sns:publish",
"Parameters": {
"Message": "Batch job submitted through Step Functions succeeded",
"TopicArn": "arn:aws:sns:us-west-2
:123456789012
:StepFunctionsSample-BatchJobManagement12345678-9abc-def0-1234-567890abcdef
-SNSTopic-A2B3C4D5E6F7G
"
},
"End": true
},
"Notify Failure": {
"Type": "Task",
"Resource": "arn:aws:states:::sns:publish",
"Parameters": {
"Message": "Batch job submitted through Step Functions failed",
"TopicArn": "arn:aws:sns:us-west-2
:123456789012
:StepFunctionsSample-BatchJobManagement12345678-9abc-def0-1234-567890abcdef
-SNSTopic-A2B3C4D5E6F7G
"
},
"End": true
}
}
}
IAM示例
此示例 AWS Identity and Access Management (IAM) 示例项目生成的策略包括执行状态机和相关资源所需的最低权限。我们建议您在IAM策略中仅包含必要的权限。
例 BatchJobNotificationAccessPolicy
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"sns:Publish"
],
"Resource": [
"arn:aws:sns:us-west-2
:123456789012
:StepFunctionsSample-BatchJobManagement12345678-9abc-def0-1234-567890abcdef
-SNSTopic-A2B3C4D5E6F7G
"
],
"Effect": "Allow"
},
{
"Action": [
"batch:SubmitJob",
"batch:DescribeJobs",
"batch:TerminateJob"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"events:PutTargets",
"events:PutRule",
"events:DescribeRule"
],
"Resource": [
"arn:aws:events:us-west-2
:123456789012
:rule/StepFunctionsGetEventsForBatchJobsRule"
],
"Effect": "Allow"
}
]
}
有关在将 Step Functions 与其他功能一起使用IAM时如何进行配置的信息 AWS 服务,请参阅Step Functions 如何为集成服务生成IAM策略。