本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
如何使用路由規則
您可以使用 AWS 管理主控台 AWS CLI或任何 AWS SDK 建立路由規則。建立規則之後,您可以變更其優先順序。
建立路由規則
下列程序說明如何針對自訂網域名稱建立路由規則,並將路由模式設定為 ROUTING_RULE_THEN_API_MAPPING 或 ROUTING_RULE_ONLY。
- AWS 管理主控台
在以下網址登入 API Gateway 主控台:https://console.aws.amazon.com/apigateway。
從主要導覽窗格中,選擇 Custom Domain Names (自訂網域名稱)。
-
選擇自訂網域名稱。
-
在路由詳細資訊索引標籤上,選擇新增路由規則。
-
選擇新增條件以新增條件。
您可以新增標頭或基本路徑條件。若要將所有傳入請求與您的自訂網域名稱進行比對,請勿新增條件。
針對動作,使用下拉式清單選取您的目標 API 和目標階段。
-
選擇下一步。
在優先順序欄位中,輸入優先順序的數字。
API Gateway 會依優先順序評估規則,從最低值到最高值。
如果您要建立規則但不設任何條件,建議您使用高優先順序值。
選擇建立路由規則。
- AWS CLI
-
以下 create-routing-rule 命令會建立優先順序為 50 的路由規則。在此範例中,API Gateway 會將任何具有標頭
Hello:World和x-version:beta以及基本路徑PetStoreShopper的傳入請求,路由傳送至目標 APIa1b2c3。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" }
變更路由規則的優先順序
您可以變更路由規則的優先順序。此變更會立即生效,且可能影響 API 取用者調用您的自訂網域名稱的方式。我們建議您在設定路由規則的優先順序時,在規則之間保留間隙。
例如,假設有兩項路由規則,規則 abc123 的優先順序為 50,規則 zzz000 的優先順序為 150。若要變更規則的優先順序,以便讓 API Gateway 先評估規則 zzz000,那麼您可以將規則 zzz000 的優先順序變更為 30。
- AWS 管理主控台
-
在以下網址登入 API Gateway 主控台:https://console.aws.amazon.com/apigateway。
從主要導覽窗格中,選擇 Custom Domain Names (自訂網域名稱)。
-
選擇自訂網域名稱。
-
在路由詳細資訊索引標籤上,選擇您的路由規則,然後選擇編輯。
-
選擇下一步。
-
針對優先順序,輸入新的優先順序。
選擇儲存變更。
- AWS CLI
-
以下 put-routing-rule 命令會變更路由規則
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" }