View a markdown version of this page

使用 Step Functions 執行 Amazon ECS 或 Fargate 任務 - AWS Step Functions

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Step Functions 執行 Amazon ECS 或 Fargate 任務

了解如何將 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", "Arguments": { "Cluster": "cluster-arn", "TaskDefinition": "job-id", "Overrides": { "ContainerOverrides": [ { "Name": "container-name", "Command": "{% $state.input.commands %}" } ] } }, "End": true } } }

ContainerOverrides 中的 Command 行將命令從狀態輸入傳遞至容器。

在先前的範例狀態機器中,根據下列輸入,每個命令都會以容器覆寫的形式傳遞:

{ "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/ 的 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) "*" 任務。

Run a Job (.sync)

靜態資源

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:RunTask" ], "Resource": [ "arn:aws:ecs:region: account-id: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: account-id: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: account-id:rule/StepFunctionsGetEventsForECSTaskRule" ] } ] }
Request Response and Callback (.waitForTaskToken)

靜態資源

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:RunTask" ], "Resource": [ "arn:aws:ecs:region: account-id:task-definition/taskDefinition:revisionNumber" ] } ] }

動態資源

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:RunTask" ], "Resource": "*" } ] }

如果您排定的 Amazon ECS 任務需要使用任務執行角色、任務角色或任務角色覆寫,則您必須將每個任務執行角色、任務角色或任務角色覆寫的iam:PassRole許可新增至呼叫實體的 CloudWatch Events IAM 角色,在此情況下為 Step Functions。