本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Step Functions 管理 Amazon ECS 或 Fargate 任务
Step Functions 可以直接从 Amazon States Language (ASL) 控制某些 Amazon 服务。要了解更多信息,请参阅使用其他服务和将参数传递给服务 API。
经过优化的亚马逊 ECS/Fargate 集成与亚马逊 ECS 或 Fargate SDK 集成有何不同 Amazon
-
支持运行作业 (.sync) 集成模式。
ecs:runTask
可以返回 HTTP 200 响应,但有一个非空的Failures
字段,如下所示:请求响应:返回响应,任务不会失败。这与不进行优化相同。
运行作业或任务令牌:如果遇到非空
Failures
字段,则任务会因AmazonECS.Unknown
错误而失败。
支持的 Amazon ECS/Fargate API 和语法:
中的Step Functions参数表示为 PascalCase
即使原生服务 API 在 camelCase 中(例如 API 操作)startSyncExecution
,您也可以在中指定参数 PascalCase,例如:。StateMachineArn
-
RunTask
使用指定的任务定义启动新任务。
向 Amazon ECS 任务传递数据
Step Functions 可以直接从 Amazon States Language (ASL) 控制某些 Amazon 服务。要了解更多信息,请参阅使用其他服务和将参数传递给服务 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",
"Parameters": {
"Cluster": "cluster-arn
",
"TaskDefinition": "job-id
",
"Overrides": {
"ContainerOverrides": [
{
"Name": "container-name
",
"Command.$": "$.commands"
}
]
}
},
"End": true
}
}
}
ContainerOverrides
中的 "Command.$": "$.commands"
行将命令从状态输入传递到容器。
对于上一个示例,如果执行的输入为以下内容,则每个命令都将作为容器覆盖传递。
{
"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",
"Parameters":{
"LaunchType":"FARGATE",
"Cluster":"cluster-arn
",
"TaskDefinition":"job-id
",
"Overrides":{
"ContainerOverrides":[
{
"Name":"container-name
",
"Environment":[
{
"Name":"TASK_TOKEN_ENV_VARIABLE",
"Value.$":"$$.Task.Token"
}
]
}
]
}
},
"End":true
}
}
}
有关在与其他 Amazon 服务Step Functions一起使用时如何配置IAM权限的信息,请参阅集成服务的 IAM 策略。