

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

# Task 워크플로 상태
<a name="state-task"></a>

**상태 관리 및 데이터 트랜스포밍**  
[변수를 사용하여 상태 간 데이터 전달](workflow-variables.md)과 [JSONata를 사용하여 데이터 트랜스포밍](transforming-data.md)에 대해 알아봅니다.

`Task` 상태(`"Type": "Task"`)는 상태 머신에 의해 수행되는 하나의 작업 단위를 나타냅니다. 작업은 활동 또는 AWS Lambda 함수를 사용하거나, [지원되는 AWS 서비스](supported-services-awssdk.md#supported-services-awssdk-list) 다른와 통합하거나, Stripe과 같은 HTTPS API를 호출하여 작업을 수행합니다.

[Amazon States Language](concepts-amazon-states-language.md)는 상태 유형을 `Task`로 설정하고 태스크에 활동의 Amazon 리소스 이름(ARN)이나 Lambda 함수나 HTTPS API 엔드포인트를 제공하여 작업을 표시합니다.

**JSONata 인수를 사용하여 함수 간접 호출**

다음 태스크 상태 정의(JSONata)는 `priceWatcher`라는 Lambda 함수를 간접적으로 호출합니다.

JSONata 표현식을 사용하여 인수에 사용할 입력 데이터를 쿼리하고 작업 결과를 할당 필드에 입력합니다.

```
"Get Current Price": {
  "Type": "Task",
  "QueryLanguage" : "JSONata",
  "Resource": "arn:aws:states:::lambda:invoke",
  "Next": "Check Price",
  "Arguments": {
    "Payload": {
    "product": "{% $states.context.Execution.Input.product %}"
    },
    "FunctionName": "arn:aws:lambda:<region>:account-id:function:priceWatcher:$LATEST"
  },
  "Assign": {
    "currentPrice": "{% $states.result.Payload.current_price %}"
  }
}
```

**JSONPath 파라미터를 사용하여 함수 간접 호출**

다음 태스크 상태 정의(JSONPath)는 `HelloFunction`라는 Lambda 함수를 간접적으로 호출합니다.

```
"Lambda Invoke": {
  "Type": "Task",
  "Resource": "arn:aws:states:::lambda:invoke",
  "Parameters": {
    "Payload.$": "$",
    "FunctionName": "arn:aws:lambda:region:account-id:function:HelloFunction:$LATEST"
  },
  "End": true
}
```

## Task 유형
<a name="task-types"></a>

Step Functions는 Task 상태 정의에 지정할 수 있는 다음 작업 유형을 지원합니다.
+  [활동](#state-task-activity) 
+  [Lambda 함수](#state-task-lambda) 
+  [지원되는 AWS 서비스](#state-task-connector) 
+ [HTTP 태스크](call-https-apis.md)

Task 상태 정의의 `Resource` 필드에 해당 ARN을 제공하여 작업 유형을 지정합니다. 다음 예제에서는 `Resource` 필드 구문을 보여줍니다. HTTPS API를 간접 호출하는 유형을 제외한 모든 태스크 유형은 다음 구문을 사용합니다. HTTP 태스크의 구문에 대한 자세한 정보는 [Step Functions 워크플로에서 HTTPS API 직접 호출](call-https-apis.md) 섹션을 참조하세요.

작업 상태 정의에서 다음 구문의 기울임꼴 텍스트를 AWS 리소스별 정보로 바꿉니다.

```
arn:partition:service:region:account:task_type:name
```

다음 목록에서는 이 구문의 개별 구성 요소를 설명합니다.
+  `partition`는 사용할 AWS Step Functions 파티션이며, 가장 일반적으로 입니다`aws`.
+  `service`는 작업을 실행하는 데 AWS 서비스 사용되는를 나타내며 다음 값 중 하나일 수 있습니다.
  +  [활동용](#state-task-activity) `states`
  +  [Lambda 함수](#state-task-lambda)용 `lambda`. Amazon SNS 또는 Amazon DynamoDB AWS 서비스와 같은 다른와 통합하는 경우 `sns` 또는를 사용합니다`dynamodb`.
+  `region`는 Step Functions 활동 또는 상태 시스템 유형, Lambda 함수 또는 기타 AWS 리소스가 생성된 [AWS 리전 코드](https://docs.aws.amazon.com/general/latest/gr/rande.html)입니다.
+  `account`는 리소스를 정의한 AWS 계정 ID입니다.
+  `task_type`은 실행할 작업 유형입니다. 다음 값 중 하나일 수 있습니다.
  +  `activity` - [활동](#state-task-activity)
  +  `function` – [Lambda 함수](#state-task-lambda)
  +  `servicename` - 지원되는 연결 서비스의 이름([Step Functions에서 서비스 통합](integrate-optimized.md) 참조)
+  `name`은 등록된 리소스 이름(활동 이름, Lambda 함수 이름 또는 서비스 API 작업)입니다.

**참고**  
Step Functions는 파티션 또는 리전 전체에서 ARN 참조를 지원하지 않습니다. 예를 들어 `aws-cn`이 `aws` 파티션에서 작업을 간접적으로 호출할 수 없으며 그 반대의 경우에는 마찬가지입니다.

다음 단원에서는 각 작업 유형에 대한 자세한 내용이 제공됩니다.

### 활동
<a name="state-task-activity"></a>

활동은 사용자가 구현하고 호스팅하며 특정 작업을 수행하는 작업자(프로세스나 스레드)를 나타냅니다. 이러한 활동은 표준 워크플로에서만 지원되며 Express 워크플로에서는 지원되지 않습니다.

활동 `Resource` ARN은 다음 구문을 사용합니다.

```
arn:partition:states:region:account:activity:name
```

**참고**  
처음에 사용하려면 먼저 Step Functions에서([CreateActivity](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateActivity.html), API 작업 또는 [Step Functions 콘솔](https://console.aws.amazon.com/states/home?region=us-east-1#/) 사용) 활동을 만들어야 합니다.

활동 생성 및 작업자 구현에 대한 자세한 내용은 [활동](concepts-activities.md)을 참조하십시오.

### Lambda 함수
<a name="state-task-lambda"></a>

Lambda 태스크는를 사용하여 함수를 실행합니다 AWS Lambda. Lambda 함수를 지정하려면 `Resource` 필드에서 Lambda 함수의 ARN을 사용합니다.

Lambda 함수 `Resource` 필드의 형식은 통합 유형에 따라 다릅니다.

Lambda 함수와의 표준 AWS SDK 통합의 경우 `Resource` 필드에는 다음 값이 포함됩니다.

```
"arn:aws:states:::aws-sdk:lambda:invoke"
```

`Resource` 필드에 다음 값을 사용하여 Lambda 함수에 최적화된 통합을 사용하는 것이 **좋습니다**.

```
"arn:aws:states:::lambda:invoke"
```

다음 `Task` 상태 정의에서는 JSONata를 사용하여 `HelloWorld`라는 Lambda 함수와 최적화된 통합의 예제를 보여줍니다.

```
"Optimized call to Lambda function (JSONata)": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Output": "{% $states.result.Payload %}",
      "Arguments": {
        "FunctionName": "arn:aws:lambda:region:account-id:function:HelloWorld:$LATEST",
        "Payload": {
          "key": "{% $states.input.myKey %}"
        }
      },
  "Next": "NextState"
}
```

### 지원되는 AWS 서비스
<a name="state-task-connector"></a>

연결된 리소스를 참조할 때 Step Functions는 지원되는 서비스의 API 작업을 직접 호출합니다. `Resource` 필드에서 서비스와 작업을 지정합니다.

연결된 서비스 `Resource` ARN은 다음 구문을 사용합니다.

```
arn:partition:states:region:account-id:servicename:APIname
```

**참고**  
연결된 리소스에 대한 동기 연결을 만들려면 `.sync`을 ARN의 *APIname* 항목에 추가하세요. 자세한 내용은 [ 서비스 통합](integrate-services.md) 단원을 참조하십시오.

예제:

```
{
 "StartAt": "BATCH_JOB",
 "States": {
   "BATCH_JOB": {
     "Type": "Task",
     "Resource": "arn:aws:states:::batch:submitJob.sync",
     "Parameters": {  
       "JobDefinition": "preprocessing",
       "JobName": "PreprocessingBatchJob",
       "JobQueue": "SecondaryQueue",
       "Parameters.$": "$.batchjob.parameters",
       "RetryStrategy": {
          "attempts": 5
        }
     },
     "End": true
    }
  }
}
```

## Task 상태 필드
<a name="task-state-fields"></a>

`Task` 상태에서는 [일반 상태 필드](statemachine-structure.md#amazon-states-language-common-fields) 외에도 다음 필드가 있습니다.

** `Resource`(필수)**  
URI, 특히 실행할 특정 작업을 고유하게 식별하는 ARN입니다.

**`Arguments`(선택 사항, JSONata만 해당)**  
연결된 리소스의 API 작업으로 정보를 전달합니다. 값에는 JSONata 표현식이 포함될 수 있습니다. 자세한 내용은 [Step Functions에서 JSONata로 데이터 트랜스포밍](transforming-data.md) 단원을 참조하십시오.

**`Output`(선택 사항, JSONata만 해당)**  
상태에서 출력을 지정하고 트랜스포밍하는 데 사용됩니다. 지정하면 값이 상태 출력 기본값을 재정의합니다.  
출력 필드는 모든 JSON 값(객체, 배열, 문자열, 숫자, 부울, null)을 허용합니다. 객체 또는 배열 내부의 문자열 값을 포함한 모든 문자열 값은 \$1% %\$1 문자로 묶여 있는 경우 JSONata로 평가됩니다.  
 출력은 "Output": "\$1% jsonata expression %\$1"와 같은 JSONata 표현식도 직접 수락합니다.  
자세한 내용은 [입/출력 처리](concepts-input-output-filtering.md)를 참조하십시오.

**`Parameters`(선택 사항, JSONPath만 해당)**  
연결된 리소스의 API 작업으로 정보를 전달합니다. 이 파라미터는 정적 JSON과 [JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/)를 혼합하여 사용할 수 있습니다. 자세한 내용은 [Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md) 단원을 참조하십시오.

**`Credentials`(선택 사항)**  
지정된 `Resource` 역할을 간접적으로 호출하기 전에 상태 머신의 실행 역할이 간주되어야 하는 대상 역할을 지정합니다. 또는 JSONPath 값 또는 실행 입력을 기반으로 런타임 시 IAM 역할 ARN으로 확인되는 [내장 함수](intrinsic-functions.md)를 지정할 수도 있습니다. JSONPath 값을 지정하는 경우 `$.` 표기법으로 접두사를 추가해야 합니다.  
`Task` 상태에서 이 필드 사용에 대한 예제는 [Task 상태의 보안 인증 정보 필드 예제](#task-state-example-credentials) 섹션을 참조하세요. 이 필드를 사용하여 상태 시스템에서 교차 계정 AWS 리소스에 액세스하는 예제는 섹션을 참조하세요[Step Functions에서 교차 계정 AWS 리소스 액세스](tutorial-access-cross-acct-resources.md).  
이 필드는 [Lambda 함수](#state-task-lambda)와 지원되는 서비스를 [Task 유형](#task-types) 사용하는에서 지원됩니다. [AWS](integrate-services.md) 

** `ResultPath`(선택 사항, JSONPath만 해당)**  
`Resource`에 지정된 작업 실행 결과를 배치할 위치(입력에서의 위치)를 지정합니다. 그러면 `OutputPath` 필드(있는 경우)에 지정된 대로 입력이 필터링된 후 상태의 출력으로 사용됩니다. 자세한 내용은 [입/출력 처리](concepts-input-output-filtering.md)를 참조하십시오.

** `ResultSelector`(선택 사항, JSONPath만 해당)**  
키 값 페어 컬렉션을 전달합니다. 여기서 값은 정적이거나 결과에서 선택됩니다. 자세한 내용은 [ResultSelector](input-output-inputpath-params.md#input-output-resultselector) 단원을 참조하십시오.

** `Retry` (선택 사항)**  
상태에 런타임 오류가 발생하는 경우 사용될 재시도 정책을 정의하는 객체 배열(Retrier). 자세한 내용은 [Retry 및 Catch를 사용하는 상태 머신 예](concepts-error-handling.md#error-handling-examples) 단원을 참조하십시오.

** `Catch` (선택 사항)**  
폴백(fallback) 상태를 정의하는 객체 배열(Catcher). 이 상태는, 상태에 런타임 오류가 발생하거나 해당 재시도 정책이 소진되거나 정의되지 않은 경우 실행됩니다. 자세한 내용은 [폴백 상태](concepts-error-handling.md#error-handling-fallback-states)를 참조하십시오.

** `TimeoutSeconds` (선택 사항)**  
[States.Timeout](concepts-error-handling.md#statestimeout) 오류로 인해 제한 시간이 초과되어 실패하기 전에 활동이나 작업이 실행될 수 있는 최대 시간을 지정합니다. 제한 시간 값은 0이 아닌 양의 정수여야 합니다. 기본값은 `99999999`입니다.  
제한 시간은 `TaskStarted`, `ActivityStarted` 또는 `LambdaFunctionStarted` 이벤트가 실행 이벤트 기록에 기록되는 경우와 같이 시작 이벤트가 실행될 때 시작됩니다. 활동의 경우 `GetActivityTask`에서 토큰을 받고 `ActivityStarted`가 실행 이벤트 기록에서 로깅될 때 카운트가 시작합니다.  
작업이 시작되면 Step Functions는 지정된 `TimeoutSeconds` 기간 내에 작업이나 활동 작업자의 성공 또는 실패 응답을 기다립니다. 작업이나 활동 작업자가 이 시간 내에 응답하지 않으면 Step Functions는 워크플로 실행을 실패로 표시합니다.  
HTTP 태스크 제한 시간은 `TimeoutSeconds`가 해당 제한을 초과하더라도 최대 60초입니다. [HTTP 태스크 관련 할당량](service-quotas.md#service-limits-http-task) 섹션을 참조하세요

** `TimeoutSecondsPath`(선택 사항, JSONPath만 해당)**  
 참조 경로를 사용하여 상태 입력에서 시간 제한 값을 동적으로 제공하려면 `TimeoutSecondsPath`를 사용합니다. 확인되면 참조 경로에서 값이 양의 정수인 필드를 선택해야 합니다.  
`Task` 상태에는 `TimeoutSeconds` 및 `TimeoutSecondsPath` 모두 포함될 수 없습니다. HTTP 태스크 제한 시간은 `TimeoutSecondsPath` 값이 해당 제한을 초과하더라도 최대 60초입니다.

** `HeartbeatSeconds` (선택 사항)**  
작업 실행 중에 활동 작업자가 하트비트 신호를 보내는 빈도를 결정합니다. 하트비트는 작업이 계속 실행 중이며 완료되는 데 시간이 더 필요하다는 것을 나타냅니다. 하트비트는 `TimeoutSeconds` 기간 내에 활동이나 작업의 제한 시간이 초과되지 않도록 합니다.  
`HeartbeatSeconds`는 0이 아닌 양의 정수 값이고 `TimeoutSeconds` 필드 값보다 작아야 합니다. 기본값은 `99999999`입니다. 작업의 하트비트 사이에서 지정된 시간(초)보다 많은 시간이 경과하면 Task 상태가 실패하고 [States.Timeout](concepts-error-handling.md#statestimeout) 오류가 표시됩니다.  
활동의 경우 `GetActivityTask`에서 토큰을 받고 `ActivityStarted`가 실행 이벤트 기록에서 로깅될 때 카운트가 시작합니다.

** `HeartbeatSecondsPath`(선택 사항, JSONPath만 해당)**  
참조 경로를 사용하여 상태 입력에서 하트비트 값을 동적으로 제공하려면 `HeartbeatSecondsPath`를 사용합니다. 확인되면 참조 경로에서 값이 양의 정수인 필드를 선택해야 합니다.  
`Task` 상태에는 `HeartbeatSeconds` 및 `HeartbeatSecondsPath` 모두 포함될 수 없습니다.

`Task` 상태가 `End` 필드를 `true`로 설정해야 하거나(상태가 실행을 끝내는 경우), `Task` 상태의 완료 시에 실행되는 `Next` 필드에 상태를 제공해야 합니다.

## Task 상태 정의 예제
<a name="task-state-example"></a>

다음 예제에서는 요구 사항에 따라 Task 상태 정의를 지정하는 방법을 보여줍니다.
+ [Task 상태 제한 시간 및 하트비트 간격 지정](#task-state-example-timeouts)
  + [정적 제한 시간 및 하트비트 알림 예제](#task-state-example-static)
  + [동적 작업 제한 시간 및 하트비트 알림 예제](#task-state-example-dynamic)
+ [보안 인증 정보 필드 사용](#task-state-example-credentials)
  + [하드 코딩된 IAM 역할 ARN 지정](#example-credentials-specify-role-arn)
  + [JSONPath를 IAM 역할 ARN으로 지정](#example-credentials-specify-dynamic-jsonpath)
  + [내장 함수를 IAM 역할 ARN으로 지정](#example-credentials-specify-dynamic-intrinsic-function)

### Task 상태 제한 시간 및 하트비트 간격
<a name="task-state-example-timeouts"></a>

실행 시간이 긴 활동의 경우 시간 초과 값 및 하트비트 간격을 설정하는 것이 좋습니다. 제한 시간 및 하트비트 값을 지정하거나 동적으로 설정하여 수행할 수 있습니다.

#### 정적 제한 시간 및 하트비트 알림 예제
<a name="task-state-example-static"></a>

`HelloWorld`가 완료되면 다음 단계(`NextState`)가 실행됩니다.

이 작업이 300초 내에 완료되지 않거나 60초 간격으로 하트비트 알림을 전송하지 않으면 작업이 `failed`로 표시됩니다.

```
"ActivityState": {
  "Type": "Task",
  "Resource": "arn:aws:states:region:123456789012:activity:HelloWorld",
  "TimeoutSeconds": 300,
  "HeartbeatSeconds": 60,
  "Next": "NextState"
}
```

#### 동적 작업 제한 시간 및 하트비트 알림 예제
<a name="task-state-example-dynamic"></a>

이 예제에서는 AWS Glue 작업이 완료되면 다음 상태가 실행됩니다.

이 작업이 AWS Glue 작업에서 동적으로 설정한 간격 내에 완료되지 못하면 작업은 `failed`로 표시됩니다.

```
"GlueJobTask": {
  "Type": "Task",
  "Resource": "arn:aws:states:::glue:startJobRun.sync",
  "Parameters": {
    "JobName": "myGlueJob"
  },
  "TimeoutSecondsPath": "$.params.maxTime",
  "Next": "NextState"
}
```

### Task 상태의 보안 인증 정보 필드 예제
<a name="task-state-example-credentials"></a>

#### 하드 코딩된 IAM 역할 ARN 지정
<a name="example-credentials-specify-role-arn"></a>

다음 예제에서는 `Echo`라는 교차 계정 Lambda 함수에 액세스하기 위해 상태 머신 실행 역할이 간주되어야 하는 대상 IAM 역할을 지정합니다. 이 예제에서 대상 역할 ARN은 하드 코딩된 값으로 지정됩니다.

```
{
  "StartAt": "Cross-account call",
  "States": {
    "Cross-account call": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Credentials": {
        "RoleArn": "arn:aws:iam::111122223333:role/LambdaRole"
      },
      "Parameters": {
        "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:Echo"
      },
      "End": true
    }
  }
}
```

#### JSONPath를 IAM 역할 ARN으로 지정
<a name="example-credentials-specify-dynamic-jsonpath"></a>

다음 예제에서는 런타임 시 IAM 역할 ARN으로 확인되는 JSONPath 값을 지정합니다.

```
{
  "StartAt": "Lambda",
  "States": {
    "Lambda": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Credentials": {
        "RoleArn.$": "$.roleArn"
      },
      ...
    }
  }
}
```

#### 내장 함수를 IAM 역할 ARN으로 지정
<a name="example-credentials-specify-dynamic-intrinsic-function"></a>

다음 예제에서는 런타임 시 IAM 역할 ARN으로 확인되는 [`States.Format`](intrinsic-functions.md#asl-intrsc-func-generic) 내장 함수를 사용합니다.

```
{
  "StartAt": "Lambda",
  "States": {
    "Lambda": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Credentials": {
        "RoleArn.$": "States.Format('arn:aws:iam::{}:role/ROLENAME', $.accountId)"
      },
      ...
    }
  }
}
```