

# 如何使用路由规则
<a name="apigateway-routing-rules-use"></a>

可以使用 AWS 管理控制台、AWS CLI 或任何 AWS SDK 创建路由规则。创建规则后，可以更改其优先级。

## 创建路由规则
<a name="rest-api-routing-rules-create"></a>

以下过程说明如何在路由模式设置为 `ROUTING_RULE_THEN_API_MAPPING` 或 `ROUTING_RULE_ONLY` 的情况下，为自定义域名创建路由规则。

------
#### [ AWS 管理控制台 ]

1. 通过以下网址登录到 Amazon API Gateway 控制台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

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 使用者调用自定义域名的方式。我们建议您在设置路由规则的优先级时，在规则之间留出间隔。

例如，假设两个路由规则，规则 `abc123` 的优先级为 50，规则 `zzz000` 的优先级为 150。要更改规则的优先级，以便 API Gateway 首先评估 `zzz000` 规则，您可以将规则 `zzz000` 的优先级更改为 30。

------
#### [ AWS 管理控制台 ]

1. 通过以下网址登录到 Amazon API Gateway 控制台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

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"
}
```

------