

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 向网关添加规则
<a name="gateway-rules"></a>

网关规则允许您控制流量路由并覆盖网关上的目标配置，而无需重新部署目标。您可以创建覆盖目标行为的[配置包](configuration-bundles.md)，然后使用规则来控制哪个包版本适用于哪些流量。规则还支持根据请求路径或呼叫者身份将请求路由到不同的目标。

使用网关规则来实现以下目标：
+ 通过 A/B 测试试用配置包版本
+ 将特定主体固定到配置包版本以进行调试
+ 根据请求路径或呼叫者身份将流量路由到特定目标
+ 为所有流量设置默认配置包或目标

## 网关规则的工作原理
<a name="gateway-rules-how-they-work"></a>

每条网关规则都包含以下组件：


| 组件 | 说明 | 
| --- | --- | 
| 优先级 | 从 1 到 1,000,000 的整数。数字越小表示优先级越高。每个优先级值在网关中必须是唯一的。 | 
| 条件（可选） | 确定规则是否与请求匹配的标准。没有条件的规则起到包罗万象的作用，可以匹配所有流量。 | 
| 操作（必填） | 规则匹配时要采取的操作。您可以覆盖配置包，路由到特定目标，或两者兼而有之。 | 
| Description（可选） | 对规则目的的文字描述。 | 

## 规则解析
<a name="gateway-rules-resolution"></a>

网关按优先级升序评估规则（先降低数字）。网关使用首次匹配语义独立解析每种操作类型。

下表显示网关如何解析示例请求的规则。在此示例中，QA 角色向发送请求`/my-target-canary/chat`。


| 优先级 | Conditions | 操作 | 比赛请求？ | 结果 | 
| --- | --- | --- | --- | --- | 
| 100 | 质量保证角色 |  `configurationBundle`: 捆绑版本 A | 是 | 解析`configurationBundle`为版本 A | 
| 200 | 路径 `/my-target-canary/*`  |  `routeToTarget`: `my-target-canary`  | 是 | 下定决心为 `routeToTarget` `my-target-canary`  | 
| 1000000 | 无（包罗万象） |  `configurationBundle`: 捆绑版本 B，`routeToTarget`: `my-target-primary`  | 是 | 两种操作类型都已解决。已跳过。 | 

 **最终结果：**该请求使用捆绑版本 A 并路由至`my-target-canary`。

**提示**  
在优先级数字（例如 100、200、300）之间留出间隔，这样以后无需对现有规则重新编号即可插入规则。

## Conditions
<a name="gateway-rules-conditions"></a>

条件决定了规则匹配哪些请求。一条规则最多可以有 2 个条件。没有条件的规则匹配所有流量。

网关支持以下条件类型：

 **比赛负责人 **   
根据调用者的 IAM 主体匹配请求。该`anyOf`列表包含 1 到 100 个条目。每个条目都`iamPrincipal`使用以下字段指定：  
+  `arn`— 要匹配的 IAM 主体 ARN。
+  `operator`（可选）— 比较运算符。有效值为 `StringEquals`（默认值）和 `StringLike`。`StringLike`用于通配符匹配。

 **匹配路径 **   
根据请求路径匹配请求。该`anyOf`列表包含 1 到 10 个条目。每个条目都必须使用格式`/<targetName>/*`，其中`<targetName>`与网关上现有 HTTP 目标的名称相匹配。目标必须处于`Ready`状态。只有具有 HTTP 目标的网关才支持该`matchPaths`条件。不允许使用以下保留路径前缀：`/mcp`、、`/a2a`、`/responses``/converse`、`/.well-known`。

 **条件评估逻辑 ** 
+  **在条件类型内：网**关使用 OR 逻辑。如果请求满足`anyOf`列表中的任何条目，则该请求匹配。
+  **跨条件类型：网**关使用 AND 逻辑。如果规则同时具有`matchPrincipals`和`matchPaths`，则请求必须匹配每种条件类型的至少一个条目。

## 操作
<a name="gateway-rules-actions"></a>

操作定义了规则匹配时网关的操作。一条规则最多可以有 2 个操作。

网关支持以下操作类型：

 **配置包覆盖 () `configurationBundle` **   
覆盖[应用于匹配流量的](configuration-bundles.md)配置包。  
+  `staticOverride`— 将所有匹配流量固定到特定的配置包版本。指定捆绑包 ARN 和版本 ID。
+  `weightedOverride`— 在两个配置包版本之间分配流量。该`trafficSplit`列表必须恰好包含 2 个条目，其权重总和为 100。配置包必须与网关位于同一个账户中。

 **目标路由 (`routeToTarget`) **   
将流量与特定目标匹配的路由。目标必须使用 HTTP 协议并处于`Ready`状态。  
+  `staticRoute`— 按名称将所有匹配的流量路由到特定目标。
+  `weightedRoute`— 在两个目标之间拆分流量。该`trafficSplit`列表必须恰好包含 2 个条目，其权重总和为 100。流量分割条目名称必须是唯一的。

## 限制
<a name="gateway-rules-limits"></a>

下表列出了网关规则的限制。


| 资源 | 限制 | 
| --- | --- | 
| 每个网关的规则 | 20 | 
| 优先级范围 | 1 到 1,000,000 | 
| 每条规则的最大条件 | 2 | 
| 每条规则的最大操作数 | 2 | 
|  `matchPrincipals.anyOf`最大条目数 | 100 | 
|  `matchPaths.anyOf`最大条目数 | 10 | 
|  `trafficSplit`条目 | 恰好是 2 | 
|  `trafficSplit`重量范围 | 1 到 99 | 

**Topics**