將規則新增至閘道
閘道規則可讓您控制流量路由並覆寫閘道上的目標組態,而無需重新部署目標。您可以建立覆寫目標行為的組態套件,然後使用規則來控制適用於哪些流量的套件版本。規則也支援根據請求路徑或呼叫者身分,將請求路由到不同的目標。
使用閘道規則來完成下列目標:
-
透過 A/B 測試使用組態套件版本進行實驗
-
將特定主體釘選至組態套件版本以進行偵錯
-
根據請求路徑或來電者身分,將流量路由至特定目標
-
為所有流量設定預設組態套件或目標
閘道規則的運作方式
每個閘道規則都包含下列元件:
| 元件 | 說明 |
|---|---|
|
Priority |
從 1 到 1,000,000 的整數。數字越小表示優先順序越高。每個優先順序值在閘道中必須是唯一的。 |
|
Conditions (選用) |
決定規則是否符合請求的條件。沒有條件的規則會充當符合所有流量的所有截獲。 |
|
動作 (必要) |
當規則相符時要採取的動作。您可以覆寫組態套件、路由至特定目標或兩者。 |
|
描述 (選用) |
規則用途的文字描述。 |
規則解析
閘道會以遞增優先順序評估規則 (數字越小)。閘道會使用第一個相符的語意獨立解析每個動作類型。
下表顯示閘道如何解析範例請求的規則。在此範例中,QA 角色會將請求傳送至 /my-target-canary/chat。
| Priority | 條件 | 動作 | 符合請求? | 結果 |
|---|---|---|---|---|
|
100 |
QA 角色 |
|
是 |
解析 |
|
200 |
路徑 |
|
是 |
解析 |
|
1000000 |
無 (全部鎖定) |
|
是 |
這兩種動作類型都已解析。已略過。 |
最終結果:請求使用套件版本 A 並路由至 my-target-canary。
提示
在優先順序數字 (例如 100、200、300) 之間保留間隙,以便您稍後可以插入規則,而無需重新編號現有規則。
條件
條件決定哪些請求符合規則。規則最多可有 2 個條件。沒有條件的規則符合所有流量。
閘道支援下列條件類型:
- matchPrincipals
-
根據發起人的 IAM 主體比對請求。
anyOf清單包含 1 到 100 個項目。每個項目都會指定iamPrincipal具有下列欄位的 :-
arn— 要比對的 IAM 主體 ARN。 -
operator(選用) — 比較運算子。有效值為StringEquals(預設) 和StringLike。使用StringLike進行萬用字元比對。
-
- matchPaths
-
根據請求路徑比對請求。此
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 |