

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Step Functions를 사용하여 Amazon ECS 또는 Fargate 작업 실행
<a name="connect-ecs"></a>

Step Functions를 Amazon ECS 또는 Fargate와 통합하여 작업을 실행하고 관리하는 방법을 알아봅니다. Amazon ECS에서 작업은 기본 계산 단위입니다. 작업은 컨테이너 이미지, CPU 및 메모리 제한, 네트워크 구성 및 기타 파라미터를 포함하여 Docker 컨테이너를 실행하는 방법을 지정하는 작업 정의로 정의됩니다. 이 페이지에서는 사용 가능한 Amazon ECS API 작업을 나열하고 Step Functions를 사용하여 Amazon ECS 작업에 데이터를 전달하는 방법에 대한 지침을 제공합니다.

Step Functions의 AWS서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

**최적화된 Amazon ECS/Fargate 통합의 주요 기능**  
[작업 실행(.sync)](connect-to-resource.md#connect-sync) 통합 패턴이 지원됩니다.
`ecs:runTask`에서 HTTP 200 응답을 반환할 수 있지만 다음과 같이 비어 있지 않은 `Failures` 필드가 있습니다.  
**요청 응답**: 응답을 반환하고 최적화되지 않은 통합과 동일한 작업에 실패하지 않습니다.
**작업 실행 또는 태스크 토큰**: 비어 있지 않은 `Failures` 필드가 발견되면 `AmazonECS.Unknown` 오류가 발생하여 태스크가 실패합니다.

## 최적화된 Amazon ECS/Fargate API
<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가 API 작업 `startSyncExecution`과 같은 camelCase에 있더라도 `StateMachineArn`과 같은 파라미터를 PascalCase에 지정합니다.

## 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/AWS Fargate 호출을 위한 IAM 정책
<a name="ecs-iam"></a>

다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions생성하는 방법을 보여줍니다. 자세한 내용은 [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` 권한을 직접 호출 항목(이 경우에는 Step Functions)의 CloudWatch Events IAM 역할에 추가해야 합니다.