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

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

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

了解如何將 Step Functions 與 Amazon ECS 或 Fargate 整合,以執行和管理任務。在 AmazonECS,任務是計算的基本單位。工作由指定 Docker 容器的執行方式 (包括容器映像檔、記憶體限制、網路組態CPU及其他參數) 的工作定義所定義。本頁列出可用的 Amazon ECS API 動作,並提供如何使用 Step Functions 數將資料傳遞至 Amazon ECS 任務的指示。

若要瞭解如何整合 AWS 服務在 Step Functions 中,請參閱整合 服務和。將參數傳遞給 Step Functions 數API中的服務

ECS優化亞馬遜/法蓋特集成的主要功能
  • 支援執行任務 (.sync)整合模式。

  • ecs:runTask可以返回一個 HTTP 200 響應,但有一個非空Failures字段,如下所示:

    • 要求回應:傳回回應,不會讓工作失敗。這與沒有優化相同。

    • 執行 Job 或工作 Token:如果遇到非空白Failures欄位,工作會失敗並顯示錯AmazonECS.Unknown誤。

支持亞ECS馬遜/Fargate 電台 APIs

中的參數 Step Functions 表示於 PascalCase

即使原生服務位API於中 camelCase (例如API動作)startSyncExecution,您也可以在中指定參數 PascalCase,例如:StateMachineArn

將數據傳遞給 Amazon ECS 任務

若要瞭解如何整合 AWS 服務在 Step Functions 中,請參閱整合 服務和。將參數傳遞給 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 } } }

IAM致電 Amazon 政策ECS/AWS Fargate

下面的示例模板顯示如何 AWS Step Functions 根據狀態機器定義中的資源產生IAM策略。如需詳細資訊,請參閱 Step Functions 式如何為整合式服務產生IAM原則探索 Step Functions 中的服務整合模式

由於TaskId的值在提交工作之後才會知道,因此 Step Functions 會建立更具權限的"Resource": "*"原則。

注意

您只能停止由 Step Functions 啟動的 Amazon 彈性容器服務 (AmazonECS) 任務,不論"*"IAM政策如何。

Run a Job (.sync)

靜態資源

{ "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" ] } ] }
Request Response and Callback (.waitForTaskToken)

靜態資源

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

動態資源

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

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