

# 라우팅 규칙을 사용하여 API 매핑 다시 만들기
<a name="rest-api-routing-rules-recreate-api-mapping"></a>

라우팅 규칙을 사용하여 API 매핑을 다시 만들 수 있습니다. API 매핑을 다시 만들려면 기본 경로 제거를 켜야 합니다. 이렇게 하면 API 매핑의 동작이 유지됩니다. 자세한 내용은 [기본 경로 조건을 사용하여 기본 경로 제거](rest-api-routing-rules.md#rest-api-routing-rules-condition-path-split) 섹션을 참조하세요.

다음 자습서에서는 API 매핑 `https:// api.example.com/orders/v2/items/categories/5`을 라우팅 규칙으로 다시 만드는 방법과 API Gateway가 API로 트래픽을 전송하는 데 사용하는 라우팅 규칙 ID를 로깅하도록 액세스 로그를 업데이트하는 방법을 보여줍니다.

------
#### [ AWS Management Console ]

**라우팅 모드를 ROUTING\$1RULE\$1THEN\$1API\$1MAPPING으로 설정하려면**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)에서 API Gateway 콘솔에 로그인합니다.

1. 기본 탐색 창에서 **사용자 지정 도메인 이름**을 선택합니다.

1. 사용자 지정 도메인 이름을 선택합니다.

1. **도메인 세부 정보**에서 **편집**을 선택합니다.

1. **라우팅 모드**에서 **ROUTING\$1RULE\$1THEN\$1API\$1MAPPING**을 선택합니다.

1. **저장**을 선택합니다.

라우팅 모드를 설정한 후 라우팅 규칙을 만듭니다.

**라우팅 규칙을 생성하려면**

1. **라우팅 세부 정보** 탭에서 **라우팅 규칙 추가**를 선택합니다.

1. **조건 추가**를 선택한 다음 **경로**를 선택합니다.

1. **경로**에 **orders/v2/items/categories/5**를 입력합니다.

1. **기본 경로 제거**에서 **활성**을 선택합니다.

1. **대상 API**에서 대상 API를 선택합니다.

1. **대상 스테이지**에서 대상 스테이지를 선택합니다.

1. **다음**을 선택합니다.

1. 우선순위에 우선순위를 입력합니다.

   기존 API 매핑을 유지하더라도 API Gateway는 항상 새 라우팅 규칙을 사용합니다. 라우팅 규칙은 항상 API 매핑보다 우선하기 때문입니다.

1. **변경 사항 저장**을 선택합니다.

라우팅 규칙을 생성한 후 스테이지의 액세스 로그 형식을 업데이트하거나 새 로그를 생성하여 API Gateway가 라우팅 규칙을 사용하여 API로 트래픽을 전송하는지 확인합니다.

**액세스 로그를 업데이트하려면**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)에서 API Gateway 콘솔에 로그인합니다.

1. API를 선택합니다.

1. 기본 탐색 창에서 **스테이지**를 선택합니다.

1. **로그 및 추적**에서 **편집**을 선택합니다.

   로그 그룹이 없는 경우 [API Gateway에서 REST API에 대한 CloudWatch 로깅 설정](set-up-logging.md) 섹션을 참조하세요.

1. 로그 형식에 **\$1context.customDomain.routingRuleIdMatched**를 추가합니다.

   이 로그 그룹은 API Gateway가 API로 트래픽을 전송하는 데 사용한은 라우팅 규칙 ID를 기록합니다. 자세한 내용은 [API Gateway가 내 API로 트래픽을 어떻게 전송했는지 알 수 없음](rest-api-routing-rules-troubleshoot.md#rest-api-routing-rules-logging) 섹션을 참조하세요.

1. **저장**을 선택합니다.

액세스 로그를 업데이트한 후 사용자 지정 도메인 이름을 간접적으로 호출합니다. 다음은 기본 경로 `orders/v2/items/categories/5`를 사용하여 사용자 지정 도메인 이름 `https://api.example.com`을 간접적으로 호출하는 curl 명령의 예입니다.

```
curl "https://api.example.com/orders/v2/items/categories/5"
```

사용자 지정 도메인 이름을 성공적으로 간접 호출한 후 CloudWatch Logs에 `routingRuleIdMatched`가 표시되는지 확인합니다. CloudWatch Logs 콘솔을 사용하여 로그 그룹을 보는 방법을 알아보려면 [CloudWatch 콘솔에서 API Gateway 로그 이벤트 보기](view-cloudwatch-log-events-in-cloudwatch-console.md) 섹션을 참조하세요.

------
#### [ AWS CLI ]

1. 다음 [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-domain-name.html) 명령을 사용하여 라우팅 모드 `ROUTING_RULE_THEN_API_MAPPING`을 사용하도록 도메인 이름 `api.example.com`을 업데이트합니다.

   ```
   aws apigatewayv2 update-domain-name \
     --domain-name 'api.example.com' \
     --routing-mode ROUTING_RULE_THEN_API_MAPPING
   ```

1. 다음 [create-routing-rule](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-routing-rule.html) 명령을 사용하여 API 매핑 `https://api.example.com/orders/v2/items/categories/5`를 다시 만드는 새 라우팅 규칙을 만듭니다.

   ```
   aws apigatewayv2 create-routing-rule \
     --domain-name 'api.example.com' \
     --priority 50 \
     --conditions '[
     {
       "MatchBasePaths": {
         "AnyOf": [
           "orders/v2/items/categories/5"
         ]
       }
     }
   ]' \
     --actions '[
     {
       "InvokeApi": {
         "ApiId": "a1b2c3",
         "Stage": "prod",
         "StripBasePath": true
       }
     }
   ]'
   ```

1. 다음 [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) 명령을 사용하여 `$context.customDomain.routingRuleIdMatched` 변수를 포함하도록 액세스 로그 형식을 업데이트합니다. 이 변수는 API Gateway가 API로 트래픽을 전송하는 데 사용한은 라우팅 규칙 ID를 기록합니다. 이 로그를 사용하여 API Gateway가 라우팅 규칙을 사용하여 API로 트래픽을 전송하는지 확인합니다. 자세한 내용은 [API Gateway가 내 API로 트래픽을 어떻게 전송했는지 알 수 없음](rest-api-routing-rules-troubleshoot.md#rest-api-routing-rules-logging) 섹션을 참조하세요.

   ```
   aws apigateway update-stage \
     --rest-api-id a1bc2c3 \
     --stage-name prod \
     --patch-operations "op=replace,path=/accessLogSettings/format,value='\$context.path \$context.customDomain.routingRuleIdMatched \$context.requestId \$context.extendedRequestId'"
   ```

   로그 그룹이 없는 경우 [API Gateway에서 REST API에 대한 CloudWatch 로깅 설정](set-up-logging.md) 섹션을 참조하세요.

1. 다음 예제 curl 명령을 사용하여 기본 경로 `orders/v2/items/categories/5`를 사용하여 사용자 지정 도메인 이름을 간접적으로 호출합니다.

   ```
   curl "https://api.example.com/orders/v2/items/categories/5
   ```

1. 다음 [filter-log-events](https://docs.aws.amazon.com/cli/latest/reference/logs/filter-log-events.html) 명령을 사용하여 라우팅 규칙 ID `abc123`이 포함된 로그 그룹 `access-log-group-orders`에서 로그 이벤트를 가져옵니다.

   ```
   aws logs filter-log-events --log-group-name access-log-group-orders --filter-pattern abc123
   ```

    이렇게 하면 API Gateway가 라우팅 규칙을 사용하여 API로 트래픽을 전송하는지 확인할 수 있습니다.

------