

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

# 使用 Step Functions 執行 Amazon ECS 或 Fargate 任務
<a name="connect-ecs"></a>

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

若要了解如何在 Step Functions 中整合 AWS服務，請參閱 [整合 服務](integrate-services.md)和 [在 Step Functions 中將參數傳遞至服務 API](connect-parameters.md)。

**Optimized Amazon ECS/Fargate 整合的主要功能**  
支援[執行任務 (.sync)](connect-to-resource.md#connect-sync)整合模式。
`ecs:runTask` 可以傳回 HTTP 200 回應，但具有非空白`Failures`欄位，如下所示：  
**請求回應**：傳回回應，且不會讓任務失敗，這與非最佳化整合相同。
**執行任務或任務字符**：如果遇到非空白`Failures`欄位，任務會失敗並顯示`AmazonECS.Unknown`錯誤。

## 最佳化 Amazon ECS/Fargate APIs
<a name="connect-ecs-api"></a>
+ [https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html) 會使用指定的任務定義來啟動新的任務。

**中的參數Step Functions以 PascalCase 表示**  
即使原生服務 API 位於 camelCase 中，例如 API 動作 `startSyncExecution`，您也可以在 PascalCase 中指定參數，例如：`StateMachineArn`。

## 將資料傳遞至 Amazon ECS 任務
<a name="connect-ecs-pass-to"></a>

若要了解如何在 Step Functions 中整合 AWS服務，請參閱 [整合 服務](integrate-services.md)和 [在 Step Functions 中將參數傳遞至服務 API](connect-parameters.md)。

您可以使用 `overrides` 覆寫容器的預設命令，並將輸入傳遞至 Amazon ECS 任務。請參閱 [https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerOverride.html](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerOverride.html)。在此範例中，我們已使用 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`的狀態。請參閱 [使用任務字符等待回呼](connect-to-resource.md#connect-wait-token)。

```
{  
   "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
<a name="ecs-iam"></a>

下列範例範本顯示 如何根據狀態機器定義中的資源AWS Step Functions產生 IAM 政策。如需詳細資訊，請參閱[Step Functions 如何為整合服務產生 IAM 政策](service-integration-iam-templates.md)及[探索 Step Functions 中的服務整合模式](connect-to-resource.md)。

由於在提交任務之前， 的值`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。