

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

# Step Functions 워크플로의 파라미터를 사용하여 파라미터 조작
<a name="input-output-inputpath-params"></a>

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

`InputPath`, `Parameters` 및 `ResultSelector` 필드는 JSON이 워크플로를 통해 이동할 때 JSON을 조작하는 방법을 제공합니다. `InputPath`는 경로를 사용하여 JSON 표기법을 필터링해 전달되는 입력을 제한할 수 있습니다([JSONPath 경로 사용](amazon-states-language-paths.md) 참조). `Parameters` 필드를 사용하면 정적 값을 사용하거나 경로를 사용하여 입력에서 선택한 항목을 사용하여 키-값 페어 모음을 전달할 수 있습니다.

 `ResultSelector` 필드는 `ResultPath`가 적용되기 전의 상태 결과를 조작할 수 있는 방법을 제공합니다.

AWS Step Functions는 먼저 `InputPath` 필드를 적용한 다음 `Parameters` 필드를 적용합니다. 우선 `InputPath`를 사용하여 원시 입력을 필터링한 다음 `Parameters`를 적용하여 입력을 추가로 조작하거나 새 값을 추가할 수 있습니다. 그런 다음 `ResultSelector` 필드를 사용하여 `ResultPath`가 적용되기 전의 상태 출력을 조작할 수 있습니다.

## InputPath
<a name="input-output-inputpath"></a>

`InputPath`를 사용하여 상태 입력의 부분을 선택합니다.

예를 들어, 상태에 대한 입력에 다음이 포함된다고 가정합니다.

```
{
  "comment": "Example for InputPath.",
  "dataset1": {
    "val1": 1,
    "val2": 2,
    "val3": 3
  },
  "dataset2": {
    "val1": "a",
    "val2": "b",
    "val3": "c"
  }
}
```

`InputPath`를 적용할 수 있습니다.

```
"InputPath": "$.dataset2",
```

위의 `InputPath`를 통해 입력으로 전달되는 JSON은 다음과 같습니다.

```
{
  "val1": "a",
  "val2": "b",
  "val3": "c"
}
```

**참고**  
경로는 값의 모음을 출력할 수 있습니다. 다음 예제를 살펴보세요.  

```
{ "a": [1, 2, 3, 4] }
```
경로 `$.a[0:2]`를 적용하는 경우 결과는 다음과 같습니다.  

```
[ 1, 2 ]
```

## Parameters
<a name="input-output-parameters"></a>

이 섹션에서는 파라미터 필드를 사용할 수 있는 다양한 방법을 설명합니다.

### 키-값 페어
<a name="input-output-parameters-keyvalue"></a>

`Parameters` 필드를 사용하여 입력으로 전달되는 키-값 페어 컬렉션을 만듭니다. 각각의 값은 상태 머신 정의에 포함한 정적 값 또는 path를 통해 입력 또는 컨텍스트 객체에서 선택한 값일 수 있습니다. path를 사용하여 값을 선택한 키-값 페어의 경우 키 이름이 `.$` 기호로 끝나야 합니다.

예를 들어 다음과 같은 입력을 제공한다고 가정합니다.

```
{
  "comment": "Example for Parameters.",
  "product": {
    "details": {
       "color": "blue",
       "size": "small",
       "material": "cotton"
    },
    "availability": "in stock",
    "sku": "2317",
    "cost": "$23"
  }
}
```

정보의 일부를 선택하기 위해 상태 머신 정의에 이러한 파라미터를 지정할 수 있습니다.

```
"Parameters": {
        "comment": "Selecting what I care about.",
        "MyDetails": {
          "size.$": "$.product.details.size",
          "exists.$": "$.product.availability",
          "StaticValue": "foo"
        }
      },
```

이전 입력 및 `Parameters` 필드를 지정하면 다음과 같은 JSON이 전달됩니다.

```
{
  "comment": "Selecting what I care about.",
  "MyDetails": {
      "size": "small",
      "exists": "in stock",
      "StaticValue": "foo"
  }
},
```

입력 외에도 컨텍스트 객체라고 알려진 특수 JSON 객체에 액세스할 수 있습니다. 컨텍스트 객체에는 상태 머신 실행에 대한 정보가 포함됩니다. [Step Functions의 컨텍스트 객체에서 실행 데이터 액세스](input-output-contextobject.md)을(를) 참조하세요.

### 연결된 리소스
<a name="input-output-parameters-connected"></a>

또한 `Parameters` 필드는 정보를 연결된 리소스로 전달할 수 있습니다. 예를 들어 작업 상태가 AWS Batch작업을 오케스트레이션하는 경우 관련 API 파라미터를 해당 서비스의 API 작업에 직접 전달할 수 있습니다. 자세한 내용은 다음을 참조하세요.
+ [Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md)
+ [ 서비스 통합](integrate-services.md)

### Amazon S3
<a name="input-output-parameters-s3"></a>

