使用 Step Functions 运行 Amazon ECS 或 Fargate 任务
了解如何将 Step Functions 与 Amazon ECS 或 Fargate 集成来运行和管理任务。在 Amazon ECS 中,任务是基本的计算单位。任务由任务定义所定义,任务定义指定 Docker 容器的运行方式,包括容器映像、CPU 和内存限制、网络配置和其它参数。本页列出了可用的 Amazon ECS API 操作,并提供了有关如何使用 Step Functions 将数据传递给 Amazon ECS 任务的说明。
要了解如何在 Step Functions 中与 Amazon 服务集成,请参阅集成 服务和在 Step Functions 中将参数传递给服务 API。
经优化的 Amazon ECS/Fargate 集成的主要功能
-
支持运行作业 (.sync) 集成模式。
ecs:runTask可以返回 HTTP 200 响应,但有一个非空的Failures字段,如下所示:请求响应:返回响应,任务不会失败,任务不会失败,这与未经优化的集成相同。
运行作业或任务令牌:如果遇到非空
Failures字段,则任务会因AmazonECS.Unknown错误而失败。
经优化的 Amazon ECS/Fargate API
-
RunTask使用指定的任务定义启动新任务。
Step Functions 中的参数以 PascalCase 表示
即使原生服务 API 采用 camelCase(例如 API 操作 startSyncExecution),也可以采用 PascalCase 指定参数,例如:StateMachineArn。
向 Amazon ECS 任务传递数据
要了解如何在 Step Functions 中与 Amazon 服务集成,请参阅集成 服务和在 Step Functions 中将参数传递给服务 API。
您可以使用 overrides 覆盖容器的默认命令,并将输入传递给 Amazon ECS 任务。请参阅 ContainerOverride。在该示例中,我们使用 JsonPath 将值从 Task 状态的输入传递给 Task。
下面是一个运行 Amazon ECS 任务并等待任务完成的 Task 状态。
{
"StartAt": "Run an ECS Task and wait for it to complete",
"States": {
"Run an ECS Task and wait for it to complete": {
"Type": "Task",
"Resource": "arn:aws:states:::ecs:runTask.sync",
"Arguments": {
"Cluster": "cluster-arn",
"TaskDefinition": "job-id",
"Overrides": {
"ContainerOverrides": [
{
"Name": "container-name",
"Command": "{% $state.input.commands %}"
}
]
}
},
"End": true
}
}
}
Command 中的 ContainerOverrides 行将命令从状态输入传递到容器。
在前面的状态机示例中,基于以下输入,每条命令都将作为容器覆盖参数传递:
{
"commands": [
"test command 1",
"test command 2",
"test command 3"
]
}
下面包含一个运行 Amazon ECS 任务,然后等待返回任务令牌的 Task 状态。请参阅等待具有任务令牌的回调。
{
"StartAt":"Manage ECS task",
"States":{
"Manage ECS task":{
"Type":"Task",
"Resource":"arn:aws:states:::ecs:runTask.waitForTaskToken",
"Arguments":{
"LaunchType":"FARGATE",
"Cluster":"cluster-arn",
"TaskDefinition":"job-id",
"Overrides":{
"ContainerOverrides":[
{
"Name":"container-name",
"Environment":[
{
"Name" : "TASK_TOKEN_ENV_VARIABLE",
"Value" : "{% $states.context.Task.Token %}"
}
]
}
]
}
},
"End":true
}
}
}
用于调用 Amazon ECS/Amazon Fargate 的 IAM 策略
以下示例模板展示了 Amazon Step Functions 如何根据状态机定义中的资源生成 IAM 策略。有关更多信息,请参阅Step Functions 如何为集成服务生成 IAM 策略和探索 Step Functions 中的服务集成模式。
由于在提交任务之前 TaskId 的值始终是未知的,因此 Step Functions 会创建具有更高特权的 "Resource": "*" 策略。
注意
尽管有 "*" IAM 策略,但您只能停止由 Step Functions 启动的 Amazon Elastic Container Service (Amazon ECS) 任务。
如果计划 Amazon ECS 任务需要使用任务执行角色、任务角色或任务角色覆盖,则必须将每个任务执行角色、任务角色或任务角色覆盖的 iam:PassRole 权限添加到调用实体的 CloudWatch Events IAM 角色中,本例中的实体为 Step Functions。