

# API Gateway에서 WebSocket API에 대한 데이터 매핑 설정
<a name="websocket-api-data-mapping"></a>

*데이터 매핑*을 사용하면 [라우팅 요청](api-gateway-basic-concept.md#apigateway-definition-route-request)의 데이터를 백엔드 통합에 매핑할 수 있습니다.

**참고**  
웹 소켓 API에 대한 데이터 매핑은 에서 지원되지 않습니다AWS Management Console 데이터 매핑을 구성하려면 AWS CLI, AWS CloudFormation 또는 SDK를 사용해야 합니다.

**Topics**
+ [통합 요청 파라미터에 라우팅 요청 데이터 매핑](#websocket-mapping-request-parameters)
+ [예시](#websocket-data-mapping-examples)

## 통합 요청 파라미터에 라우팅 요청 데이터 매핑
<a name="websocket-mapping-request-parameters"></a>

통합 요청 파라미터는 정의된 라우팅 요청 파라미터, 요청 본문, [`context` 또는 ](api-gateway-mapping-template-reference.md#context-variable-reference) [`stage`](api-gateway-mapping-template-reference.md#stagevariables-template-reference) 변수 및 정적 값에서 매핑될 수 있습니다.

다음 표에는 통합 요청 데이터 매핑 표현식이 나와 있습니다. 이 표에서 *`PARAM_NAME`*은 지정된 파라미터 유형의 라우팅 요청 파라미터 이름입니다. 정규식 `'^[a-zA-Z0-9._$-]+$]'`와 일치해야 합니다. *JSONPath\$1EXPRESSION*은 요청 본문의 JSON 필드에 대한 JSONPath 표현식입니다.


| 매핑된 데이터 소스 | 매핑 표현식 | 
| --- | --- | 
| 요청 쿼리 문자열(\$1connect 라우팅의 경우에만 지원) | route.request.querystring.PARAM\$1NAME | 
| 요청 헤더(\$1connect 라우팅의 경우에만 지원) | route.request.header.PARAM\$1NAME | 
| 다중 값 요청 쿼리 문자열(\$1connect 라우팅의 경우에만 지원) | route.request.multivaluequerystring.PARAM\$1NAME | 
| 다중 값 요청 헤더(\$1connect 라우팅의 경우에만 지원) | route.request.multivalueheader.PARAM\$1NAME | 
| 요청 본문 | route.request.body.JSONPath\$1EXPRESSION | 
| 단계 변수 | stageVariables.VARIABLE\$1NAME | 
| 컨텍스트 변수 | context.VARIABLE\$1NAME은 [지원되는 컨텍스트 변수](api-gateway-mapping-template-reference.md#context-variable-reference) 중 하나여야 합니다. | 
| 정적 값 | 'STATIC\$1VALUE'. STATIC\$1VALUE는 문자열 리터럴이며 작은따옴표로 묶여야 합니다. | 

AWS CLI로 데이터 매핑을 생성할 때 AWS CLI에서 문자열 리터럴을 사용하는 올바른 형식을 따라야 합니다. 자세한 내용은 *AWS Command Line Interface 사용 설명서*의 [AWS CLI에서 문자열에 따옴표 및 리터럴 사용](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-quoting-strings.html)을 참조하세요.

## 예시
<a name="websocket-data-mapping-examples"></a>

다음 AWS CLI 예제에서는 데이터 매핑을 구성합니다. CloudFormation 템플릿 예시를 보려면 [samples/websocket-data-mapping.zip](samples/websocket-data-mapping.zip) 단원을 참조하세요.

### 통합 요청의 헤더에 클라이언트의 connectionId 매핑
<a name="websocket-data-mapping-examples.connectionId"></a>

다음 [update-integration](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-integration.html) 명령은 백엔드 통합에 대한 요청의 `connectionId` 헤더에 클라이언트의 `connectionId`를 매핑합니다.

```
aws apigatewayv2 update-integration \
    --integration-id abc123 \
    --api-id a1b2c3d4 \ 
    --request-parameters 'integration.request.header.connectionId'='context.connectionId'
```

### 통합 요청의 헤더에 쿼리 문자열 파라미터 매핑
<a name="websocket-data-mapping-examples.querystring"></a>

다음 예제 명령은 통합 요청의 `authToken` 헤더에 `authToken` 쿼리 문자열 파라미터를 매핑합니다.

1. 다음 [update-route](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-route.html) 명령을 사용하여 `authToken` 쿼리 문자열 파라미터를 경로의 요청 파라미터에 추가합니다.

   ```
   aws apigatewayv2 update-route --route-id 0abcdef \
       --api-id a1b2c3d4 \
       --request-parameters '{"route.request.querystring.authToken": {"Required": false}}'
   ```

1.  다음 [update-integration](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-integration.html) 명령을 사용하여 쿼리 문자열 파라미터를 백엔드 통합 요청의 `authToken` 헤더에 매핑합니다.

   ```
   aws apigatewayv2 update-integration \
       --integration-id abc123 \
       --api-id a1b2c3d4 \
       --request-parameters 'integration.request.header.authToken'='route.request.querystring.authToken'
   ```

1. (선택 사항) 필요한 경우 다음 [delete-route-request-parameter](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/delete-route-request-parameter.html)를 사용하여 경로의 요청 파라미터에서 `authToken` 쿼리 문자열 파라미터를 삭제합니다.

   ```
   aws apigatewayv2 delete-route-request-parameter \
       --route-id 0abcdef \
       --api-id a1b2c3d4 \
       --request-parameter-key 'route.request.querystring.authToken'
   ```