

# 라우팅 규칙을 사용하는 방법
<a name="apigateway-routing-rules-use"></a>

AWS Management Console, AWS CLI 또는 AWS SDK를 사용하여 라우팅 규칙을 만들 수 있습니다. 규칙을 생성한 후에는 우선순위를 변경할 수 있습니다.

## 라우팅 규칙 만들기
<a name="rest-api-routing-rules-create"></a>

다음 절차에서는 라우팅 모드가 `ROUTING_RULE_THEN_API_MAPPING` 또는 `ROUTING_RULE_ONLY`로 설정된 사용자 지정 도메인 이름에 대한 라우팅 규칙을 만드는 방법을 보여줍니다.

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

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

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

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

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

1. **새 조건 추가**를 선택하여 새 조건을 추가합니다.

   헤더 또는 기본 경로 조건을 추가할 수 있습니다. 모든 수신 요청을 사용자 지정 도메인 이름과 일치시키려면 조건을 추가하지 마세요.

1. **작업**에서 드롭다운을 사용하여 대상 API와 대상 스테이지를 선택합니다.

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

1. 우선순위 필드에 우선순위의 숫자를 입력합니다.

   API Gateway는 규칙을 가장 낮은 값에서 가장 높은 값에 이르기까지 우선순위에 따라 평가합니다.

   조건 없이 규칙을 생성하는 경우 높은 값 우선순위를 사용하는 것이 좋습니다.

1. **라우팅 규칙 생성**을 선택합니다.

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

다음 [create-routing-rule](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-routing-rule.html) 명령은 우선순위가 50인 라우팅 규칙을 만듭니다. 이 예제에서 API Gateway는 헤더 `Hello:World`와 `x-version:beta` 및 기본 경로 `PetStoreShopper`가 있는 모든 수신 요청을 대상 API `a1b2c3`으로 라우팅합니다.

```
 aws apigatewayv2 create-routing-rule \
  --domain-name 'api.example.com' \
  --priority 50 \
  --conditions '[
    {
      "MatchHeaders": {
        "AnyOf": [
          {
            "Header": "Hello",
            "ValueGlob": "World"
          }
        ]
      }
    },
    {
      "MatchHeaders": {
        "AnyOf": [
          {
            "Header": "x-version",
            "ValueGlob": "beta"
          }
        ]
      }
    },
    {
      "MatchBasePaths": {
        "AnyOf": [
          "PetStoreShopper"
        ]
      }
    }
  ]'\
  --actions '[
  {
    "InvokeApi": {
      "ApiId": "a1b2c3",
      "Stage": "prod"
    }
  }
 ]'
```

출력은 다음과 같습니다.

```
{
    "Actions": [
        {
            "InvokeApi": {
                "ApiId": "a1b2c3",
                "Stage": "prod",
                "StripBasePath": false
            }
        }
    ],
    "Conditions": [
        {
            "MatchHeaders": {
                "AnyOf": [
                    {
                        "Header": "Hello",
                        "ValueGlob": "World"
                    }
                ]
            }
        },
        {
            "MatchHeaders": {
                "AnyOf": [
                    {
                        "Header": "x-version",
                        "ValueGlob": "beta"
                    }
                ]
            }
        },
        {
            "MatchBasePaths": {
                "AnyOf": [
                    "PetStoreShopper"
                ]
            }
        }
    ],
    "Priority": 50,
    "RoutingRuleArn": "arn:aws:apigateway:us-west-2:111122223333:/domainnames/api.example.com/routingrules/abc123",
    "RoutingRuleId": "abc123"
}
```

------

## 라우팅 규칙의 우선순위 변경
<a name="rest-api-routing-rules-change-priority"></a>

라우팅 규칙의 우선순위를 변경할 수 있습니다. 이는 즉시 적용되며 API 소비자가 사용자 지정 도메인 이름을 간접적으로 호출하는 방식에 영향을 미칠 수 있습니다. 라우팅 규칙의 우선순위를 설정할 때 규칙 사이에 간격을 두는 것이 좋습니다.

예를 들어 두 가지 라우팅 규칙, 즉 우선순위가 50인 규칙 `abc123`과 우선순위가 150인 규칙 `zzz000`을 고려합니다. API Gateway가 규칙 `zzz000`을 먼저 평가하도록 규칙의 우선순위를 변경하려면 규칙 `zzz000`의 우선순위를 30으로 변경할 수 있습니다.

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

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

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

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

1. **라우팅 세부 정보** 탭에서 라우팅 규칙을 선택한 다음 **편집**을 선택합니다.

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

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

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

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

다음 [put-routing-rule](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/put-routing-rule.html) 명령은 라우팅 규칙 `abc123`의 우선순위를 변경합니다.

```
 aws apigatewayv2 put-routing-rule \
  --domain-name 'api.example.com' \
  --priority 30 \
  --routing-rule-id abc123 \
  --conditions '[
    {
      "MatchHeaders": {
        "AnyOf": [
          {
            "Header": "Hello",
            "ValueGlob": "World"
          }
        ]
      }
    },
    {
      "MatchHeaders": {
        "AnyOf": [
          {
            "Header": "x-version",
            "ValueGlob": "beta"
          }
        ]
      }
    },
    {
      "MatchBasePaths": {
        "AnyOf": [
          "PetStoreShopper"
        ]
      }
    }
  ]'\
  --actions '[
  {
    "InvokeApi": {
      "ApiId": "a1b2c3",
      "Stage": "prod"
    }
  }
 ]'
```

출력은 다음과 같습니다.

```
{
    "Actions": [
        {
            "InvokeApi": {
                "ApiId": "a1b2c3",
                "Stage": "prod",
                "StripBasePath": false
            }
        }
    ],
    "Conditions": [
        {
            "MatchHeaders": {
                "AnyOf": [
                    {
                        "Header": "Hello",
                        "ValueGlob": "World"
                    }
                ]
            }
        },
        {
            "MatchHeaders": {
                "AnyOf": [
                    {
                        "Header": "x-version",
                        "ValueGlob": "beta"
                    }
                ]
            }
        },
        {
            "MatchBasePaths": {
                "AnyOf": [
                    "PetStoreShopper"
                ]
            }
        }
    ],
    "Priority": 38,
    "RoutingRuleArn": "arn:aws:apigateway:us-west-2:111122223333:/domainnames/api.example.com/routingrules/abc123",
    "RoutingRuleId": "abc123"
}
```

------