상태 간에 전달하는 Lambda 함수 데이터가 262,144바이트를 초과하는 경우 Amazon S3를 사용하여 데이터를 저장하고 다음 방법 중 하나를 구현하는 것이 좋습니다.
+ `Map` 상태에서 Amazon S3 데이터 소스에서 직접 입력을 읽을 수 있도록 워크플로에서 *Distributed Map 상태*를 사용합니다. 자세한 내용은 [분산 모드](state-map-distributed.md) 단원을 참조하십시오.
+ `Payload` 파라미터에 있는 버킷의 Amazon 리소스 이름(ARN)을 파싱하여 버킷 이름과 키 값을 가져옵니다. 자세한 내용은 [Step Functions에서 대용량 페이로드를 전달하는 대신 Amazon S3 ARN 사용](sfn-best-practices.md#avoid-exec-failures) 단원을 참조하십시오.

또는 구현을 조정하여 실행에서 더 작은 용량의 페이로드를 전달할 수 있습니다.

## ResultSelector
<a name="input-output-resultselector"></a>

 `ResultSelector` 필드를 사용하여 `ResultPath`가 적용되기 전의 상태 결과를 조작합니다. 이 `ResultSelector` 필드를 사용하면 키 값 페어 컬렉션을 만들 수 있습니다. 여기서 값은 정적이거나 상태 결과에서 선택한 값입니다. `ResultSelector` 필드를 사용하면 `ResultPath` 필드에 전달하려는 상태 결과 부분을 선택할 수 있습니다.

**참고**  
`ResultPath` 필드를 사용하여 `ResultSelector` 필드 출력을 원래 입력에 추가할 수 있습니다.

`ResultSelector`는 다음 상태의 선택적 필드입니다.
+ [Map 워크플로 상태](state-map.md)
+ [Task 워크플로 상태](state-task.md)
+ [병렬 워크플로 상태](state-parallel.md)

예를 들어 Step Functions 서비스 통합에서는 결과의 페이로드 외에 메타데이터를 반환합니다. `ResultSelector`는 결과의 일부를 선택하고 `ResultPath`를 사용하여 상태 입력과 병합할 수 있습니다. 이 예제에서는 `resourceType` 및 `ClusterId`만 선택하고 이를 Amazon EMR createCluster.sync의 상태 입력과 병합하려고 합니다. 다음을 예로 들어보겠습니다.

```
{
  "resourceType": "elasticmapreduce",
  "resource": "createCluster.sync",
  "output": {
    "SdkHttpMetadata": {
      "HttpHeaders": {
        "Content-Length": "1112",
        "Content-Type": "application/x-amz-JSON-1.1",
        "Date": "Mon, 25 Nov 2019 19:41:29 GMT",
        "x-amzn-RequestId": "1234-5678-9012"
      },
      "HttpStatusCode": 200
    },
    "SdkResponseMetadata": {
      "RequestId": "1234-5678-9012"
    },
    "ClusterId": "AKIAIOSFODNN7EXAMPLE"
  }
}
```

그런 다음 `ResultSelector`를 사용하여 `resourceType` 및 `ClusterId`를 선택할 수 있습니다.

```
"Create Cluster": {
  "Type": "Task",
  "Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync",
  "Parameters": {
    <some parameters>
  },
  "ResultSelector": {
    "ClusterId.$": "$.output.ClusterId",
    "ResourceType.$": "$.resourceType"
  },
  "ResultPath": "$.EMROutput",
  "Next": "Next Step"
}
```

지정된 입력에서 `ResultSelector`를 사용하면 다음이 생성됩니다.

```
{
  "OtherDataFromInput": {},
  "EMROutput": {
      "ClusterId": "AKIAIOSFODNN7EXAMPLE",
      "ResourceType": "elasticmapreduce",
  }
}
```

### 배열의 배열 평면화
<a name="flatten-array-of-arrays-result-selector"></a>

상태 머신의 [병렬 워크플로 상태](state-parallel.md) 또는 [Map 워크플로 상태](state-map.md) 상태에서 배열의 배열을 반환하는 경우 [ResultSelector](#input-output-resultselector) 필드를 사용하여 배열을 평면 배열로 변환할 수 있습니다. Parallel 또는 Map 상태 정의 내에 이 필드를 포함하여 이러한 상태의 결과를 조작할 수 있습니다.

배열을 평면화하려면 다음 예시와 같이 `ResultSelector` 필드에서 `[*]` 구문을 사용합니다.

```
"ResultSelector": {
    "flattenArray.$": "$[*][*]"
  }
```

배열을 평면화하는 방법을 보여주는 예제는 다음 자습서의 *3단계*를 참조하세요.
+ [Step Functions에서 Lambda 함수를 사용하여 배치 데이터 처리](tutorial-itembatcher-param-task.md)
+ [Step Functions에서 Lambda 함수를 사용하여 개별 항목 처리](tutorial-itembatcher-single-item-process.md)