本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
了解如何將 Step Functions 與 Amazon ECS 或 Fargate 整合,以執行和管理任務。在 Amazon ECS 中,任務是運算的基本單位。任務由任務定義定義,指定 Docker 容器應如何執行,包括容器映像、CPU 和記憶體限制、網路組態和其他參數。此頁面列出可用的 Amazon ECS API 動作,並提供如何使用 Step Functions 將資料傳遞至 Amazon ECS 任務的指示。
若要了解如何在 Step Functions 中整合 AWS 服務,請參閱 整合 服務和 在 Step Functions 中將參數傳遞至服務 API。
Optimized Amazon ECS/Fargate 整合的主要功能
-
支援執行任務 (.sync)整合模式。
ecs:runTask
可以傳回 HTTP 200 回應,但具有非空白Failures
欄位,如下所示:請求回應:傳回回應,且不會讓任務失敗。這與沒有最佳化相同。
執行任務或任務權杖:如果遇到非空白
Failures
欄位,任務會失敗並出現AmazonECS.Unknown
錯誤。
最佳化 Amazon ECS/Fargate APIs
-
RunTask
會使用指定的任務定義來啟動新的任務。
中的參數Step Functions以 PascalCase 表示
即使原生服務 API 位於 camelCase 中,例如 API 動作 startSyncExecution
,您可以在 PascalCase 中指定參數,例如:StateMachineArn
。
將資料傳遞至 Amazon ECS 任務
若要了解如何在 Step Functions 中整合 AWS 服務,請參閱 整合 服務和 在 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",
"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 ECS/ 的 IAM 政策AWS Fargate
下列範例範本顯示 如何根據您狀態機器定義中的資源 AWS Step Functions 產生 IAM 政策。如需詳細資訊,請參閱 Step Functions 如何為整合服務產生 IAM 政策 和 探索 Step Functions 中的服務整合模式。
由於在提交任務之前TaskId
, 的值是未知的,因此 Step Functions 會建立更特權"Resource": "*"
的政策。
注意
儘管有 IAM 政策,您仍然只能停止 Step Functions 啟動的 Amazon Elastic Container Service (Amazon ECS) "*"
任務。
靜態資源
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:RunTask"
],
"Resource": [
"arn:aws:ecs:[[region]]
:
[[accountId]]
:task-definition/[[taskDefinition]]
:[[revisionNumber]]
"
]
},
{
"Effect": "Allow",
"Action": [
"ecs:StopTask",
"ecs:DescribeTasks"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"events:PutTargets",
"events:PutRule",
"events:DescribeRule"
],
"Resource": [
"arn:aws:events:[[region]]
:
[[accountId]]
:rule/StepFunctionsGetEventsForECSTaskRule"
]
}
]
}
動態資源
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:RunTask",
"ecs:StopTask",
"ecs:DescribeTasks"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"events:PutTargets",
"events:PutRule",
"events:DescribeRule"
],
"Resource": [
"arn:aws:events:[[region]]
:
[[accountId]]
:rule/StepFunctionsGetEventsForECSTaskRule"
]
}
]
}
如果您的排程 Amazon ECS 任務需要使用任務執行角色、任務角色或任務角色覆寫,則您必須將每個任務執行角色、任務角色或任務角色覆寫的iam:PassRole
許可新增至呼叫實體的 CloudWatch Events IAM 角色,此角色在此案例中為 Step Functions。