本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
向网关添加规则
网关规则允许您控制流量路由并覆盖网关上的目标配置,而无需重新部署目标。您可以创建覆盖目标行为的配置包,然后使用规则来控制哪个包版本适用于哪些流量。规则还支持根据请求路径或呼叫者身份将请求路由到不同的目标。
使用网关规则来实现以下目标:
-
通过 A/B 测试试用配置包版本
-
将特定主体固定到配置包版本以进行调试
-
根据请求路径或呼叫者身份将流量路由到特定目标
-
为所有流量设置默认配置包或目标
网关规则的工作原理
每条网关规则都包含以下组件:
| 组件 | 说明 |
|---|---|
|
优先级 |
从 1 到 1,000,000 的整数。数字越小表示优先级越高。每个优先级值在网关中必须是唯一的。 |
|
条件(可选) |
确定规则是否与请求匹配的标准。没有条件的规则起到包罗万象的作用,可以匹配所有流量。 |
|
操作(必填) |
规则匹配时要采取的操作。您可以覆盖配置包,路由到特定目标,或两者兼而有之。 |
|
Description(可选) |
对规则目的的文字描述。 |
规则解析
网关按优先级升序评估规则(先降低数字)。网关使用首次匹配语义独立解析每种操作类型。
下表显示网关如何解析示例请求的规则。在此示例中,QA 角色向发送请求/my-target-canary/chat。
| 优先级 | Conditions | 操作 | 比赛请求? | 结果 |
|---|---|---|---|---|
|
100 |
质量保证角色 |
|
是 |
解析 |
|
200 |
路径 |
|
是 |
下定决心为 |
|
1000000 |
无(包罗万象) |
|
是 |
两种操作类型都已解决。已跳过。 |
最终结果:该请求使用捆绑版本 A 并路由至my-target-canary。
提示
在优先级数字(例如 100、200、300)之间留出间隔,这样以后无需对现有规则重新编号即可插入规则。
Conditions
条件决定了规则匹配哪些请求。一条规则最多可以有 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,则请求必须匹配每种条件类型的至少一个条目。
操作
操作定义了规则匹配时网关的操作。一条规则最多可以有 2 个操作。
网关支持以下操作类型:
- 配置包覆盖 ()
configurationBundle -
覆盖应用于匹配流量的配置包。
-
staticOverride— 将所有匹配流量固定到特定的配置包版本。指定捆绑包 ARN 和版本 ID。 -
weightedOverride— 在两个配置包版本之间分配流量。该trafficSplit列表必须恰好包含 2 个条目,其权重总和为 100。配置包必须与网关位于同一个账户中。
-
- 目标路由 (
routeToTarget) -
将流量与特定目标匹配的路由。目标必须使用 HTTP 协议并处于
Ready状态。-
staticRoute— 按名称将所有匹配的流量路由到特定目标。 -
weightedRoute— 在两个目标之间拆分流量。该trafficSplit列表必须恰好包含 2 个条目,其权重总和为 100。流量分割条目名称必须是唯一的。
-
限制
下表列出了网关规则的限制。
| 资源 | 限制 |
|---|---|
|
每个网关的规则 |
20 |
|
优先级范围 |
1 到 1,000,000 |
|
每条规则的最大条件 |
2 |
|
每条规则的最大操作数 |
2 |
|
|
100 |
|
|
10 |
|
|
恰好是 2 |
|
|
1 到 99 |